public void cloneTable(Table.ID srcTableId, Table.ID tableId, String tableName, Namespace.ID namespaceId, Map<String,String> propertiesToSet, Set<String> propertiesToExclude, NodeExistsPolicy existsPolicy) throws KeeperException, InterruptedException { prepareNewTableState(zoo, instanceID, tableId, namespaceId, tableName, TableState.NEW, existsPolicy); String srcTablePath = Constants.ZROOT + "/" + instanceID + Constants.ZTABLES + "/" + srcTableId + Constants.ZTABLE_CONF; String newTablePath = Constants.ZROOT + "/" + instanceID + Constants.ZTABLES + "/" + tableId + Constants.ZTABLE_CONF; zoo.recursiveCopyPersistent(srcTablePath, newTablePath, NodeExistsPolicy.OVERWRITE); for (Entry<String,String> entry : propertiesToSet.entrySet()) TablePropUtil.setTableProperty(context, tableId, entry.getKey(), entry.getValue()); for (String prop : propertiesToExclude) zoo.recursiveDelete(Constants.ZROOT + "/" + instanceID + Constants.ZTABLES + "/" + tableId + Constants.ZTABLE_CONF + "/" + prop, NodeMissingPolicy.SKIP); updateTableStateCache(tableId); }