/** {@inheritDoc} */ @Override public void deleteTable(String tableName) throws IOException { final State state = mState.get(); Preconditions.checkState(state == State.OPEN, "Cannot delete table in Fiji instance %s in state %s.", this, state); if (mSystemVersion.compareTo(Versions.SYSTEM_2_0) < 0) { deleteTableSystem_1_0(tableName); } else if (mSystemVersion.compareTo(Versions.SYSTEM_2_0) == 0) { deleteTableSystem_2_0(tableName); } else { throw new InternalFijiError(String.format("Unknown System version %s.", mSystemVersion)); } }
/** * Attempt to delete a table from this System_2_0 Fiji instance. * * @param tableName to delete * @throws IOException on unrecoverable error. */ private void deleteTableSystem_2_0(String tableName) throws IOException { final FijiURI tableURI = FijiURI.newBuilder(mURI).withTableName(tableName).build(); final String tableZKPath = ZooKeeperUtils.getTableDir(tableURI).getPath(); final UsersTracker usersTracker = ZooKeeperUtils.newTableUsersTracker(mZKClient, tableURI); try { usersTracker.start(); final Set<String> users = usersTracker.getUsers().keySet(); if (!users.isEmpty()) { LOG.warn( "Uninstalling Fiji table '{}' with registered users." + " Current registered users: {}. Stale table metadata will remain in" + " ZooKeeper at path {}.", tableName, users, tableZKPath); } } finally { usersTracker.close(); } // The delete of tables from HBase is the same as System_1_0 deleteTableSystem_1_0(tableName); // Delete ZNodes from ZooKeeper if table delete was successful ZooKeeperUtils.atomicRecursiveDelete(mZKClient, tableZKPath); } // CSON