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

tkalkirill 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 0799d6068b IGNITE-22674 Fix predicate in condition of 
UpdateLogImpl#saveSnapshot (#4052)
0799d6068b is described below

commit 0799d6068b084949e7909f80167841788ed716ab
Author: Kirill Tkalenko <[email protected]>
AuthorDate: Mon Jul 8 14:55:52 2024 +0300

    IGNITE-22674 Fix predicate in condition of UpdateLogImpl#saveSnapshot 
(#4052)
---
 .../ignite/internal/catalog/storage/UpdateLogImpl.java       | 11 ++++++++---
 .../ignite/internal/catalog/storage/UpdateLogImplTest.java   | 12 +++++++-----
 2 files changed, 15 insertions(+), 8 deletions(-)

diff --git 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/UpdateLogImpl.java
 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/UpdateLogImpl.java
index e14460781b..8ee8c50758 100644
--- 
a/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/UpdateLogImpl.java
+++ 
b/modules/catalog/src/main/java/org/apache/ignite/internal/catalog/storage/UpdateLogImpl.java
@@ -26,7 +26,9 @@ import static 
org.apache.ignite.internal.metastorage.dsl.Operations.ops;
 import static org.apache.ignite.internal.metastorage.dsl.Operations.put;
 import static org.apache.ignite.internal.metastorage.dsl.Statements.iif;
 import static org.apache.ignite.internal.util.ByteUtils.bytesToInt;
+import static org.apache.ignite.internal.util.ByteUtils.bytesToIntKeepingOrder;
 import static org.apache.ignite.internal.util.ByteUtils.intToBytes;
+import static org.apache.ignite.internal.util.ByteUtils.intToBytesKeepingOrder;
 import static 
org.apache.ignite.internal.util.CompletableFutures.falseCompletedFuture;
 import static 
org.apache.ignite.internal.util.CompletableFutures.nullCompletedFuture;
 
@@ -206,13 +208,16 @@ public class UpdateLogImpl implements UpdateLog {
                 return falseCompletedFuture();
             }
 
+            // We need to keep order for the comparison to work correctly.
+            byte[] snapshotVersionValue = 
intToBytesKeepingOrder(snapshotVersion);
+
             Condition versionIsRecent = or(
                     notExists(CatalogKey.snapshotVersion()),
-                    
value(CatalogKey.snapshotVersion()).lt(intToBytes(snapshotVersion))
+                    
value(CatalogKey.snapshotVersion()).lt(snapshotVersionValue)
             );
             Update saveSnapshotAndDropOutdatedUpdates = ops(Stream.concat(
                     Stream.of(
-                            put(CatalogKey.snapshotVersion(), 
intToBytes(snapshotVersion)),
+                            put(CatalogKey.snapshotVersion(), 
snapshotVersionValue),
                             put(CatalogKey.update(snapshotVersion), 
marshaller.marshall(update))
                     ),
                     IntStream.range(oldSnapshotVersion, 
snapshotVersion).mapToObj(ver -> Operations.remove(CatalogKey.update(ver)))
@@ -240,7 +245,7 @@ public class UpdateLogImpl implements UpdateLog {
 
         Entry earliestVersion = 
metastore.getLocally(CatalogKey.snapshotVersion(), recoveryRevision);
 
-        int ver = earliestVersion.empty() ? 1 : 
bytesToInt(Objects.requireNonNull(earliestVersion.value()));
+        int ver = earliestVersion.empty() ? 1 : 
bytesToIntKeepingOrder(Objects.requireNonNull(earliestVersion.value()));
 
         recoverUpdates(handler, recoveryRevision, ver);
     }
diff --git 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
index c6f4c8424e..c6be4b35ab 100644
--- 
a/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
+++ 
b/modules/catalog/src/test/java/org/apache/ignite/internal/catalog/storage/UpdateLogImplTest.java
@@ -28,6 +28,8 @@ import static org.hamcrest.Matchers.equalTo;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -62,7 +64,6 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.ValueSource;
-import org.mockito.Mockito;
 
 /** Tests to verify {@link UpdateLogImpl}. */
 class UpdateLogImplTest extends BaseIgniteAbstractTest {
@@ -126,7 +127,8 @@ class UpdateLogImplTest extends BaseIgniteAbstractTest {
         List<VersionedUpdate> updates = List.of(
                 singleEntryUpdateOfVersion(1),
                 singleEntryUpdateOfVersion(2),
-                singleEntryUpdateOfVersion(3));
+                singleEntryUpdateOfVersion(3)
+        );
 
         appendUpdates(updateLogImpl, updates);
 
@@ -325,10 +327,10 @@ class UpdateLogImplTest extends BaseIgniteAbstractTest {
     }
 
     private static SnapshotEntry snapshotEntryOfVersion(int version) {
-        Catalog catalog = Mockito.mock(Catalog.class);
+        Catalog catalog = mock(Catalog.class);
 
-        Mockito.when(catalog.version()).thenReturn(version);
-        
Mockito.when(catalog.defaultZone()).thenReturn(Mockito.mock(CatalogZoneDescriptor.class));
+        when(catalog.version()).thenReturn(version);
+        
when(catalog.defaultZone()).thenReturn(mock(CatalogZoneDescriptor.class));
 
         return new SnapshotEntry(catalog);
     }

Reply via email to