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(), snapshot_time(), txid() | ignore, atom() , atom() ) -> {ok, term()} | {error, no_snapshot}.
  +-spec internal_read(pid(), key(), type(), snapshot_time(), txid() | ignore, ets:tid() , ets:tid() ) -> {ok, term()} | {error, no_snapshot}.
   internal_read(Sender, Key, Type, SnapshotTime, TxId, OpsCache, SnapshotCache) ->
       case ets:lookup(SnapshotCache, Key) of
           [] ->
  
positive.code: 
  
  %%@doc write operation to cache for future read
  -spec update(key(), #clocksi_payload{}) -> ok | {error, atom()}.
  update(Key, DownstreamOp) ->
      Preflist = log_utilities:get_preflist_from_key(Key),
      IndexNode = hd(Preflist),
  
negative.code: %% the mechanism is very simple; when there are more than OPS_THRESHOLD
  %% operations for a given key, just perform a read, that will trigger
  %% the GC mechanism.
  -spec op_insert_gc(key(), clocksi_payload(), ets:tid(), ets:tid()) -> true.
  op_insert_gc(Key, DownstreamOp, OpsCache, SnapshotCache)->
      OpsDict = case ets:lookup(OpsCache, Key) of
                    []->
                        orddict:new();
  