anchor.diff:      gen_fsm:send_event(From, ack_abort),
       {stop, normal, State}.
   
  -%% =====================================================================
  +%%%===================================================================
  +%%% statem CALLBACK FUNCTIONS
  +%%%=====================================================================
   
   callback_mode() -> state_functions.
   
   code_change(_OldVsn, StateName, State, _Extra) -> {ok, StateName, State}.
   
  -terminate(_Reason, _SN, _SD) ->
  -    ok.
  -
  -inc(_, _) -> ok.
  -dec(_) -> ok.
  -inc(_) -> ok.
  +terminate(_Reason, _SN, _SD) -> ok.
  +
  
positive.code: 
  start_link() ->
      gen_statem:start_link(?MODULE, [], []).
  
  %% @doc Initialize the state.
  init([]) ->
  
negative.code:             {ok, mock_downsteam}
      end.
  
  
  update_data_item(FsmRef, _Transaction, Key, _Type, _DownstreamRecord) ->
      gen_statem:call(FsmRef, {update_data_item, Key}).
  
  prepare(UpdatedPartitions, _Transaction) ->
      Self = self(),
      lists:foreach(fun({Fsm, Rest}) -> gen_statem:cast(Fsm, {prepare, Self, Rest}) end, UpdatedPartitions).
  
  inc(_, _) -> ok.
  dec(_) -> ok.
  inc(_) -> ok.
  
  %%%===================================================================
  %%% STATE FUNCTIONS
  %%%===================================================================
  
  %% We spawn a new mock_partition for each update request, therefore
  %% a mock will only receive a single update so only need to store a
  %% single updated key. In contrast, clocksi_vnode may receive multiple
  %% update request for a single transaction.
  execute_op({call, From}, {update_data_item, Key}, State) ->
      Result = case Key of
                  fail_update -> {error, mock_downstream_fail};
                  _ -> ok
               end,
      gen_fsm:send_event(From, Result),
      {next_state, execute_op, State#state{key=Key}};
  
  execute_op(cast, {prepare, From, [{Key, _, _}|_]}, State) ->
      Result = case Key of
  