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

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


The following commit(s) were added to refs/heads/3.1 by this push:
     new 5e09d985e7 Improve readability of timekeeping code in idle server 
check (#4737)
5e09d985e7 is described below

commit 5e09d985e74d408066c23f3b2ae5f10f63b97b45
Author: Dom G. <domgargu...@apache.org>
AuthorDate: Wed Sep 11 13:19:12 2024 -0400

    Improve readability of timekeeping code in idle server check (#4737)
    
    * Improve readability of timekeeping in idle server check code
    * Update to use Timer object
---
 .../org/apache/accumulo/server/AbstractServer.java | 28 ++++++++++++----------
 1 file changed, 15 insertions(+), 13 deletions(-)

diff --git 
a/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java 
b/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
index dc46e0ecd0..47fe34bf26 100644
--- a/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
+++ b/server/base/src/main/java/org/apache/accumulo/server/AbstractServer.java
@@ -18,8 +18,9 @@
  */
 package org.apache.accumulo.server;
 
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+
 import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
 
 import org.apache.accumulo.core.Constants;
@@ -29,6 +30,7 @@ import org.apache.accumulo.core.conf.AccumuloConfiguration;
 import org.apache.accumulo.core.conf.Property;
 import org.apache.accumulo.core.metrics.MetricsProducer;
 import org.apache.accumulo.core.trace.TraceUtil;
+import org.apache.accumulo.core.util.Timer;
 import org.apache.accumulo.core.util.threads.ThreadPools;
 import org.apache.accumulo.server.mem.LowMemoryDetector;
 import org.apache.accumulo.server.metrics.ProcessMetrics;
@@ -44,8 +46,8 @@ public abstract class AbstractServer implements 
AutoCloseable, MetricsProducer,
   protected final String applicationName;
   private final String hostname;
   private final ProcessMetrics processMetrics;
-  protected final long idleReportingPeriodNanos;
-  private volatile long idlePeriodStartNanos = 0L;
+  protected final long idleReportingPeriodMillis;
+  private volatile Timer idlePeriodTimer = null;
 
   protected AbstractServer(String appName, ConfigOpts opts, String[] args) {
     this.applicationName = appName;
@@ -67,11 +69,11 @@ public abstract class AbstractServer implements 
AutoCloseable, MetricsProducer,
     final LowMemoryDetector lmd = context.getLowMemoryDetector();
     ScheduledFuture<?> future = 
context.getScheduledExecutor().scheduleWithFixedDelay(
         () -> lmd.logGCInfo(context.getConfiguration()), 0,
-        lmd.getIntervalMillis(context.getConfiguration()), 
TimeUnit.MILLISECONDS);
+        lmd.getIntervalMillis(context.getConfiguration()), MILLISECONDS);
     ThreadPools.watchNonCriticalScheduledTask(future);
     processMetrics = new ProcessMetrics(context);
-    idleReportingPeriodNanos = TimeUnit.MILLISECONDS.toNanos(
-        
context.getConfiguration().getTimeInMillis(Property.GENERAL_IDLE_PROCESS_INTERVAL));
+    idleReportingPeriodMillis =
+        
context.getConfiguration().getTimeInMillis(Property.GENERAL_IDLE_PROCESS_INTERVAL);
   }
 
   /**
@@ -82,22 +84,22 @@ public abstract class AbstractServer implements 
AutoCloseable, MetricsProducer,
    * @param isIdle whether the server is idle
    */
   protected void updateIdleStatus(boolean isIdle) {
-    boolean shouldResetIdlePeriod = !isIdle || idleReportingPeriodNanos == 0;
-    boolean isIdlePeriodNotStarted = idlePeriodStartNanos == 0;
+    boolean shouldResetIdlePeriod = !isIdle || idleReportingPeriodMillis == 0;
+    boolean hasIdlePeriodStarted = idlePeriodTimer != null;
     boolean hasExceededIdlePeriod =
-        (System.nanoTime() - idlePeriodStartNanos) > idleReportingPeriodNanos;
+        hasIdlePeriodStarted && 
idlePeriodTimer.hasElapsed(idleReportingPeriodMillis, MILLISECONDS);
 
     if (shouldResetIdlePeriod) {
       // Reset idle period and set idle metric to false
-      idlePeriodStartNanos = 0;
+      idlePeriodTimer = null;
       processMetrics.setIdleValue(false);
-    } else if (isIdlePeriodNotStarted) {
+    } else if (!hasIdlePeriodStarted) {
       // Start tracking idle period
-      idlePeriodStartNanos = System.nanoTime();
+      idlePeriodTimer = Timer.startNew();
     } else if (hasExceededIdlePeriod) {
       // Set idle metric to true and reset the start of the idle period
       processMetrics.setIdleValue(true);
-      idlePeriodStartNanos = 0;
+      idlePeriodTimer = null;
     }
   }
 

Reply via email to