anchor.diff:       GLocalLearner  :: comm:mypid(),
        %% reference counting on subscriptions inside RTMs
        Subs           :: [{comm:mypid(), non_neg_integer()}],
  -     OpenTxNum      :: non_neg_integer(),
  -     QueuedMessages :: msg_queue:msg_queue()}.
  +     OpenTxNum      :: non_neg_integer()}.
   
   %% initialize: return initial state.
   -spec init([]) -> state() | {'$gen_component', [{on_handler, on_init},...],
  
positive.code:         tx_tm ->
              comm:send_local(self(), {get_node_details}),
              State = {_RTMs = [], TableName, Role, LAcceptor, GLLearner,
                       [], 0, msg_queue:new()},
              %% subscribe to id changes
              rm_loop:subscribe(self(), ?MODULE,
                                fun rm_loop:subscribe_dneighbor_change_filter/3,
                                fun ?MODULE:rm_send_update/4, inf),
              gen_component:change_handler(State, on_init);
          _ -> {_RTMs = [], TableName, Role, LAcceptor, GLLearner, [], 0,
                msg_queue:new()}
      end.
  
  -spec on(comm:message(), state()) -> state().
  
negative.code: on_init({tx_tm_rtm_commit, _Client, _ClientsID, _TransLog} = Msg, State) ->
      %% only in tx_tm
      tx_tm = state_get_role(State),
      %% forward request to a node which is ready to serve requests
      DHTNode = pid_groups:get_my(dht_node),
      %% there, redirect message to tx_tm
      RedirectMsg = {send_to_group_member, tx_tm, Msg},
      comm:send_local(DHTNode, {lookup_aux, ?RT:get_random_node_id(), 0, RedirectMsg}),
      State;
  
  on_init({crash, _Pid} = Msg, State) ->
      %% only in tx_tm
  