This is an automated email from the ASF dual-hosted git repository.

dlmarion pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/2.1 by this push:
     new b935a7b43e Reuse ServiceLock instances (#4838)
b935a7b43e is described below

commit b935a7b43e7db036dca61f199525e01217481502
Author: Dave Marion <dlmar...@apache.org>
AuthorDate: Tue Aug 27 07:59:10 2024 -0400

    Reuse ServiceLock instances (#4838)
    
    The ServiceLock calls ZooKeeper.exists(path, this) in the constructor,
    where "this" is a Watcher. Looking at the places where ServiceLock is
    constructed I found several places where this was being done inside of
    a loop which may end up creating multiple watchers in the ZooKeeper
    client instance. This change moves the ServiceLock construction outside
    of the loop.
---
 .../java/org/apache/accumulo/coordinator/CompactionCoordinator.java   | 4 ++--
 .../src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java  | 4 ++--
 server/manager/src/main/java/org/apache/accumulo/manager/Manager.java | 2 +-
 server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java | 3 ++-
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java
 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java
index 5852587338..37039adf68 100644
--- 
a/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java
+++ 
b/server/compaction-coordinator/src/main/java/org/apache/accumulo/coordinator/CompactionCoordinator.java
@@ -216,11 +216,11 @@ public class CompactionCoordinator extends AbstractServer
     final String lockPath = getContext().getZooKeeperRoot() + 
Constants.ZCOORDINATOR_LOCK;
     final UUID zooLockUUID = UUID.randomUUID();
 
+    coordinatorLock = new 
ServiceLock(getContext().getZooReaderWriter().getZooKeeper(),
+        ServiceLock.path(lockPath), zooLockUUID);
     while (true) {
 
       CoordinatorLockWatcher coordinatorLockWatcher = new 
CoordinatorLockWatcher();
-      coordinatorLock = new 
ServiceLock(getContext().getZooReaderWriter().getZooKeeper(),
-          ServiceLock.path(lockPath), zooLockUUID);
       coordinatorLock.lock(coordinatorLockWatcher, 
coordinatorClientAddress.getBytes(UTF_8));
 
       coordinatorLockWatcher.waitForChange();
diff --git 
a/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java 
b/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
index ee2f31d1f1..153cf698a2 100644
--- a/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
+++ b/server/gc/src/main/java/org/apache/accumulo/gc/SimpleGarbageCollector.java
@@ -379,9 +379,9 @@ public class SimpleGarbageCollector extends AbstractServer 
implements Iface {
     };
 
     UUID zooLockUUID = UUID.randomUUID();
+    ServiceLock lock =
+        new ServiceLock(getContext().getZooReaderWriter().getZooKeeper(), 
path, zooLockUUID);
     while (true) {
-      ServiceLock lock =
-          new ServiceLock(getContext().getZooReaderWriter().getZooKeeper(), 
path, zooLockUUID);
       if (lock.tryLock(lockWatcher,
           new ServerServices(addr.toString(), 
Service.GC_CLIENT).toString().getBytes(UTF_8))) {
         log.debug("Got GC ZooKeeper lock");
diff --git 
a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java 
b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
index a554b2d818..77c9da57ae 100644
--- a/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
+++ b/server/manager/src/main/java/org/apache/accumulo/manager/Manager.java
@@ -1677,10 +1677,10 @@ public class Manager extends AbstractServer
         getHostname() + ":" + 
getConfiguration().getPort(Property.MANAGER_CLIENTPORT)[0];
 
     UUID zooLockUUID = UUID.randomUUID();
+    managerLock = new ServiceLock(zooKeeper, zManagerLoc, zooLockUUID);
     while (true) {
 
       ManagerLockWatcher managerLockWatcher = new ManagerLockWatcher();
-      managerLock = new ServiceLock(zooKeeper, zManagerLoc, zooLockUUID);
       managerLock.lock(managerLockWatcher, 
managerClientAddress.getBytes(UTF_8));
 
       managerLockWatcher.waitForChange();
diff --git 
a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java 
b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
index 39fe11d91b..bc57f62ff7 100644
--- a/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
+++ b/server/monitor/src/main/java/org/apache/accumulo/monitor/Monitor.java
@@ -829,9 +829,10 @@ public class Monitor extends AbstractServer implements 
HighlyAvailableService {
 
     // Get a ZooLock for the monitor
     UUID zooLockUUID = UUID.randomUUID();
+    monitorLock = new ServiceLock(zoo.getZooKeeper(), monitorLockPath, 
zooLockUUID);
+
     while (true) {
       MoniterLockWatcher monitorLockWatcher = new MoniterLockWatcher();
-      monitorLock = new ServiceLock(zoo.getZooKeeper(), monitorLockPath, 
zooLockUUID);
       monitorLock.lock(monitorLockWatcher, new byte[0]);
 
       monitorLockWatcher.waitForChange();

Reply via email to