@Override
  public void sendGlobalBarrierReached(Procedure proc, List<String> nodeNames) throws IOException {
    String procName = proc.getName();
    String reachedNode = zkProc.getReachedBarrierNode(procName);
    LOG.debug("Creating reached barrier zk node:" + reachedNode);
    try {
      // create the reached znode and watch for the reached znodes
      ZKUtil.createWithParents(zkProc.getWatcher(), reachedNode);
      // loop through all the children of the acquire phase and watch for them
      for (String node : nodeNames) {
        String znode = ZNodePaths.joinZNode(reachedNode, node);
        if (ZKUtil.watchAndCheckExists(zkProc.getWatcher(), znode)) {
          byte[] dataFromMember = ZKUtil.getData(zkProc.getWatcher(), znode);
          // ProtobufUtil.isPBMagicPrefix will check null
          if (dataFromMember != null && dataFromMember.length > 0) {
            if (!ProtobufUtil.isPBMagicPrefix(dataFromMember)) {
              String msg =
                "Failed to get data from finished node or data is illegally formatted: " + znode;
              LOG.error(msg);
              throw new IOException(msg);
            } else {
              dataFromMember = Arrays.copyOfRange(dataFromMember, ProtobufUtil.lengthOfPBMagic(),
                dataFromMember.length);
              coordinator.memberFinishedBarrier(procName, node, dataFromMember);
            }
          } else {
            coordinator.memberFinishedBarrier(procName, node, dataFromMember);
          }
        }
      }
    } catch (KeeperException e) {
      String msg = "Failed while creating reached node:" + reachedNode;
      LOG.error(msg, e);
      throw new IOException(msg, e);
    } catch (InterruptedException e) {
      String msg = "Interrupted while creating reached node:" + reachedNode;
      LOG.error(msg, e);
      throw new InterruptedIOException(msg);
    }
  }
The "acquire" phase. The coordinator creates a new procType/acquired/ znode dir. If znodes
appear, first acquire to relevant listener or sets watch waiting for notification of the
acquire node
@param proc      the Procedure
@param info      data to be stored in the acquire node
@param nodeNames children of the acquire phase
@throws IOException if any failure occurs.
hbase-server/src/main/java/org/apache/hadoop/hbase/procedure/ZKProcedureCoordinator.java