anchor.diff:      gen_server:cast(self(), {rr_blob, End}),
       0;
   rereplicate_blob(S, BlobName) ->
  -    [{_, Present, Recovered, _, _, Rebalance}] = ets:lookup(gc_blobs, BlobName),
  +    [{_, Present, Recovered, _, _, Rebalance, _}] = ets:lookup(gc_blobs, BlobName),
       {FinalReps, Reqs} = rereplicate_blob(S, BlobName, Present, Recovered, Rebalance, S#state.blobk),
       ets:update_element(gc_blobs, BlobName, {4, FinalReps}),
       Next = ets:next(gc_blobs, BlobName),
  
positive.code:                   case ets:lookup(gc_blobs, BlobName) of
                        [] ->
                            Entry = {BlobName, [{Node, Vol}], [],
                                     noupdate, Size, norebalance},
                            ets:insert(gc_blobs, Entry);
                        [{_, Present, _, _, _, _}] ->
                            Acc = [{Node, Vol} | Present],
                            ets:update_element(gc_blobs, BlobName, {2, Acc})
                    end;
               ({{BlobName, _Node}, Status}, _)
                  when Status =:= missing; Status =:= false ->
                    % Create an entry for missing blobs.  This allows
                    % us to recover them from other nodes if present
                    % (e.g. after hostname changes).
                    case ets:lookup(gc_blobs, BlobName) of
                        [] ->
                            Entry = {BlobName, [], [], noupdate, undefined, norebalance},
                            ets:insert(gc_blobs, Entry);
                        [{_, _, _, _, _, _}] ->
                            true
                    end
            end, true, gc_blob_map),
      ets:delete(gc_blob_map),
  
negative.code:         [] ->
              % New blob added after GC/RR started.
              [];
          [{_, P, R, noupdate, _, _, _}] ->
              usable_locations(S, BlobName, P ++ R, []);
          [{_, P, R, {update, NewUrls}, _, _, _}] ->
              usable_locations(S, BlobName, P ++ R, NewUrls)
      end.
  
  