docs: private Future<?> validateBuildString(final String buildString, ZooKeeper zk) {
          final SettableFuture<Object> retval = SettableFuture.create();
          byte buildStringBytes[] = null;
          try {
              buildStringBytes = buildString.getBytes("UTF-8");
          } catch (UnsupportedEncodingException e) {
              throw new AssertionError(e);
          }
          final byte buildStringBytesFinal[] = buildStringBytes;
  
          //Can use a void callback because ZK will execute the create and then the get in order
          //It's a race so it doesn't have to succeed
          zk.create(
                  VoltZK.buildstring,
                  buildStringBytes,
                  Ids.OPEN_ACL_UNSAFE,
                  CreateMode.PERSISTENT,
                  new ZKUtil.StringCallback(),
                  null);
  
          zk.getData(VoltZK.buildstring, false, new org.apache.zookeeper_voltpatches.AsyncCallback.DataCallback() {
  
              @Override
              public void processResult(int rc, String path, Object ctx,
                      byte[] data, Stat stat) {
                  KeeperException.Code code = KeeperException.Code.get(rc);
                  if (code == KeeperException.Code.OK) {
                      if (Arrays.equals(buildStringBytesFinal, data)) {
                          retval.set(null);
                      } else {
                          try {
                              hostLog.info("Different but compatible software versions on the cluster " +
                                           "and the rejoining node. Cluster version is {" + (new String(data, "UTF-8")).split("_")[0] +
                                           "}. Rejoining node version is {" + m_defaultVersionString + "}.");
                              retval.set(null);
                          } catch (UnsupportedEncodingException e) {
                              retval.setException(new AssertionError(e));
                          }
                      }
                  } else {
                      retval.setException(KeeperException.create(code));
                  }
              }
  
          }, null);
  
          return retval;
      }