/**
   * this initializes the managers that support the internal communication network.
   *
   * <p>TODO this should be refactored to use the conf file
   */
  private void startManagers() {
    if (conf == null) return;

    // start the inbound and outbound manager worker threads
    ManagementQueue.startup();

    // create manager for network changes
    networkMgr = NetworkManager.initManager(conf);

    // create manager for leader election. The number of votes (default 1)
    // is used to break ties where there are an even number of nodes.
    // electionMgr = ElectionManager.initManager(conf);
    raftMgr = RaftManager.initManager(conf, clusterConfList);
    // create manager for accepting jobs
    jobMgr = JobManager.initManager(conf);

    System.out.println(
        "---> Server.startManagers() expecting "
            + conf.getAdjacent().getAdjacentNodes().size()
            + " connections");
    // establish nearest nodes and start sending heartbeats
    heartbeatMgr = HeartbeatManager.initManager(conf);
    for (NodeDesc nn : conf.getAdjacent().getAdjacentNodes().values()) {
      HeartbeatData node =
          new HeartbeatData(nn.getNodeId(), nn.getHost(), nn.getPort(), nn.getMgmtPort());

      // fn(from, to)
      HeartbeatPusher.getInstance().connectToThisNode(conf.getNodeId(), node);
    }
    // heartbeatMgr.start();
    // manage heartbeatMgr connections
    HeartbeatPusher conn = HeartbeatPusher.getInstance();
    conn.start();

    /**
     * *** Leader Election Start 29th March
     * 2015************************************************************************* This will start
     * the monitor thread and check whether there is leader or not. If not then it will start the
     * Election. This thread is used to send appendRPC to all the followers. IF they don't receive
     * messages within a certain period then they will start election
     */
    raftMgr.startMonitor();

    logger.info("Server " + conf.getNodeId() + ", managers initialized");

    // Adding code to add all clusters

  }
 public void release() {
   if (HeartbeatManager.getInstance() != null) HeartbeatManager.getInstance().release();
 }