You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2013/10/15 19:03:20 UTC

svn commit: r1532433 - /sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java

Author: cziegeler
Date: Tue Oct 15 17:03:20 2013
New Revision: 1532433

URL: http://svn.apache.org/r1532433
Log:
SLING-3177 : Cache hc result in jmx bean

Modified:
    sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java

Modified: sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java?rev=1532433&r1=1532432&r2=1532433&view=diff
==============================================================================
--- sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java (original)
+++ sling/trunk/bundles/extensions/healthcheck/jmx/src/main/java/org/apache/sling/hc/jmx/impl/HealthCheckMBean.java Tue Oct 15 17:03:20 2013
@@ -51,6 +51,9 @@ import org.osgi.framework.ServiceReferen
 /** A {@link DynamicMBean} used to execute a {@link HealthCheck} service */
 public class HealthCheckMBean implements DynamicMBean {
 
+    /** A HC result is cached for this time (ms) */
+    private static final long RESULT_TTL = 1500;
+
     public static final String HC_OK_ATTRIBUTE_NAME = "ok";
     public static final String HC_STATUS_ATTRIBUTE_NAME = "status";
     public static final String HC_LOG_ATTRIBUTE_NAME = "log";
@@ -74,6 +77,10 @@ public class HealthCheckMBean implements
     /** The default attributes. */
     private final Map<String, Object> defaultAttributes;
 
+    private long healthCheckInvocationTime;
+
+    private Result healthCheckResult;
+
     static {
         try {
             // Define the log row and table types
@@ -137,7 +144,7 @@ public class HealthCheckMBean implements
                     // we assume that a valid attribute name is used
                     // which is requesting a hc result
                     if ( hcResult == null ) {
-                        hcResult = this.healthCheck.execute();
+                        hcResult = this.getHealthCheckResult();
                     }
 
                     if ( HC_OK_ATTRIBUTE_NAME.equals(key) ) {
@@ -241,4 +248,14 @@ public class HealthCheckMBean implements
     public String toString() {
         return "HealthCheckMBean [healthCheck=" + healthCheck + "]";
     }
+
+    private Result getHealthCheckResult() {
+        synchronized ( this ) {
+            if ( this.healthCheckResult == null || this.healthCheckInvocationTime < System.currentTimeMillis() ) {
+                this.healthCheckResult = this.healthCheck.execute();
+                this.healthCheckInvocationTime = System.currentTimeMillis() + RESULT_TTL;
+            }
+            return this.healthCheckResult;
+        }
+    }
 }
\ No newline at end of file