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

rpuch 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 e06345236f IGNITE-23437 Do not use ByteUtils#toBytes to persist 
timestamps in LowWatermark (#4563)
e06345236f is described below

commit e06345236fe6a42c8a9449172e230d5f242c4fac
Author: Roman Puchkovskiy <[email protected]>
AuthorDate: Tue Oct 15 16:26:46 2024 +0400

    IGNITE-23437 Do not use ByteUtils#toBytes to persist timestamps in 
LowWatermark (#4563)
---
 .../org/apache/ignite/internal/hlc/HybridTimestamp.java | 17 +++++++++++++++++
 .../ignite/internal/lowwatermark/LowWatermarkImpl.java  |  5 ++---
 .../internal/lowwatermark/LowWatermarkImplTest.java     |  5 ++---
 3 files changed, 21 insertions(+), 6 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridTimestamp.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridTimestamp.java
index 2e452cfbb5..c309c9e68f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridTimestamp.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/hlc/HybridTimestamp.java
@@ -22,6 +22,7 @@ import static 
org.apache.ignite.internal.lang.JavaLoggerFormatter.DATE_FORMATTER
 import java.io.Serializable;
 import java.time.Instant;
 import java.time.ZoneId;
+import org.apache.ignite.internal.util.ByteUtils;
 import org.jetbrains.annotations.Nullable;
 
 /**
@@ -121,6 +122,15 @@ public final class HybridTimestamp implements 
Comparable<HybridTimestamp>, Seria
         return timestamp == null ? NULL_HYBRID_TIMESTAMP : timestamp.time;
     }
 
+    /**
+     * Restores a timestamp converted to bytes using {@link #toBytes()}.
+     *
+     * @param bytes Byte array representing a timestamp.
+     */
+    public static HybridTimestamp fromBytes(byte[] bytes) {
+        return hybridTimestamp(ByteUtils.bytesToLong(bytes));
+    }
+
     /**
      * Finds maximum hybrid timestamp.
      *
@@ -239,4 +249,11 @@ public final class HybridTimestamp implements 
Comparable<HybridTimestamp>, Seria
             return new HybridTimestamp(getPhysical() + 1, 0);
         }
     }
+
+    /**
+     * Returns a byte array representing this timestamp.
+     */
+    public byte[] toBytes() {
+        return ByteUtils.longToBytes(longValue());
+    }
 }
diff --git 
a/modules/low-watermark/src/main/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImpl.java
 
b/modules/low-watermark/src/main/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImpl.java
index eb37ffe913..6df59cc3ba 100644
--- 
a/modules/low-watermark/src/main/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImpl.java
+++ 
b/modules/low-watermark/src/main/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImpl.java
@@ -59,7 +59,6 @@ import org.apache.ignite.internal.network.NetworkMessage;
 import 
org.apache.ignite.internal.schema.configuration.LowWatermarkConfiguration;
 import 
org.apache.ignite.internal.schema.configuration.LowWatermarkConfigurationSchema;
 import org.apache.ignite.internal.thread.NamedThreadFactory;
-import org.apache.ignite.internal.util.ByteUtils;
 import org.apache.ignite.internal.util.IgniteSpinBusyLock;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.internal.vault.VaultEntry;
@@ -170,7 +169,7 @@ public class LowWatermarkImpl extends 
AbstractEventProducer<LowWatermarkEvent, L
     private @Nullable HybridTimestamp readLowWatermarkFromVault() {
         VaultEntry vaultEntry = vaultManager.get(LOW_WATERMARK_VAULT_KEY);
 
-        return vaultEntry == null ? null : 
ByteUtils.fromBytes(vaultEntry.value());
+        return vaultEntry == null ? null : 
HybridTimestamp.fromBytes(vaultEntry.value());
     }
 
     @Override
@@ -335,7 +334,7 @@ public class LowWatermarkImpl extends 
AbstractEventProducer<LowWatermarkEvent, L
 
     CompletableFuture<Void> updateAndNotify(HybridTimestamp newLowWatermark) {
         return inBusyLockAsync(busyLock, () -> {
-                    vaultManager.put(LOW_WATERMARK_VAULT_KEY, 
ByteUtils.toBytes(newLowWatermark));
+                    vaultManager.put(LOW_WATERMARK_VAULT_KEY, 
newLowWatermark.toBytes());
 
                     return waitForLocksAndSetLowWatermark(newLowWatermark)
                             .thenComposeAsync(unused2 -> fireEvent(
diff --git 
a/modules/low-watermark/src/test/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImplTest.java
 
b/modules/low-watermark/src/test/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImplTest.java
index fc2083ba68..d5ab36da83 100644
--- 
a/modules/low-watermark/src/test/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImplTest.java
+++ 
b/modules/low-watermark/src/test/java/org/apache/ignite/internal/lowwatermark/LowWatermarkImplTest.java
@@ -69,7 +69,6 @@ import org.apache.ignite.internal.network.MessagingService;
 import org.apache.ignite.internal.network.NetworkMessage;
 import 
org.apache.ignite.internal.schema.configuration.LowWatermarkConfiguration;
 import org.apache.ignite.internal.testframework.BaseIgniteAbstractTest;
-import org.apache.ignite.internal.util.ByteUtils;
 import org.apache.ignite.internal.vault.VaultEntry;
 import org.apache.ignite.internal.vault.VaultManager;
 import org.apache.ignite.network.ClusterNode;
@@ -134,7 +133,7 @@ public class LowWatermarkImplTest extends 
BaseIgniteAbstractTest {
         var lowWatermark = new HybridTimestamp(10, 10);
 
         when(vaultManager.get(LOW_WATERMARK_VAULT_KEY))
-                .thenReturn(new VaultEntry(LOW_WATERMARK_VAULT_KEY, 
ByteUtils.toBytes(lowWatermark)));
+                .thenReturn(new VaultEntry(LOW_WATERMARK_VAULT_KEY, 
lowWatermark.toBytes()));
 
         assertThat(this.lowWatermark.startAsync(new ComponentContext()), 
willCompleteSuccessfully());
 
@@ -189,7 +188,7 @@ public class LowWatermarkImplTest extends 
BaseIgniteAbstractTest {
 
         InOrder inOrder = inOrder(vaultManager, lwmChangedListener);
 
-        inOrder.verify(vaultManager, 
timeout(1_000)).put(LOW_WATERMARK_VAULT_KEY, 
ByteUtils.toBytes(newLowWatermarkCandidate));
+        inOrder.verify(vaultManager, 
timeout(1_000)).put(LOW_WATERMARK_VAULT_KEY, 
newLowWatermarkCandidate.toBytes());
 
         inOrder.verify(lwmChangedListener, timeout(1_000)).notify(any());
 

Reply via email to