From 84afb8ca77bd90f7667713bae1430c424ade9c64 Mon Sep 17 00:00:00 2001 From: PapaCharlie Date: Wed, 8 Mar 2023 09:52:21 -0800 Subject: [PATCH] Fix a race condition in WatcherCleanerTest.testDeadWatcherMetrics Because the metrics were updated _after_ the listener is invoked, the listener does not always see the fresh metric value. This fixes it so that the updated metric value is always visible to the listener. --- .../org/apache/zookeeper/server/watch/WatcherCleaner.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/zookeeper-server/src/main/java/org/apache/zookeeper/server/watch/WatcherCleaner.java b/zookeeper-server/src/main/java/org/apache/zookeeper/server/watch/WatcherCleaner.java index c3b7e602f1c..80146200912 100644 --- a/zookeeper-server/src/main/java/org/apache/zookeeper/server/watch/WatcherCleaner.java +++ b/zookeeper-server/src/main/java/org/apache/zookeeper/server/watch/WatcherCleaner.java @@ -158,13 +158,13 @@ public void run() { cleaners.schedule(new WorkRequest() { @Override public void doWork() throws Exception { + ServerMetrics.getMetrics().DEAD_WATCHERS_CLEARED.add(total); + totalDeadWatchers.addAndGet(-total); long startTime = Time.currentElapsedTime(); listener.processDeadWatchers(snapshot); long latency = Time.currentElapsedTime() - startTime; LOG.info("Takes {} to process {} watches", latency, total); ServerMetrics.getMetrics().DEAD_WATCHERS_CLEANER_LATENCY.add(latency); - ServerMetrics.getMetrics().DEAD_WATCHERS_CLEARED.add(total); - totalDeadWatchers.addAndGet(-total); synchronized (processingCompletedEvent) { processingCompletedEvent.notifyAll(); }