anchor.diff:  %%             CommitTime = local commit time of this Snapshot at DC
   %%             SnapshotTime = vector clock
   %%      Outptut: true or false
  --spec belongs_to_snapshot(commit_time(),
  -                          snapshot_time()) -> boolean().
  +-spec belongs_to_snapshot(commit_time(), snapshot_time()) -> boolean().
   belongs_to_snapshot({Dc, CommitTime}, SnapshotTime) ->
   	{ok, Ts}= vectorclock:get_clock_of_dc(Dc, SnapshotTime),
   	CommitTime =< Ts.
   
   %% @doc Operation to insert a Snapshot in the cache and start
   %%      Garbage collection triggered by reads.
  --spec snapshot_insert_gc(Key::term(), SnapshotDict::orddict:orddict(),
  -                         OpsDict::orddict:orddict(), atom() , atom() ) -> true.
  +-spec snapshot_insert_gc(key(), orddict:orddict(), orddict:orddict(), ets:tid() , ets:tid() ) -> true.
   snapshot_insert_gc(Key, SnapshotDict, OpsDict, SnapshotCache, OpsCache)->
       case (orddict:size(SnapshotDict))==?SNAPSHOT_THRESHOLD of
           true ->
  
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: 
  %% @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(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
          [] ->
  