You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ti...@apache.org on 2025/05/07 11:28:44 UTC
(ignite) branch master updated: IGNITE-25226: Forbid custom snapshot handlers for incremental snapshots (#12034)
This is an automated email from the ASF dual-hosted git repository.
timoninmaxim pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/master by this push:
new 1d69c5fc52c IGNITE-25226: Forbid custom snapshot handlers for incremental snapshots (#12034)
1d69c5fc52c is described below
commit 1d69c5fc52c1b7cdaab01e24f316b993b6520075
Author: Vladimir Steshin <vl...@gmail.com>
AuthorDate: Wed May 7 14:28:37 2025 +0300
IGNITE-25226: Forbid custom snapshot handlers for incremental snapshots (#12034)
---
.../persistence/snapshot/IgniteSnapshotManager.java | 1 +
.../snapshot/IncrementalSnapshotVerificationTask.java | 13 ++++++++-----
.../persistence/snapshot/SnapshotRestoreProcess.java | 2 +-
.../IncrementalSnapshotCheckBeforeRestoreTest.java | 17 +++++++++++++++++
4 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
index c494b6d3e1b..7afbe4562a6 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManager.java
@@ -1701,6 +1701,7 @@ public class IgniteSnapshotManager extends GridCacheSharedManagerAdapter
A.ensure(U.alphanumericUnderscore(name), "Snapshot name must satisfy the following name pattern: a-zA-Z0-9_");
A.ensure(grps == null || grps.stream().filter(Objects::isNull).collect(Collectors.toSet()).isEmpty(),
"Collection of cache groups names cannot contain null elements.");
+ A.ensure(!includeCustomHandlers || incIdx < 1, "Snapshot handlers aren't supported for incremental snapshot.");
GridFutureAdapter<SnapshotPartitionsVerifyTaskResult> res = new GridFutureAdapter<>();
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotVerificationTask.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotVerificationTask.java
index b2f367b1a64..d4febb6abd9 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotVerificationTask.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IncrementalSnapshotVerificationTask.java
@@ -149,7 +149,10 @@ public class IncrementalSnapshotVerificationTask extends AbstractSnapshotVerific
BaselineTopology blt = ignite.context().state().clusterState().baselineTopology();
- checkBaseline(blt);
+ Map<String, Short> cstIdsMap = blt.consistentIdMapping().entrySet().stream()
+ .collect(Collectors.toMap(e -> e.getKey().toString(), Map.Entry::getValue));
+
+ checkBaseline(cstIdsMap.keySet());
Map<Integer, StoredCacheData> txCaches = readTxCachesData();
@@ -171,7 +174,7 @@ public class IncrementalSnapshotVerificationTask extends AbstractSnapshotVerific
}
};
- short locNodeId = blt.consistentIdMapping().get(consId);
+ short locNodeId = cstIdsMap.get(consId);
Set<GridCacheVersion> activeDhtTxs = new HashSet<>();
Map<GridCacheVersion, Set<Short>> txPrimParticipatingNodes = new HashMap<>();
@@ -331,14 +334,14 @@ public class IncrementalSnapshotVerificationTask extends AbstractSnapshotVerific
}
/** Checks that current baseline topology matches baseline topology of the snapshot. */
- private void checkBaseline(BaselineTopology blt) throws IgniteCheckedException, IOException {
+ private void checkBaseline(Collection<String> baselineCstIds) throws IgniteCheckedException, IOException {
IgniteSnapshotManager snpMgr = ignite.context().cache().context().snapshotMgr();
SnapshotMetadata meta = snpMgr.readSnapshotMetadata(sft.meta());
- if (!F.eqNotOrdered(blt.consistentIds(), meta.baselineNodes())) {
+ if (!F.eqNotOrdered(baselineCstIds, meta.baselineNodes())) {
throw new IgniteCheckedException("Topologies of snapshot and current cluster are different [snp=" +
- meta.baselineNodes() + ", current=" + blt.consistentIds() + ']');
+ meta.baselineNodes() + ", current=" + baselineCstIds + ']');
}
}
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
index 96a5ed3c607..6bd6cac05b2 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/SnapshotRestoreProcess.java
@@ -322,7 +322,7 @@ public class SnapshotRestoreProcess {
snpMgr.recordSnapshotEvent(snpName, msg, EventType.EVT_CLUSTER_SNAPSHOT_RESTORE_STARTED);
- snpMgr.checkSnapshot(snpName, snpPath, cacheGrpNames, true, incIdx, check).listen(f -> {
+ snpMgr.checkSnapshot(snpName, snpPath, cacheGrpNames, incIdx < 1, incIdx, check).listen(f -> {
if (f.error() != null) {
finishProcess(fut0.rqId, f.error());
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
index 702b771bddb..80fb59a6741 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/incremental/IncrementalSnapshotCheckBeforeRestoreTest.java
@@ -85,6 +85,23 @@ public class IncrementalSnapshotCheckBeforeRestoreTest extends AbstractSnapshotS
);
}
+ /** */
+ @Test
+ public void testCheckWithCustomHandlersUnallowed() throws Exception {
+ createFullSnapshot();
+
+ int incSnpCnt = 1;
+
+ createIncrementalSnapshots(incSnpCnt);
+
+ GridTestUtils.assertThrows(
+ null,
+ () -> snp(grid(1)).checkSnapshot(SNP, null, null, true, 1, true).get(getTestTimeout()),
+ IllegalArgumentException.class,
+ "Snapshot handlers aren't supported for incremental snapshot"
+ );
+ }
+
/** */
@Test
public void testCheckCorrectIncrementalSnapshot() throws Exception {