docs: public void start() throws Exception {
          /*
           * SJ uses this barrier if this node becomes the leader to know when ZooKeeper
           * has been finished bootstrapping.
           */
          CountDownLatch zkInitBarrier = new CountDownLatch(1);
  
          /*
           * If start returns true then this node is the leader, it bound to the coordinator address
           * It needs to bootstrap its agreement site so that other nodes can join
           */
          if(m_joiner.start(zkInitBarrier)) {
              m_network.start();
  
              /*
               * m_localHostId is 0 of course.
               */
              long agreementHSId = getHSIdForLocalSite(AGREEMENT_SITE_ID);
  
              /*
               * A set containing just the leader (this node)
               */
              HashSet<Long> agreementSites = new HashSet<Long>();
              agreementSites.add(agreementHSId);
  
              /*
               * A basic site mailbox for the agreement site
               */
              SiteMailbox sm = new SiteMailbox(this, agreementHSId);
              createMailbox(agreementHSId, sm);
  
  
              /*
               * Construct the site with just this node
               */
              m_agreementSite =
                  new AgreementSite(
                          agreementHSId,
                          agreementSites,
                          0,
                          sm,
                          new InetSocketAddress(
                                  m_config.zkInterface.split(":")[0],
                                  Integer.parseInt(m_config.zkInterface.split(":")[1])),
                          m_config.backwardsTimeForgivenessWindow,
                          m_failedHostsCallback);
              m_agreementSite.start();
              m_agreementSite.waitForRecovery();
              m_zk = org.voltcore.zk.ZKUtil.getClient(
                      m_config.zkInterface, 60 * 1000, VERBOTEN_THREADS);
              if (m_zk == null) {
                  throw new Exception("Timed out trying to connect local ZooKeeper instance");
              }
  
              CoreZK.createHierarchy(m_zk);
  
              /*
               * This creates the ephemeral sequential node with host id 0 which
               * this node already used for itself. Just recording that fact.
               */
              final int selectedHostId = selectNewHostId(m_config.coordinatorIp.toString());
              if (selectedHostId != 0) {
                  org.voltdb.VoltDB.crashLocalVoltDB("Selected host id for coordinator was not 0, " + selectedHostId, false, null);
              }
  
              /*
               * seed the leader host criteria ad leader is always host id 0
               */
              m_acceptor.accrue(selectedHostId, m_acceptor.decorate(new JSONObject(), Optional.empty()));
  
              // Store the components of the instance ID in ZK
              JSONObject instance_id = new JSONObject();
              instance_id.put("coord",
                      ByteBuffer.wrap(m_config.coordinatorIp.getAddress().getAddress()).getInt());
              instance_id.put("timestamp", System.currentTimeMillis());
              hostLog.debug("Cluster will have instance ID:\n" + instance_id.toString(4));
              byte[] payload = instance_id.toString(4).getBytes("UTF-8");
              m_zk.create(CoreZK.instance_id, payload, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
  
              /*
               * Store all the hosts and host ids here so that waitForGroupJoin
               * knows the size of the mesh. This part only registers this host
               */
              final HostInfo hostInfo = new HostInfo(m_config.coordinatorIp.toString(), m_config.group, m_config.localSitesCount,
                      m_config.recoveredPartitions);
              m_zk.create(CoreZK.hosts_host + selectedHostId, hostInfo.toBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL);
          }
          zkInitBarrier.countDown();
      }