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());