anchor.diff:  
   %% @doc This function takes care of reading. It is implemented here for not blocking the
   %% vnode when the write function calls it. That is done for garbage collection.
  --spec internal_read(term(),term(), atom(), vectorclock:vectorclock(), atom() , atom() ) -> ok.
  +-spec internal_read(term(),term(), atom(), vectorclock:vectorclock(), atom() , atom() ) -> {ok, term()} | {error, atom()}.
   internal_read(Sender, Key, Type, SnapshotTime, OpsCache, SnapshotCache) ->
                                                   % get the latest snapshot for the key
       case ets:lookup(SnapshotCache, Key) of
  
positive.code:     case logging_vnode:append(Node,LogId,LogRecord) of
          {ok, _} ->
              riak_core_vnode:reply(Sender, ok),
              case ets:lookup(OpsCache, Key) of
                  []->
                      OpsDict=orddict:new();
                  [{_, OpsDict}]->
                      OpsDict
              end,
              op_insert_gc(Key,DownstreamOp, OpsDict, OpsCache, SnapshotCache),
              ok;
          {error, Reason} ->
              riak_core_vnode:reply(Sender, {error, Reason})
  
negative.code:             NewSnapshot=clocksi_materializer:new(Type),
              case ets:lookup(OpsCache, Key) of
                  [] ->
                      riak_core_vnode:reply(Sender, {ok, NewSnapshot}),
                      {ok, NewSnapshot};
                  [{_, OpsDict}] ->
                      {ok, Ops}= filter_ops(OpsDict),
                      LastOp=lists:last(Ops),
  