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"); } /**
