summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2010-08-14 20:27:07 +0100
committerMatthew Sackman <matthew@rabbitmq.com>2010-08-14 20:27:07 +0100
commit7b05055eb9ae4d2b7a0a291d03bdc04ad286e556 (patch)
tree1cf155e4c69146c667fd433111214187eba7d073 /src
parent0c14e210ca1d08adac5239c264e24c209a2c0489 (diff)
downloadrabbitmq-server-git-7b05055eb9ae4d2b7a0a291d03bdc04ad286e556.tar.gz
When recovering, because of the possibility of finding the same msg twice, ensure that we only count and include the first copy. Other copies are then ignored.
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_msg_store.erl9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/rabbit_msg_store.erl b/src/rabbit_msg_store.erl
index 60fcd25896..46b4582d23 100644
--- a/src/rabbit_msg_store.erl
+++ b/src/rabbit_msg_store.erl
@@ -1199,6 +1199,7 @@ count_msg_refs(Gen, Seed, State) ->
ok = case index_lookup(Guid, State) of
not_found ->
index_insert(#msg_location { guid = Guid,
+ file = undefined,
ref_count = Delta },
State);
#msg_location { ref_count = RefCount } = StoreEntry ->
@@ -1409,14 +1410,14 @@ build_index_worker(Gatherer, State = #msstate { dir = Dir },
lists:foldl(
fun (Obj = {Guid, TotalSize, Offset}, {VMAcc, VTSAcc}) ->
case index_lookup(Guid, State) of
- not_found ->
- {VMAcc, VTSAcc};
- StoreEntry ->
+ StoreEntry = #msg_location { file = undefined } ->
ok = index_update(StoreEntry #msg_location {
file = File, offset = Offset,
total_size = TotalSize },
State),
- {[Obj | VMAcc], VTSAcc + TotalSize}
+ {[Obj | VMAcc], VTSAcc + TotalSize};
+ _ ->
+ {VMAcc, VTSAcc}
end
end, {[], 0}, Messages),
%% foldl reverses lists, find_contiguous_block_prefix needs