This is an automated email from the ASF dual-hosted git repository. cshannon pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/main by this push: new 3b1566fd99 Replace boolean with enum for table locks in 3.1 (#4297) 3b1566fd99 is described below commit 3b1566fd992de76eb9251a37ceb5a5b18bb4a468 Author: Christopher L. Shannon <cshan...@apache.org> AuthorDate: Mon Feb 26 13:20:22 2024 -0500 Replace boolean with enum for table locks in 3.1 (#4297) Instead of using a boolean value for obtaining table locks, use an enum which makes the code more readable and makes it easier to search and catch errors with the lock type. This closes #4276 --- .../fate/zookeeper/DistributedReadWriteLock.java | 2 +- .../manager/tableOps/ChangeTableState.java | 13 +++--- .../apache/accumulo/manager/tableOps/Utils.java | 49 +++++++++++----------- .../manager/tableOps/clone/CloneTable.java | 11 ++--- .../manager/tableOps/clone/CloneZookeeper.java | 11 ++--- .../manager/tableOps/clone/FinishCloneTable.java | 9 ++-- .../manager/tableOps/compact/CompactRange.java | 10 +++-- .../tableOps/compact/cancel/CancelCompactions.java | 10 +++-- .../compact/cancel/FinishCancelCompaction.java | 5 ++- .../manager/tableOps/create/CreateTable.java | 5 ++- .../manager/tableOps/create/FinishCreateTable.java | 5 ++- .../manager/tableOps/create/PopulateZookeeper.java | 5 ++- .../accumulo/manager/tableOps/delete/CleanUp.java | 5 ++- .../manager/tableOps/delete/DeleteTable.java | 10 +++-- .../manager/tableOps/delete/PreDeleteTable.java | 13 +++--- .../manager/tableOps/merge/TableRangeOp.java | 9 ++-- .../manager/tableOps/merge/TableRangeOpWait.java | 5 ++- .../namespace/create/FinishCreateNamespace.java | 3 +- .../create/PopulateZookeeperWithNamespace.java | 5 ++- .../tableOps/namespace/delete/DeleteNamespace.java | 6 ++- .../namespace/delete/NamespaceCleanUp.java | 3 +- .../tableOps/namespace/rename/RenameNamespace.java | 8 ++-- .../manager/tableOps/rename/RenameTable.java | 13 +++--- .../tableOps/tableExport/WriteExportFiles.java | 14 ++++--- .../tableOps/tableImport/FinishImportTable.java | 5 ++- .../tableImport/ImportPopulateZookeeper.java | 5 ++- .../manager/tableOps/tableImport/ImportTable.java | 5 ++- .../accumulo/test/fate/zookeeper/FateIT.java | 14 ++++--- 28 files changed, 146 insertions(+), 112 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/DistributedReadWriteLock.java b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/DistributedReadWriteLock.java index 84b3c1148c..0bf4af19c7 100644 --- a/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/DistributedReadWriteLock.java +++ b/core/src/main/java/org/apache/accumulo/core/fate/zookeeper/DistributedReadWriteLock.java @@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory; */ public class DistributedReadWriteLock implements java.util.concurrent.locks.ReadWriteLock { - public static enum LockType { + public enum LockType { READ, WRITE, } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/ChangeTableState.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/ChangeTableState.java index 146ea96c84..496565c0cc 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/ChangeTableState.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/ChangeTableState.java @@ -24,6 +24,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.manager.Manager; import org.slf4j.LoggerFactory; @@ -52,8 +53,8 @@ public class ChangeTableState extends ManagerRepo { public long isReady(long tid, Manager env) throws Exception { // reserve the table so that this op does not run concurrently with create, clone, or delete // table - return Utils.reserveNamespace(env, namespaceId, tid, false, true, top) - + Utils.reserveTable(env, tableId, tid, true, true, top); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, top) + + Utils.reserveTable(env, tableId, tid, LockType.WRITE, true, top); } @Override @@ -64,8 +65,8 @@ public class ChangeTableState extends ManagerRepo { } env.getTableManager().transitionTableState(tableId, ts, expectedCurrStates); - Utils.unreserveNamespace(env, namespaceId, tid, false); - Utils.unreserveTable(env, tableId, tid, true); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); + Utils.unreserveTable(env, tableId, tid, LockType.WRITE); LoggerFactory.getLogger(ChangeTableState.class).debug("Changed table state {} {}", tableId, ts); env.getEventCoordinator().event("Set table state of %s to %s", tableId, ts); return null; @@ -73,7 +74,7 @@ public class ChangeTableState extends ManagerRepo { @Override public void undo(long tid, Manager env) { - Utils.unreserveNamespace(env, namespaceId, tid, false); - Utils.unreserveTable(env, tableId, tid, true); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); + Utils.unreserveTable(env, tableId, tid, LockType.WRITE); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/Utils.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/Utils.java index b4d92b3a9d..a92b3b513a 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/Utils.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/Utils.java @@ -90,9 +90,9 @@ public class Utils { static final Lock tableNameLock = new ReentrantLock(); static final Lock idLock = new ReentrantLock(); - public static long reserveTable(Manager env, TableId tableId, long tid, boolean writeLock, + public static long reserveTable(Manager env, TableId tableId, long tid, LockType lockType, boolean tableMustExist, TableOperation op) throws Exception { - if (getLock(env.getContext(), tableId, tid, writeLock).tryLock()) { + if (getLock(env.getContext(), tableId, tid, lockType).tryLock()) { if (tableMustExist) { ZooReaderWriter zk = env.getContext().getZooReaderWriter(); if (!zk.exists(env.getContext().getZooKeeperRoot() + Constants.ZTABLES + "/" + tableId)) { @@ -101,29 +101,27 @@ public class Utils { } } log.info("table {} {} locked for {} operation: {}", tableId, FateTxId.formatTid(tid), - (writeLock ? "write" : "read"), op); + lockType, op); return 0; } else { return 100; } } - public static void unreserveTable(Manager env, TableId tableId, long tid, boolean writeLock) { - getLock(env.getContext(), tableId, tid, writeLock).unlock(); - log.info("table {} {} unlocked for {}", tableId, FateTxId.formatTid(tid), - (writeLock ? "write" : "read")); + public static void unreserveTable(Manager env, TableId tableId, long tid, LockType lockType) { + getLock(env.getContext(), tableId, tid, lockType).unlock(); + log.info("table {} {} unlocked for {}", tableId, FateTxId.formatTid(tid), lockType); } public static void unreserveNamespace(Manager env, NamespaceId namespaceId, long id, - boolean writeLock) { - getLock(env.getContext(), namespaceId, id, writeLock).unlock(); - log.info("namespace {} {} unlocked for {}", namespaceId, FateTxId.formatTid(id), - (writeLock ? "write" : "read")); + LockType lockType) { + getLock(env.getContext(), namespaceId, id, lockType).unlock(); + log.info("namespace {} {} unlocked for {}", namespaceId, FateTxId.formatTid(id), lockType); } public static long reserveNamespace(Manager env, NamespaceId namespaceId, long id, - boolean writeLock, boolean mustExist, TableOperation op) throws Exception { - if (getLock(env.getContext(), namespaceId, id, writeLock).tryLock()) { + LockType lockType, boolean mustExist, TableOperation op) throws Exception { + if (getLock(env.getContext(), namespaceId, id, lockType).tryLock()) { if (mustExist) { ZooReaderWriter zk = env.getContext().getZooReaderWriter(); if (!zk.exists( @@ -133,7 +131,7 @@ public class Utils { } } log.info("namespace {} {} locked for {} operation: {}", namespaceId, FateTxId.formatTid(id), - (writeLock ? "write" : "read"), op); + lockType, op); return 0; } else { return 100; @@ -163,27 +161,30 @@ public class Utils { } private static Lock getLock(ServerContext context, AbstractId<?> id, long tid, - boolean writeLock) { + LockType lockType) { byte[] lockData = FastFormat.toZeroPaddedHex(tid); var fLockPath = FateLock.path(context.getZooKeeperRoot() + Constants.ZTABLE_LOCKS + "/" + id.canonical()); FateLock qlock = new FateLock(context.getZooReaderWriter(), fLockPath); DistributedLock lock = DistributedReadWriteLock.recoverLock(qlock, lockData); if (lock != null) { - // Validate the recovered lock type - boolean isWriteLock = lock.getType() == LockType.WRITE; - if (writeLock != isWriteLock) { + if (lock.getType() != lockType) { throw new IllegalStateException("Unexpected lock type " + lock.getType() + " recovered for transaction " + FateTxId.formatTid(tid) + " on object " + id - + ". Expected " + (writeLock ? LockType.WRITE : LockType.READ) + " lock instead."); + + ". Expected " + lockType + " lock instead."); } } else { DistributedReadWriteLock locker = new DistributedReadWriteLock(qlock, lockData); - if (writeLock) { - lock = locker.writeLock(); - } else { - lock = locker.readLock(); + switch (lockType) { + case WRITE: + lock = locker.writeLock(); + break; + case READ: + lock = locker.readLock(); + break; + default: + throw new IllegalStateException("Unexpected LockType: " + lockType); } } return lock; @@ -198,7 +199,7 @@ public class Utils { } public static Lock getReadLock(Manager env, AbstractId<?> id, long tid) { - return Utils.getLock(env.getContext(), id, tid, false); + return Utils.getLock(env.getContext(), id, tid, LockType.READ); } public static void checkNamespaceDoesNotExist(ServerContext context, String namespace, diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneTable.java index 352f3d1b89..0eb2368680 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneTable.java @@ -25,6 +25,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -48,9 +49,9 @@ public class CloneTable extends ManagerRepo { @Override public long isReady(long tid, Manager environment) throws Exception { - long val = Utils.reserveNamespace(environment, cloneInfo.srcNamespaceId, tid, false, true, - TableOperation.CLONE); - val += Utils.reserveTable(environment, cloneInfo.srcTableId, tid, false, true, + long val = Utils.reserveNamespace(environment, cloneInfo.srcNamespaceId, tid, LockType.READ, + true, TableOperation.CLONE); + val += Utils.reserveTable(environment, cloneInfo.srcTableId, tid, LockType.READ, true, TableOperation.CLONE); return val; } @@ -71,8 +72,8 @@ public class CloneTable extends ManagerRepo { @Override public void undo(long tid, Manager environment) { - Utils.unreserveNamespace(environment, cloneInfo.srcNamespaceId, tid, false); - Utils.unreserveTable(environment, cloneInfo.srcTableId, tid, false); + Utils.unreserveNamespace(environment, cloneInfo.srcNamespaceId, tid, LockType.READ); + Utils.unreserveTable(environment, cloneInfo.srcTableId, tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneZookeeper.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneZookeeper.java index cfc10d015c..7cfdf31211 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneZookeeper.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/CloneZookeeper.java @@ -23,6 +23,7 @@ import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.clientImpl.Namespaces; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.util.tables.TableNameUtil; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -45,11 +46,11 @@ class CloneZookeeper extends ManagerRepo { public long isReady(long tid, Manager environment) throws Exception { long val = 0; if (!cloneInfo.srcNamespaceId.equals(cloneInfo.namespaceId)) { - val += Utils.reserveNamespace(environment, cloneInfo.namespaceId, tid, false, true, + val += Utils.reserveNamespace(environment, cloneInfo.namespaceId, tid, LockType.READ, true, TableOperation.CLONE); } - val += - Utils.reserveTable(environment, cloneInfo.tableId, tid, true, false, TableOperation.CLONE); + val += Utils.reserveTable(environment, cloneInfo.tableId, tid, LockType.WRITE, false, + TableOperation.CLONE); return val; } @@ -77,9 +78,9 @@ class CloneZookeeper extends ManagerRepo { public void undo(long tid, Manager environment) throws Exception { environment.getTableManager().removeTable(cloneInfo.tableId); if (!cloneInfo.srcNamespaceId.equals(cloneInfo.namespaceId)) { - Utils.unreserveNamespace(environment, cloneInfo.namespaceId, tid, false); + Utils.unreserveNamespace(environment, cloneInfo.namespaceId, tid, LockType.READ); } - Utils.unreserveTable(environment, cloneInfo.tableId, tid, true); + Utils.unreserveTable(environment, cloneInfo.tableId, tid, LockType.WRITE); environment.getContext().clearTableListCache(); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/FinishCloneTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/FinishCloneTable.java index 9c2b46f2a2..f424e56dae 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/FinishCloneTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/clone/FinishCloneTable.java @@ -21,6 +21,7 @@ package org.apache.accumulo.manager.tableOps.clone; import java.util.EnumSet; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -58,12 +59,12 @@ class FinishCloneTable extends ManagerRepo { expectedCurrStates); } - Utils.unreserveNamespace(environment, cloneInfo.srcNamespaceId, tid, false); + Utils.unreserveNamespace(environment, cloneInfo.srcNamespaceId, tid, LockType.READ); if (!cloneInfo.srcNamespaceId.equals(cloneInfo.namespaceId)) { - Utils.unreserveNamespace(environment, cloneInfo.namespaceId, tid, false); + Utils.unreserveNamespace(environment, cloneInfo.namespaceId, tid, LockType.READ); } - Utils.unreserveTable(environment, cloneInfo.srcTableId, tid, false); - Utils.unreserveTable(environment, cloneInfo.tableId, tid, true); + Utils.unreserveTable(environment, cloneInfo.srcTableId, tid, LockType.READ); + Utils.unreserveTable(environment, cloneInfo.tableId, tid, LockType.WRITE); environment.getEventCoordinator().event("Cloned table %s from %s", cloneInfo.tableName, cloneInfo.srcTableId); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java index be7244bf93..d172a624fe 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/CompactRange.java @@ -33,6 +33,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.core.util.FastFormat; import org.apache.accumulo.core.util.TextUtil; @@ -89,8 +90,9 @@ public class CompactRange extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, true, TableOperation.COMPACT) - + Utils.reserveTable(env, tableId, tid, false, true, TableOperation.COMPACT); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, + TableOperation.COMPACT) + + Utils.reserveTable(env, tableId, tid, LockType.READ, true, TableOperation.COMPACT); } @Override @@ -179,8 +181,8 @@ public class CompactRange extends ManagerRepo { try { removeIterators(env, tid, tableId); } finally { - Utils.unreserveNamespace(env, namespaceId, tid, false); - Utils.unreserveTable(env, tableId, tid, false); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); + Utils.unreserveTable(env, tableId, tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java index 7d25f2d7ac..47d53412f0 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/CancelCompactions.java @@ -26,6 +26,7 @@ import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.FateTxId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -48,8 +49,9 @@ public class CancelCompactions extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, true, TableOperation.COMPACT_CANCEL) - + Utils.reserveTable(env, tableId, tid, false, true, TableOperation.COMPACT_CANCEL); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, + TableOperation.COMPACT_CANCEL) + + Utils.reserveTable(env, tableId, tid, LockType.READ, true, TableOperation.COMPACT_CANCEL); } @Override @@ -60,8 +62,8 @@ public class CancelCompactions extends ManagerRepo { @Override public void undo(long tid, Manager env) { - Utils.unreserveTable(env, tableId, tid, false); - Utils.unreserveNamespace(env, namespaceId, tid, false); + Utils.unreserveTable(env, tableId, tid, LockType.READ); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); } public static void mutateZooKeeper(long tid, TableId tableId, Manager environment) diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/FinishCancelCompaction.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/FinishCancelCompaction.java index 70fa526221..36a7e2637b 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/FinishCancelCompaction.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/compact/cancel/FinishCancelCompaction.java @@ -21,6 +21,7 @@ package org.apache.accumulo.manager.tableOps.compact.cancel; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -37,8 +38,8 @@ class FinishCancelCompaction extends ManagerRepo { @Override public Repo<Manager> call(long tid, Manager environment) { - Utils.unreserveTable(environment, tableId, tid, false); - Utils.unreserveNamespace(environment, namespaceId, tid, false); + Utils.unreserveTable(environment, tableId, tid, LockType.READ); + Utils.unreserveNamespace(environment, namespaceId, tid, LockType.READ); return null; } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java index f1f71a8642..9d0d653a0c 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/CreateTable.java @@ -27,6 +27,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.TableInfo; @@ -60,7 +61,7 @@ public class CreateTable extends ManagerRepo { @Override public long isReady(long tid, Manager environment) throws Exception { // reserve the table's namespace to make sure it doesn't change while the table is created - return Utils.reserveNamespace(environment, tableInfo.getNamespaceId(), tid, false, true, + return Utils.reserveNamespace(environment, tableInfo.getNamespaceId(), tid, LockType.READ, true, TableOperation.CREATE); } @@ -95,7 +96,7 @@ public class CreateTable extends ManagerRepo { } catch (IOException e) { log.error("Table failed to be created and failed to clean up split files at {}", p, e); } finally { - Utils.unreserveNamespace(env, tableInfo.getNamespaceId(), tid, false); + Utils.unreserveNamespace(env, tableInfo.getNamespaceId(), tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/FinishCreateTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/FinishCreateTable.java index 519ef36141..51dcdceb03 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/FinishCreateTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/FinishCreateTable.java @@ -23,6 +23,7 @@ import java.util.EnumSet; import org.apache.accumulo.core.client.admin.InitialTableState; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -61,8 +62,8 @@ class FinishCreateTable extends ManagerRepo { TableState.ONLINE, expectedCurrStates); } - Utils.unreserveNamespace(env, tableInfo.getNamespaceId(), tid, false); - Utils.unreserveTable(env, tableInfo.getTableId(), tid, true); + Utils.unreserveNamespace(env, tableInfo.getNamespaceId(), tid, LockType.READ); + Utils.unreserveTable(env, tableInfo.getTableId(), tid, LockType.WRITE); env.getEventCoordinator().event("Created table %s ", tableInfo.getTableName()); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/PopulateZookeeper.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/PopulateZookeeper.java index 40ad2d276d..1bb69637f4 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/PopulateZookeeper.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/create/PopulateZookeeper.java @@ -22,6 +22,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.clientImpl.thrift.ThriftTableOperationException; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.TableInfo; @@ -41,7 +42,7 @@ class PopulateZookeeper extends ManagerRepo { @Override public long isReady(long tid, Manager environment) throws Exception { - return Utils.reserveTable(environment, tableInfo.getTableId(), tid, true, false, + return Utils.reserveTable(environment, tableInfo.getTableId(), tid, LockType.WRITE, false, TableOperation.CREATE); } @@ -79,7 +80,7 @@ class PopulateZookeeper extends ManagerRepo { @Override public void undo(long tid, Manager manager) throws Exception { manager.getTableManager().removeTable(tableInfo.getTableId()); - Utils.unreserveTable(manager, tableInfo.getTableId(), tid, true); + Utils.unreserveTable(manager, tableInfo.getTableId(), tid, LockType.WRITE); manager.getContext().clearTableListCache(); } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java index 561f7d6e49..6b59a396dc 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/CleanUp.java @@ -35,6 +35,7 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.iterators.user.GrepIterator; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.TabletLocationState; @@ -206,8 +207,8 @@ class CleanUp extends ManagerRepo { log.error("{}", e.getMessage(), e); } - Utils.unreserveTable(manager, tableId, tid, true); - Utils.unreserveNamespace(manager, namespaceId, tid, false); + Utils.unreserveTable(manager, tableId, tid, LockType.WRITE); + Utils.unreserveNamespace(manager, namespaceId, tid, LockType.READ); LoggerFactory.getLogger(CleanUp.class).debug("Deleted table " + tableId); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/DeleteTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/DeleteTable.java index fcd0e7984e..ae325d4d97 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/DeleteTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/DeleteTable.java @@ -24,6 +24,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -43,8 +44,9 @@ public class DeleteTable extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, false, TableOperation.DELETE) - + Utils.reserveTable(env, tableId, tid, true, true, TableOperation.DELETE); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, false, + TableOperation.DELETE) + + Utils.reserveTable(env, tableId, tid, LockType.WRITE, true, TableOperation.DELETE); } @Override @@ -58,7 +60,7 @@ public class DeleteTable extends ManagerRepo { @Override public void undo(long tid, Manager env) { - Utils.unreserveTable(env, tableId, tid, true); - Utils.unreserveNamespace(env, namespaceId, tid, false); + Utils.unreserveTable(env, tableId, tid, LockType.WRITE); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java index 7ba0700aed..e00fe993f9 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/delete/PreDeleteTable.java @@ -24,6 +24,7 @@ import org.apache.accumulo.core.data.InstanceId; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeExistsPolicy; import org.apache.accumulo.manager.Manager; @@ -51,8 +52,8 @@ public class PreDeleteTable extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, true, TableOperation.DELETE) - + Utils.reserveTable(env, tableId, tid, false, true, TableOperation.DELETE); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, TableOperation.DELETE) + + Utils.reserveTable(env, tableId, tid, LockType.READ, true, TableOperation.DELETE); } private void preventFutureCompactions(Manager environment) @@ -69,15 +70,15 @@ public class PreDeleteTable extends ManagerRepo { CancelCompactions.mutateZooKeeper(tid, tableId, environment); return new DeleteTable(namespaceId, tableId); } finally { - Utils.unreserveTable(environment, tableId, tid, false); - Utils.unreserveNamespace(environment, namespaceId, tid, false); + Utils.unreserveTable(environment, tableId, tid, LockType.READ); + Utils.unreserveNamespace(environment, namespaceId, tid, LockType.READ); } } @Override public void undo(long tid, Manager env) { - Utils.unreserveTable(env, tableId, tid, false); - Utils.unreserveNamespace(env, namespaceId, tid, false); + Utils.unreserveTable(env, tableId, tid, LockType.READ); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOp.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOp.java index dcc906c8b2..26f7589145 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOp.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOp.java @@ -25,6 +25,7 @@ import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.util.TextUtil; import org.apache.accumulo.manager.Manager; @@ -50,8 +51,8 @@ public class TableRangeOp extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, true, TableOperation.MERGE) - + Utils.reserveTable(env, tableId, tid, true, true, TableOperation.MERGE); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, TableOperation.MERGE) + + Utils.reserveTable(env, tableId, tid, LockType.WRITE, true, TableOperation.MERGE); } public TableRangeOp(MergeInfo.Operation op, NamespaceId namespaceId, TableId tableId, @@ -102,8 +103,8 @@ public class TableRangeOp extends ManagerRepo { log.info("removing merge information {}", mergeInfo); } env.clearMergeState(tableId); - Utils.unreserveNamespace(env, namespaceId, tid, false); - Utils.unreserveTable(env, tableId, tid, true); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); + Utils.unreserveTable(env, tableId, tid, LockType.WRITE); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOpWait.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOpWait.java index 9b73d4c538..4597ba6639 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOpWait.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/merge/TableRangeOpWait.java @@ -21,6 +21,7 @@ package org.apache.accumulo.manager.tableOps.merge; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -71,8 +72,8 @@ class TableRangeOpWait extends ManagerRepo { MergeInfo mergeInfo = manager.getMergeInfo(tableId); log.info("removing merge information " + mergeInfo); manager.clearMergeState(tableId); - Utils.unreserveTable(manager, tableId, tid, true); - Utils.unreserveNamespace(manager, namespaceId, tid, false); + Utils.unreserveTable(manager, tableId, tid, LockType.WRITE); + Utils.unreserveNamespace(manager, namespaceId, tid, LockType.READ); return null; } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/FinishCreateNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/FinishCreateNamespace.java index bb462f94fe..0a5897d7cf 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/FinishCreateNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/FinishCreateNamespace.java @@ -19,6 +19,7 @@ package org.apache.accumulo.manager.tableOps.namespace.create; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -42,7 +43,7 @@ class FinishCreateNamespace extends ManagerRepo { @Override public Repo<Manager> call(long id, Manager env) { - Utils.unreserveNamespace(env, namespaceInfo.namespaceId, id, true); + Utils.unreserveNamespace(env, namespaceInfo.namespaceId, id, LockType.WRITE); env.getEventCoordinator().event("Created namespace %s ", namespaceInfo.namespaceName); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java index 1b054b228e..939b6f0916 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/create/PopulateZookeeperWithNamespace.java @@ -20,6 +20,7 @@ package org.apache.accumulo.manager.tableOps.namespace.create; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooUtil.NodeExistsPolicy; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -40,7 +41,7 @@ class PopulateZookeeperWithNamespace extends ManagerRepo { @Override public long isReady(long id, Manager environment) throws Exception { - return Utils.reserveNamespace(environment, namespaceInfo.namespaceId, id, true, false, + return Utils.reserveNamespace(environment, namespaceInfo.namespaceId, id, LockType.WRITE, false, TableOperation.CREATE); } @@ -71,7 +72,7 @@ class PopulateZookeeperWithNamespace extends ManagerRepo { public void undo(long tid, Manager manager) throws Exception { manager.getTableManager().removeNamespace(namespaceInfo.namespaceId); manager.getContext().clearTableListCache(); - Utils.unreserveNamespace(manager, namespaceInfo.namespaceId, tid, true); + Utils.unreserveNamespace(manager, namespaceInfo.namespaceId, tid, LockType.WRITE); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/DeleteNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/DeleteNamespace.java index 6dd61c52d3..e9a8b49cee 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/DeleteNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/DeleteNamespace.java @@ -21,6 +21,7 @@ package org.apache.accumulo.manager.tableOps.namespace.delete; import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -37,7 +38,8 @@ public class DeleteNamespace extends ManagerRepo { @Override public long isReady(long id, Manager environment) throws Exception { - return Utils.reserveNamespace(environment, namespaceId, id, true, true, TableOperation.DELETE); + return Utils.reserveNamespace(environment, namespaceId, id, LockType.WRITE, true, + TableOperation.DELETE); } @Override @@ -48,7 +50,7 @@ public class DeleteNamespace extends ManagerRepo { @Override public void undo(long id, Manager environment) { - Utils.unreserveNamespace(environment, namespaceId, id, true); + Utils.unreserveNamespace(environment, namespaceId, id, LockType.WRITE); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/NamespaceCleanUp.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/NamespaceCleanUp.java index 27fc850d0f..db4c9a5a38 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/NamespaceCleanUp.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/delete/NamespaceCleanUp.java @@ -21,6 +21,7 @@ package org.apache.accumulo.manager.tableOps.namespace.delete; import org.apache.accumulo.core.clientImpl.thrift.ThriftSecurityException; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -63,7 +64,7 @@ class NamespaceCleanUp extends ManagerRepo { log.error("{}", e.getMessage(), e); } - Utils.unreserveNamespace(manager, namespaceId, id, true); + Utils.unreserveNamespace(manager, namespaceId, id, LockType.WRITE); log.debug("Deleted namespace " + namespaceId); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java index 4eabcde2a3..a217f0cbba 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/namespace/rename/RenameNamespace.java @@ -26,6 +26,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -41,7 +42,8 @@ public class RenameNamespace extends ManagerRepo { @Override public long isReady(long id, Manager environment) throws Exception { - return Utils.reserveNamespace(environment, namespaceId, id, true, true, TableOperation.RENAME); + return Utils.reserveNamespace(environment, namespaceId, id, LockType.WRITE, true, + TableOperation.RENAME); } public RenameNamespace(NamespaceId namespaceId, String oldName, String newName) { @@ -77,7 +79,7 @@ public class RenameNamespace extends ManagerRepo { manager.getContext().clearTableListCache(); } finally { Utils.getTableNameLock().unlock(); - Utils.unreserveNamespace(manager, namespaceId, id, true); + Utils.unreserveNamespace(manager, namespaceId, id, LockType.WRITE); } LoggerFactory.getLogger(RenameNamespace.class).debug("Renamed namespace {} {} {}", namespaceId, @@ -88,7 +90,7 @@ public class RenameNamespace extends ManagerRepo { @Override public void undo(long tid, Manager env) { - Utils.unreserveNamespace(env, namespaceId, tid, true); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.WRITE); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java index a91b0ca8a8..ac6f53ad16 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/rename/RenameTable.java @@ -29,6 +29,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.core.util.Pair; import org.apache.accumulo.core.util.tables.TableNameUtil; @@ -47,8 +48,8 @@ public class RenameTable extends ManagerRepo { @Override public long isReady(long tid, Manager env) throws Exception { - return Utils.reserveNamespace(env, namespaceId, tid, false, true, TableOperation.RENAME) - + Utils.reserveTable(env, tableId, tid, true, true, TableOperation.RENAME); + return Utils.reserveNamespace(env, namespaceId, tid, LockType.READ, true, TableOperation.RENAME) + + Utils.reserveTable(env, tableId, tid, LockType.WRITE, true, TableOperation.RENAME); } public RenameTable(NamespaceId namespaceId, TableId tableId, String oldTableName, @@ -100,8 +101,8 @@ public class RenameTable extends ManagerRepo { manager.getContext().clearTableListCache(); } finally { Utils.getTableNameLock().unlock(); - Utils.unreserveTable(manager, tableId, tid, true); - Utils.unreserveNamespace(manager, namespaceId, tid, false); + Utils.unreserveTable(manager, tableId, tid, LockType.WRITE); + Utils.unreserveNamespace(manager, namespaceId, tid, LockType.READ); } LoggerFactory.getLogger(RenameTable.class).debug("Renamed table {} {} {}", tableId, @@ -112,8 +113,8 @@ public class RenameTable extends ManagerRepo { @Override public void undo(long tid, Manager env) { - Utils.unreserveTable(env, tableId, tid, true); - Utils.unreserveNamespace(env, namespaceId, tid, false); + Utils.unreserveTable(env, tableId, tid, LockType.WRITE); + Utils.unreserveNamespace(env, namespaceId, tid, LockType.READ); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableExport/WriteExportFiles.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableExport/WriteExportFiles.java index 034f4d61a5..aaaf1fdc66 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableExport/WriteExportFiles.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableExport/WriteExportFiles.java @@ -48,6 +48,7 @@ import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.dataImpl.KeyExtent; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.StoredTabletFile; @@ -92,9 +93,10 @@ class WriteExportFiles extends ManagerRepo { @Override public long isReady(long tid, Manager manager) throws Exception { - long reserved = Utils.reserveNamespace(manager, tableInfo.namespaceID, tid, false, true, + long reserved = Utils.reserveNamespace(manager, tableInfo.namespaceID, tid, LockType.READ, true, TableOperation.EXPORT) - + Utils.reserveTable(manager, tableInfo.tableID, tid, false, true, TableOperation.EXPORT); + + Utils.reserveTable(manager, tableInfo.tableID, tid, LockType.READ, true, + TableOperation.EXPORT); if (reserved > 0) { return reserved; } @@ -141,16 +143,16 @@ class WriteExportFiles extends ManagerRepo { tableInfo.tableName, TableOperation.EXPORT, TableOperationExceptionType.OTHER, "Failed to create export files " + ioe.getMessage()); } - Utils.unreserveNamespace(manager, tableInfo.namespaceID, tid, false); - Utils.unreserveTable(manager, tableInfo.tableID, tid, false); + Utils.unreserveNamespace(manager, tableInfo.namespaceID, tid, LockType.READ); + Utils.unreserveTable(manager, tableInfo.tableID, tid, LockType.READ); Utils.unreserveHdfsDirectory(manager, new Path(tableInfo.exportDir).toString(), tid); return null; } @Override public void undo(long tid, Manager env) { - Utils.unreserveNamespace(env, tableInfo.namespaceID, tid, false); - Utils.unreserveTable(env, tableInfo.tableID, tid, false); + Utils.unreserveNamespace(env, tableInfo.namespaceID, tid, LockType.READ); + Utils.unreserveTable(env, tableInfo.tableID, tid, LockType.READ); } public static void exportTable(VolumeManager fs, ServerContext context, String tableName, diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/FinishImportTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/FinishImportTable.java index 125e4639e8..24216366d0 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/FinishImportTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/FinishImportTable.java @@ -23,6 +23,7 @@ import static org.apache.accumulo.core.Constants.IMPORT_MAPPINGS_FILE; import java.util.EnumSet; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.manager.state.tables.TableState; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -58,8 +59,8 @@ class FinishImportTable extends ManagerRepo { final TableState newState = tableInfo.keepOffline ? TableState.OFFLINE : TableState.ONLINE; env.getTableManager().transitionTableState(tableInfo.tableId, newState, expectedCurrStates); - Utils.unreserveNamespace(env, tableInfo.namespaceId, tid, false); - Utils.unreserveTable(env, tableInfo.tableId, tid, true); + Utils.unreserveNamespace(env, tableInfo.namespaceId, tid, LockType.READ); + Utils.unreserveTable(env, tableInfo.tableId, tid, LockType.WRITE); for (ImportedTableInfo.DirectoryMapping dm : tableInfo.directories) { Utils.unreserveHdfsDirectory(env, new Path(dm.exportDir).toString(), tid); diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportPopulateZookeeper.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportPopulateZookeeper.java index eb57a80032..8710ec24e7 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportPopulateZookeeper.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportPopulateZookeeper.java @@ -28,6 +28,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperation; import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.util.tables.TableNameUtil; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -50,7 +51,7 @@ class ImportPopulateZookeeper extends ManagerRepo { @Override public long isReady(long tid, Manager environment) throws Exception { - return Utils.reserveTable(environment, tableInfo.tableId, tid, true, false, + return Utils.reserveTable(environment, tableInfo.tableId, tid, LockType.WRITE, false, TableOperation.IMPORT); } @@ -104,7 +105,7 @@ class ImportPopulateZookeeper extends ManagerRepo { @Override public void undo(long tid, Manager env) throws Exception { env.getTableManager().removeTable(tableInfo.tableId); - Utils.unreserveTable(env, tableInfo.tableId, tid, true); + Utils.unreserveTable(env, tableInfo.tableId, tid, LockType.WRITE); env.getContext().clearTableListCache(); } } diff --git a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportTable.java b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportTable.java index 58993783b7..7addca68d1 100644 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportTable.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/tableImport/ImportTable.java @@ -40,6 +40,7 @@ import org.apache.accumulo.core.clientImpl.thrift.TableOperationExceptionType; import org.apache.accumulo.core.data.NamespaceId; import org.apache.accumulo.core.data.TableId; import org.apache.accumulo.core.fate.Repo; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; import org.apache.accumulo.manager.tableOps.Utils; @@ -78,7 +79,7 @@ public class ImportTable extends ManagerRepo { for (ImportedTableInfo.DirectoryMapping dm : tableInfo.directories) { result += Utils.reserveHdfsDirectory(environment, new Path(dm.exportDir).toString(), tid); } - result += Utils.reserveNamespace(environment, tableInfo.namespaceId, tid, false, true, + result += Utils.reserveNamespace(environment, tableInfo.namespaceId, tid, LockType.READ, true, TableOperation.IMPORT); return result; } @@ -161,7 +162,7 @@ public class ImportTable extends ManagerRepo { Utils.unreserveHdfsDirectory(env, new Path(dm.exportDir).toString(), tid); } - Utils.unreserveNamespace(env, tableInfo.namespaceId, tid, false); + Utils.unreserveNamespace(env, tableInfo.namespaceId, tid, LockType.READ); } static List<ImportedTableInfo.DirectoryMapping> parseExportDir(Set<String> exportDirs) { diff --git a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java index a392313bd0..6c5ac60f9c 100644 --- a/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java +++ b/test/src/main/java/org/apache/accumulo/test/fate/zookeeper/FateIT.java @@ -53,6 +53,7 @@ import org.apache.accumulo.core.fate.FateTxId; import org.apache.accumulo.core.fate.ReadOnlyTStore.TStatus; import org.apache.accumulo.core.fate.Repo; import org.apache.accumulo.core.fate.ZooStore; +import org.apache.accumulo.core.fate.zookeeper.DistributedReadWriteLock.LockType; import org.apache.accumulo.core.fate.zookeeper.ZooReaderWriter; import org.apache.accumulo.manager.Manager; import org.apache.accumulo.manager.tableOps.ManagerRepo; @@ -90,14 +91,15 @@ public class FateIT { @Override public long isReady(long tid, Manager manager) throws Exception { - return Utils.reserveNamespace(manager, namespaceId, tid, false, true, TableOperation.RENAME) - + Utils.reserveTable(manager, tableId, tid, true, true, TableOperation.RENAME); + return Utils.reserveNamespace(manager, namespaceId, tid, LockType.READ, true, + TableOperation.RENAME) + + Utils.reserveTable(manager, tableId, tid, LockType.WRITE, true, TableOperation.RENAME); } @Override public void undo(long tid, Manager manager) throws Exception { - Utils.unreserveNamespace(manager, namespaceId, tid, false); - Utils.unreserveTable(manager, tableId, tid, true); + Utils.unreserveNamespace(manager, namespaceId, tid, LockType.READ); + Utils.unreserveTable(manager, tableId, tid, LockType.WRITE); } @Override @@ -107,8 +109,8 @@ public class FateIT { FateIT.inCall(); return null; } finally { - Utils.unreserveNamespace(manager, namespaceId, tid, false); - Utils.unreserveTable(manager, tableId, tid, true); + Utils.unreserveNamespace(manager, namespaceId, tid, LockType.READ); + Utils.unreserveTable(manager, tableId, tid, LockType.WRITE); LOG.debug("Leaving call {}", FateTxId.formatTid(tid)); }