anchor.diff:  
   %% @doc Execute for manager-nodes.
   %% @private
  --spec(exec_1(?SERVER_MANAGER | ?SERVER_STORAGE | ?SERVER_GATEWAY, list(), list()) ->
  +-spec(exec_1(?SERVER_MANAGER | ?SERVER_STORAGE | ?SERVER_GATEWAY, list(), list(), function()) ->
                ok | {error, any()}).
  -exec_1(_,_,[]) ->
  +exec_1(_,_,[],_) ->
       ok;
  -exec_1(?SERVER_MANAGER = ServerType, Managers, [{Node, State}|T]) ->
  +exec_1(?SERVER_MANAGER = ServerType, Managers, [{Node, State}|T], Callback) ->
       case State of
           ?STATE_RUNNING ->
  +            case is_function(Callback) of
  +                true ->
  +                    ?debugVal(Callback),
  +                    catch Callback(Node);
  +                false ->
  +                    void
  +            end,
               _ = compare_manager_with_remote_chksum(Node, Managers);
           _ ->
               void
       end,
  -    exec_1(ServerType, Managers, T);
  +    exec_1(ServerType, Managers, T, Callback);
   
   %% @doc Execute for gateway-nodes and storage-nodes.
  -%% @private
  -exec_1(ServerType, Managers, [{Node, State}|T]) ->
  +%%      Storage and Gateway does not use the parameter of "callback"
  +%% @private
  +exec_1(ServerType, Managers, [{Node, State}|T], Callback) ->
       case (erlang:node() == Node) of
           true ->
               void;
  
positive.code: -include_lib("eunit/include/eunit.hrl").
  
  %% API
  -export([start_link/2,
           stop/0]).
  -export([start_heartbeat/0,
           stop_heartbeat/0,
  
negative.code:                        timestamp    = Timestamp,
                         enable       = true,
                         managers     = Managers,
                         proc_auditor = ProcAuditor,
                         callback     = Callback
                        } = State) ->
      ThisTime = leo_date:now() * 1000,
      State_1 = State#state{timestamp = ThisTime},
  
  