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;
}