Committed by
Pavlin Radoslavov
1. Lock.lockAsync does not throw DatabaseException.
2. Changed thread pool in LockManager to be non-static. Change-Id: Ie4e9acd497bacb9d6d812836a930ee79f92cf555
Showing
2 changed files
with
13 additions
and
7 deletions
| ... | @@ -58,7 +58,7 @@ public class LeadershipManager implements LeadershipService { | ... | @@ -58,7 +58,7 @@ public class LeadershipManager implements LeadershipService { |
| 58 | private static final int WAIT_BEFORE_RETRY_MS = 2000; | 58 | private static final int WAIT_BEFORE_RETRY_MS = 2000; |
| 59 | 59 | ||
| 60 | // TODO: Appropriate Thread pool sizing. | 60 | // TODO: Appropriate Thread pool sizing. |
| 61 | - private static final ScheduledExecutorService THREAD_POOL = | 61 | + private final ScheduledExecutorService threadPool = |
| 62 | Executors.newScheduledThreadPool(25, namedThreads("leadership-manager-%d")); | 62 | Executors.newScheduledThreadPool(25, namedThreads("leadership-manager-%d")); |
| 63 | 63 | ||
| 64 | private static final MessageSubject LEADERSHIP_UPDATES = | 64 | private static final MessageSubject LEADERSHIP_UPDATES = |
| ... | @@ -113,7 +113,7 @@ public class LeadershipManager implements LeadershipService { | ... | @@ -113,7 +113,7 @@ public class LeadershipManager implements LeadershipService { |
| 113 | 113 | ||
| 114 | clusterCommunicator.removeSubscriber(LEADERSHIP_UPDATES); | 114 | clusterCommunicator.removeSubscriber(LEADERSHIP_UPDATES); |
| 115 | 115 | ||
| 116 | - THREAD_POOL.shutdown(); | 116 | + threadPool.shutdown(); |
| 117 | 117 | ||
| 118 | log.info("Stopped."); | 118 | log.info("Stopped."); |
| 119 | } | 119 | } |
| ... | @@ -180,7 +180,7 @@ public class LeadershipManager implements LeadershipService { | ... | @@ -180,7 +180,7 @@ public class LeadershipManager implements LeadershipService { |
| 180 | verifyNotNull(lock, "Lock should not be null"); | 180 | verifyNotNull(lock, "Lock should not be null"); |
| 181 | lock.lockAsync(TERM_DURATION_MS).whenComplete((response, error) -> { | 181 | lock.lockAsync(TERM_DURATION_MS).whenComplete((response, error) -> { |
| 182 | if (error == null) { | 182 | if (error == null) { |
| 183 | - THREAD_POOL.schedule( | 183 | + threadPool.schedule( |
| 184 | new ReelectionTask(lock), | 184 | new ReelectionTask(lock), |
| 185 | TERM_DURATION_MS / 2, | 185 | TERM_DURATION_MS / 2, |
| 186 | TimeUnit.MILLISECONDS); | 186 | TimeUnit.MILLISECONDS); |
| ... | @@ -216,7 +216,7 @@ public class LeadershipManager implements LeadershipService { | ... | @@ -216,7 +216,7 @@ public class LeadershipManager implements LeadershipService { |
| 216 | new LeadershipEvent( | 216 | new LeadershipEvent( |
| 217 | LeadershipEvent.Type.LEADER_REELECTED, | 217 | LeadershipEvent.Type.LEADER_REELECTED, |
| 218 | new Leadership(lock.path(), localNode, lock.epoch()))); | 218 | new Leadership(lock.path(), localNode, lock.epoch()))); |
| 219 | - THREAD_POOL.schedule(this, TERM_DURATION_MS / 2, TimeUnit.MILLISECONDS); | 219 | + threadPool.schedule(this, TERM_DURATION_MS / 2, TimeUnit.MILLISECONDS); |
| 220 | } else { | 220 | } else { |
| 221 | if (openContests.containsKey(lock.path())) { | 221 | if (openContests.containsKey(lock.path())) { |
| 222 | notifyListeners( | 222 | notifyListeners( | ... | ... |
| ... | @@ -66,10 +66,16 @@ public class DistributedLock implements Lock { | ... | @@ -66,10 +66,16 @@ public class DistributedLock implements Lock { |
| 66 | 66 | ||
| 67 | @Override | 67 | @Override |
| 68 | public CompletableFuture<Void> lockAsync(int leaseDurationMillis) { | 68 | public CompletableFuture<Void> lockAsync(int leaseDurationMillis) { |
| 69 | - if (isLocked() || tryLock(leaseDurationMillis)) { | 69 | + try { |
| 70 | - return CompletableFuture.<Void>completedFuture(null); | 70 | + if (isLocked() || tryLock(leaseDurationMillis)) { |
| 71 | + return CompletableFuture.<Void>completedFuture(null); | ||
| 72 | + } | ||
| 73 | + return lockManager.lockIfAvailable(this, leaseDurationMillis); | ||
| 74 | + } catch (DatabaseException e) { | ||
| 75 | + CompletableFuture<Void> lockFuture = new CompletableFuture<>(); | ||
| 76 | + lockFuture.completeExceptionally(e); | ||
| 77 | + return lockFuture; | ||
| 71 | } | 78 | } |
| 72 | - return lockManager.lockIfAvailable(this, leaseDurationMillis); | ||
| 73 | } | 79 | } |
| 74 | 80 | ||
| 75 | @Override | 81 | @Override | ... | ... |
-
Please register or login to post a comment