IGNITE-8138 Fix for incorrect uptime in Ignite metrics for long running server 
node


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4ea7f926
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4ea7f926
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4ea7f926

Branch: refs/heads/master
Commit: 4ea7f926e6f3803c616ab51e1d2e79765862efa1
Parents: dfb0b9e
Author: dpavlov <[email protected]>
Authored: Mon May 14 13:39:21 2018 +0300
Committer: dpavlov <[email protected]>
Committed: Mon May 14 13:39:21 2018 +0300

----------------------------------------------------------------------
 .../apache/ignite/internal/util/typedef/X.java  | 37 +++++++++++++-------
 .../ignite/spi/IgniteSpiMBeanAdapter.java       |  2 +-
 .../org/apache/ignite/lang/GridXSelfTest.java   |  6 +++-
 3 files changed, 30 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/4ea7f926/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
index 6d13f09..be69b24 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/X.java
@@ -53,8 +53,24 @@ public final class X {
     /** An empty immutable {@code Object} array. */
     public static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
 
+    /** Millis in second. */
+    private static final long MILLIS_IN_SECOND = 1000L;
+
+    /** Seconds in minute. */
+    private static final long SECONDS_IN_MINUTE = 60L;
+
+    /** Minuses in hour. */
+    private static final long MINUTES_IN_HOUR = 60L;
+
+    /** Hours in day. */
+    private static final long HOURS_IN_DAY = 24L;
+
     /** Time span dividers. */
-    private static final long[] SPAN_DIVS = new long[] {1000L, 60L, 60L, 24L};
+    private static final long[] SPAN_DIVS = new long[] {
+        MILLIS_IN_SECOND, SECONDS_IN_MINUTE, MINUTES_IN_HOUR, HOURS_IN_DAY};
+
+    /** Millis in day. */
+    private static final long MILLIS_IN_DAY = MILLIS_IN_SECOND * 
SECONDS_IN_MINUTE * MINUTES_IN_HOUR * HOURS_IN_DAY;
 
     /** The names of methods commonly used to access a wrapped exception. */
     private static final String[] CAUSE_MTD_NAMES = new String[] {
@@ -75,9 +91,6 @@ public final class X {
     /** The Method object for Java 1.4 getCause. */
     private static final Method THROWABLE_CAUSE_METHOD;
 
-    /**
-     *
-     */
     static {
         Method causeMtd;
 
@@ -200,7 +213,7 @@ public final class X {
      * Creates string presentation of given time {@code span} in hh:mm:ss.msec 
{@code HMSM} format.
      *
      * @param span Time span.
-     * @return String presentation.
+     * @return String presentation. If duration if longer than 1 day, days 
count is ignored.
      */
     public static String timeSpan2HMSM(long span) {
         long[] t = new long[4];
@@ -242,18 +255,16 @@ public final class X {
      * @return String presentation.
      */
     public static String timeSpan2DHMSM(long span) {
-        long SPAN_DIV = 86400000L;
-
         String days = "";
 
-        String hmsm = timeSpan2HMSM(span % SPAN_DIV);
+        String hmsm = timeSpan2HMSM(span % MILLIS_IN_DAY);
 
-        long count = span / SPAN_DIV;
+        long daysCnt = span / MILLIS_IN_DAY;
 
-        if (count == 1)
-            days = count + " day, ";
-        else if (count > 1)
-            days = count + " days, ";
+        if (daysCnt == 1)
+            days = "1 day, ";
+        else if (daysCnt > 1)
+            days = daysCnt + " days, ";
 
         return days + hmsm;
     }

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ea7f926/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java 
b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
index 8035333..f48b7e5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/IgniteSpiMBeanAdapter.java
@@ -46,7 +46,7 @@ public class IgniteSpiMBeanAdapter implements 
IgniteSpiManagementMBean {
 
     /** {@inheritDoc} */
     @Override public final String getUpTimeFormatted() {
-        return X.timeSpan2HMSM(getUpTime());
+        return X.timeSpan2DHMSM(getUpTime());
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/4ea7f926/modules/core/src/test/java/org/apache/ignite/lang/GridXSelfTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/lang/GridXSelfTest.java 
b/modules/core/src/test/java/org/apache/ignite/lang/GridXSelfTest.java
index 6efa6f2..8fd6df6 100644
--- a/modules/core/src/test/java/org/apache/ignite/lang/GridXSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/lang/GridXSelfTest.java
@@ -53,12 +53,16 @@ public class GridXSelfTest extends GridCommonAbstractTest {
     }
 
     /**
-     *
+     * Tests string presentation of given time.
      */
     public void testTimeSpan() {
         assertEquals(X.timeSpan2DHMSM(86400001L), "1 day, 00:00:00.001");
 
         assertEquals(X.timeSpan2DHMSM(172800004L), "2 days, 00:00:00.004");
+
+        assertEquals(X.timeSpan2DHMSM(1L), "00:00:00.001");
+
+        assertEquals(X.timeSpan2HMSM(172800004L), "00:00:00.004");
     }
 
     /**

Reply via email to