docs: @Override
      public void requestJoin(SocketChannel socket, SSLEngine sslEngine,
                              MessagingChannel messagingChannel,
                              InetSocketAddress listeningAddress, JSONObject jo) throws Exception {
          /*
           * Generate the host id via creating an ephemeral sequential node
           */
          Integer hostId = selectNewHostId(socket.socket().getInetAddress().getHostAddress());
          prepSocketChannel(socket);
          ForeignHost fhost = null;
          try {
              try {
                  JoinAcceptor.PleaDecision decision = m_acceptor.considerMeshPlea(m_zk, hostId, jo);
  
                  /*
                   * Write the response that advertises the cluster topology
                   */
                  writeRequestJoinResponse(hostId, decision, socket, messagingChannel);
                  if (!decision.accepted) {
                      socket.close();
                      return;
                  }
  
                  /*
                   * Wait for the a response from the joining node saying that it connected
                   * to all the nodes we just advertised. Use a timeout so that the cluster can't be stuck
                   * on failed joins.
                   */
                  ByteBuffer finishedJoining = ByteBuffer.allocate(1);
                  socket.configureBlocking(false);
                  long start = System.currentTimeMillis();
                  while (finishedJoining.hasRemaining() && System.currentTimeMillis() - start < 120000) {
                      // This is just one byte to indicate that it finished joining.
                      // No need to encrypt because the value of it doesn't matter
                      int read = socket.read(finishedJoining);
                      if (read == -1) {
                          networkLog.info("New connection was unable to establish mesh");
                          socket.close();
                          return;
                      } else if (read < 1) {
                          Thread.sleep(5);
                      }
                  }
  
                  /*
                   * Now add the host to the mailbox system
                   */
                  PicoNetwork picoNetwork = createPicoNetwork(sslEngine, socket, false);
                  fhost = new ForeignHost(this, hostId, socket, m_config.deadHostTimeout, listeningAddress, picoNetwork);
                  putForeignHost(hostId, fhost);
                  fhost.enableRead(VERBOTEN_THREADS);
  
                  m_acceptor.accrue(hostId, jo);
              } catch (Exception e) {
                  networkLog.error("Error joining new node", e);
                  addFailedHost(hostId);
                  synchronized(HostMessenger.this) {
                      removeForeignHost(hostId);
                  }
                  m_acceptor.detract(m_zk, hostId);
                  socket.close();
                  return;
              }
  
              /*
               * And the last step is to wait for the new node to join ZooKeeper.
               * This node is the one to create the txn that will add the new host to the list of hosts
               * with agreement sites across the cluster.
               */
              long hsId = CoreUtils.getHSIdFromHostAndSite(hostId, AGREEMENT_SITE_ID);
              if (!m_agreementSite.requestJoin(hsId).await(60, TimeUnit.SECONDS)) {
                  reportForeignHostFailed(hostId);
              }
          } catch (Throwable e) {
              org.voltdb.VoltDB.crashLocalVoltDB("", true, e);
          }
      }