anchor.diff:                  local_tree  :: pid(),
                   remote_tree :: pid(),
                   built       :: non_neg_integer(),
  +                timer       :: reference(),
                   timeout     :: pos_integer()
                  }).
   
   %% Per state transition timeout used by certain transitions
  --define(DEFAULT_ACTION_TIMEOUT, 300000). %% 5 minutes
  +-define(DEFAULT_ACTION_TIMEOUT, 60000). %% 1 minute
   
   %% Use occasional calls to disk_log:log() for some backpressure periodically
   -define(LOG_BATCH_SIZE, 5000).
  
positive.code:                                                  local_fsm) of
                  ok ->
                      remote_exchange_request(RemoteVN, IndexN),
                      next_state_with_timeout(prepare_exchange, State);
                  _ ->
                      send_exchange_status(already_locked, State),
                      {stop, normal, State}
  
negative.code:     lager:info("Timeout during exchange between (local) ~p and (remote) ~p, "
                 "(preflist) ~p", [LocalVN, RemoteVN, IndexN]),
      send_exchange_status({timeout, RemoteVN, IndexN}, State),
      {stop, normal, State#state{timer=undefined}}.
  
  %% @private
  send_exchange_status(Status, #state{local=LocalVN,
                                      remote=RemoteVN,
                                      index_n=IndexN}) ->
      riak_kv_entropy_manager:exchange_status(LocalVN, RemoteVN, IndexN, Status).
  
  exchange_complete({LocalIdx, _}, {RemoteIdx, RemoteNode}, IndexN, Repaired) ->
      riak_kv_entropy_info:exchange_complete(LocalIdx, RemoteIdx, IndexN, Repaired),
  