@Override
  public void nodeDeleted(String path) {
    if (!path.startsWith(archiveHFileZNode)) {
      return;
    }

    LOG.debug("Archive node: " + path + " deleted");
    String table = path.substring(archiveHFileZNode.length());
    // if we stop archiving all tables
    if (table.length() == 0) {
      // make sure we have the tracker before deleting the archive
      // but if we don't, we don't care about delete
      clearTables();
      // watches are one-time events, so we need to renew our subscription to
      // the archive node and might as well check to make sure archiving
      // didn't come back on at the same time
      checkEnabledAndUpdate();
      return;
    }
    // just stop archiving one table
    // note that we don't attempt to add another watch for that table into zk.
    // We have no assurances that the table will be archived again (or even
    // exists for that matter), so its better not to add unnecessary load to
    // zk for watches. If the table is created again, then we will get the
    // notification in childrenChanaged.
    getMonitor().removeTable(ZKUtil.getNodeName(path));
  }
Stop tracking a table. Ensures that the table doesn't exist, but if it does, it attempts to add
the table back via {@link #addAndReWatchTable(String)} - its a 'safe' removal.
@param tableZnode full zookeeper path to the table to be added
@throws KeeperException if an unexpected zk exception occurs
hbase-server/src/main/java/org/apache/hadoop/hbase/backup/example/TableHFileArchiveTracker.java