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

sanpwc pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git


The following commit(s) were added to refs/heads/main by this push:
     new 78a68b9a59 IGNITE-23050 Restore systemUTC().instant().toEpochMilli() 
in HybridClockImpl for better stability (#4264)
78a68b9a59 is described below

commit 78a68b9a597db968fbd38e1b8e698e9a4bb5ebbd
Author: Alexander Lapin <[email protected]>
AuthorDate: Thu Aug 22 18:16:29 2024 +0300

    IGNITE-23050 Restore systemUTC().instant().toEpochMilli() in 
HybridClockImpl for better stability (#4264)
---
 .../apache/ignite/internal/hlc/HybridClockImpl.java |  5 +++--
 .../apache/ignite/internal/hlc/HybridClockTest.java | 21 +++++++++++++--------
 2 files changed, 16 insertions(+), 10 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridClockImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridClockImpl.java
index cfb82efac7..483024c651 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridClockImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridClockImpl.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.hlc;
 
 import static java.lang.Math.max;
+import static java.time.Clock.systemUTC;
 import static 
org.apache.ignite.internal.hlc.HybridTimestamp.LOGICAL_TIME_BITS_SIZE;
 import static org.apache.ignite.internal.hlc.HybridTimestamp.hybridTimestamp;
 
@@ -28,7 +29,6 @@ import java.util.concurrent.CopyOnWriteArrayList;
 import org.apache.ignite.internal.logger.IgniteLogger;
 import org.apache.ignite.internal.logger.Loggers;
 import org.apache.ignite.internal.tostring.S;
-import org.apache.ignite.internal.util.FastTimestamps;
 
 /**
  * A Hybrid Logical Clock implementation.
@@ -61,7 +61,8 @@ public class HybridClockImpl implements HybridClock {
     }
 
     private static long currentTime() {
-        return FastTimestamps.coarseCurrentTimeMillis() << 
LOGICAL_TIME_BITS_SIZE;
+        // TODO https://issues.apache.org/jira/browse/IGNITE-23049 Benchmarks 
required.
+        return systemUTC().instant().toEpochMilli() << LOGICAL_TIME_BITS_SIZE;
     }
 
     @Override
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/hlc/HybridClockTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/hlc/HybridClockTest.java
index cb35d8a9f5..5cb248e1c2 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/hlc/HybridClockTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/hlc/HybridClockTest.java
@@ -21,12 +21,15 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.mockito.ArgumentMatchers.anyLong;
 import static org.mockito.Mockito.mockStatic;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
+import java.time.Clock;
+import java.time.Instant;
 import java.util.concurrent.TimeUnit;
 import java.util.function.Supplier;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
-import org.apache.ignite.internal.util.FastTimestamps;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
@@ -43,7 +46,7 @@ class HybridClockTest extends BaseIgniteAbstractTest {
     /**
      * Mock of a system clock.
      */
-    private static MockedStatic<FastTimestamps> clockMock;
+    private static MockedStatic<Clock> clockMock;
 
     @Mock
     private ClockUpdateListener updateListener;
@@ -58,7 +61,7 @@ class HybridClockTest extends BaseIgniteAbstractTest {
      */
     @Test
     public void testNow() {
-        clockMock = mockCurrentTimestamp(100);
+        clockMock = mockToEpochMilli(100);
 
         HybridClock clock = new HybridClockImpl();
 
@@ -76,7 +79,7 @@ class HybridClockTest extends BaseIgniteAbstractTest {
      */
     @Test
     public void testTick() {
-        clockMock = mockCurrentTimestamp(100);
+        clockMock = mockToEpochMilli(100);
 
         HybridClock clock = new HybridClockImpl();
 
@@ -105,7 +108,7 @@ class HybridClockTest extends BaseIgniteAbstractTest {
     private void assertTimestampEquals(long sysTime, HybridTimestamp expTs, 
Supplier<HybridTimestamp> clo) {
         closeClockMock();
 
-        clockMock = mockCurrentTimestamp(sysTime);
+        clockMock = mockToEpochMilli(sysTime);
 
         assertEquals(expTs, clo.get());
     }
@@ -164,10 +167,12 @@ class HybridClockTest extends BaseIgniteAbstractTest {
         verify(updateListener, never()).onUpdate(anyLong());
     }
 
-    private static MockedStatic<FastTimestamps> mockCurrentTimestamp(long 
expected) {
-        MockedStatic<FastTimestamps> clockMock = 
mockStatic(FastTimestamps.class);
+    private static MockedStatic<Clock> mockToEpochMilli(long expected) {
+        Clock spyClock = spy(Clock.class);
+        MockedStatic<Clock> clockMock = mockStatic(Clock.class);
 
-        
clockMock.when(FastTimestamps::coarseCurrentTimeMillis).thenReturn(expected);
+        clockMock.when(Clock::systemUTC).thenReturn(spyClock);
+        when(spyClock.instant()).thenReturn(Instant.ofEpochMilli(expected));
 
         return clockMock;
     }

Reply via email to