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));
       }
 

Reply via email to