docs: static synchronized int doHeartbeat( H2ONode h2o ) {
      // Kill somebody if the jar files mismatch.  Do not attempt to deal with
      // mismatched jars.
      if( !H2O.OPT_ARGS.md5skip && !h2o._heartbeat.check_jar_md5() ) {
        if( H2O.CLOUD.size() > 1 ) {
          Log.warn("Killing "+h2o+" because of H2O version mismatch (md5 differs).");
          UDPRebooted.T.mismatch.send(h2o);
        } else {
          Log.err("Attempting to join "+h2o+" with an H2O version mismatch (md5 differs).  (Is H2O already running?)  Exiting.");
          H2O.exit(-1);
        }
        return 0;
      }
  
      // Never heard of this dude?  See if we want to kill him off for being cloud-locked
      if( !PROPOSED.contains(h2o) ) {
        if( _cloudLocked ) {
          Log.warn("Killing "+h2o+" because the cloud is no longer accepting new H2O nodes.");
          UDPRebooted.T.locked.send(h2o);
          return 0;
        }
        if( _commonKnowledge ) {
          _commonKnowledge = false; // No longer sure about things
          H2O.SELF._heartbeat._common_knowledge = false;
          Log.debug("Cloud voting in progress");
        }
  
        // Add to proposed set, update cloud hash
        H2ONode res = PROPOSED.putIfAbsent(h2o._key,h2o);
        assert res==null;
        H2O.SELF._heartbeat._cloud_hash += h2o.hashCode();
  
      } else if( _commonKnowledge ) {
        return 0;                 // Already know about you, nothing more to do
      }
      int chash = H2O.SELF._heartbeat._cloud_hash, dummy = 0;
      assert chash == (dummy=doHash()) : "mismatched hash4, HB="+chash+" full="+dummy;
      assert _commonKnowledge==false;
  
      // Do we have consensus now?
      H2ONode h2os[] = PROPOSED.values().toArray(new H2ONode[0]);
      for( H2ONode h2o2 : h2os )
        if( chash != h2o2._heartbeat._cloud_hash )
          return print("Heartbeat hashes differ, self=0x"+Integer.toHexString(chash)+" "+h2o2+"=0x"+Integer.toHexString(h2o2._heartbeat._cloud_hash)+" ",PROPOSED);
      // Hashes are same, so accept the new larger cloud-size
      H2O.CLOUD.set_next_Cloud(h2os,chash);
  
      // Demand everybody has rolled forward to same size before consensus
      boolean same_size=true;
      for( H2ONode h2o2 : h2os )
        same_size &= (h2o2._heartbeat._cloud_size == H2O.CLOUD.size());
      if( !same_size ) return 0;
  
      H2O.SELF._heartbeat._common_knowledge = true;
      for( H2ONode h2o2 : h2os )
        if( !h2o2._heartbeat._common_knowledge ) {
          return print("Missing common knowledge from all nodes!" ,PROPOSED);
        }
      _commonKnowledge = true;    // Yup!  Have global consensus
  
      Paxos.class.notifyAll(); // Also, wake up a worker thread stuck in DKV.put
      Paxos.print("Announcing new Cloud Membership: ", H2O.CLOUD._memary);
      Log.info("Cloud of size ", H2O.CLOUD.size(), " formed ", H2O.CLOUD.toPrettyString());
      H2O.notifyAboutCloudSize(H2O.SELF_ADDRESS, H2O.API_PORT, H2O.CLOUD.size());
      return 0;
    }