You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by pp...@apache.org on 2022/08/30 12:58:07 UTC
[ignite] branch master updated: IGNITE-17552 Fixed an issue where the snapshot error was not propagated to the initiating node (#10221)
This is an automated email from the ASF dual-hosted git repository.
ppa 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 593319d1204 IGNITE-17552 Fixed an issue where the snapshot error was not propagated to the initiating node (#10221)
593319d1204 is described below
commit 593319d1204ab79dadacc0e08c84c4f519d36ba1
Author: Pavel Pereslegin <xx...@gmail.com>
AuthorDate: Tue Aug 30 15:57:53 2022 +0300
IGNITE-17552 Fixed an issue where the snapshot error was not propagated to the initiating node (#10221)
---
.../snapshot/IgniteSnapshotManager.java | 5 ++-
.../snapshot/IgniteClusterSnapshotSelfTest.java | 36 ++++++++++++++++++++--
2 files changed, 38 insertions(+), 3 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 322293573db..b339b62184d 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
@@ -976,8 +976,11 @@ public class IgniteSnapshotManager extends GridCacheSharedManagerAdapter
return new GridFinishedFuture<>();
try {
- if (req.error() != null)
+ if (req.error() != null) {
+ snpReq.error(req.error());
+
deleteSnapshot(snapshotLocalDir(req.snapshotName(), req.snapshotPath()), pdsSettings.folderName());
+ }
removeLastMetaStorageKey();
}
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotSelfTest.java
index 3342619fe38..cffa3156c4d 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteClusterSnapshotSelfTest.java
@@ -36,6 +36,7 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.BiFunction;
+import java.util.function.Consumer;
import java.util.function.Predicate;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
@@ -48,6 +49,7 @@ import org.apache.ignite.cache.query.ScanQuery;
import org.apache.ignite.cluster.ClusterTopologyException;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.IgniteInterruptedCheckedException;
@@ -98,6 +100,7 @@ import static org.apache.ignite.internal.processors.cache.persistence.snapshot.I
import static org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager.resolveSnapshotWorkDirectory;
import static org.apache.ignite.testframework.GridTestUtils.assertThrowsAnyCause;
import static org.apache.ignite.testframework.GridTestUtils.assertThrowsWithCause;
+import static org.apache.ignite.testframework.GridTestUtils.waitForCondition;
/**
* Cluster-wide snapshot test.
@@ -759,6 +762,35 @@ public class IgniteClusterSnapshotSelfTest extends AbstractSnapshotSelfTest {
}
}
+ /** @throws Exception If fails. */
+ @Test
+ public void testClusterSnapshotWithExplicitPathError() throws Exception {
+ startGridsWithCache(2, dfltCacheCfg, 0);
+
+ String invalidPath = "/" + (char)0;
+
+ Consumer<Integer> check = idx -> {
+ GridKernalContext kctx = grid(idx).context();
+
+ assertThrowsAnyCause(log,
+ () -> kctx.cache().context().snapshotMgr().createSnapshot(SNAPSHOT_NAME, invalidPath).get(TIMEOUT),
+ IgniteCheckedException.class,
+ invalidPath);
+
+ ObjectGauge<String> err = kctx.metric().registry(SNAPSHOT_METRICS).findMetric("LastSnapshotErrorMessage");
+
+ assertTrue(err.value().contains(invalidPath));
+ };
+
+ // Check on coordinator.
+ check.accept(0);
+
+ waitForCondition(() -> !grid(1).context().cache().context().snapshotMgr().isSnapshotCreating(), TIMEOUT);
+
+ // Check on non-coordinator.
+ check.accept(1);
+ }
+
/** @throws Exception If fails. */
@Test
public void testClusterSnapshotMetrics() throws Exception {
@@ -1020,8 +1052,8 @@ public class IgniteClusterSnapshotSelfTest extends AbstractSnapshotSelfTest {
assertThrowsAnyCause(log,
fut::get,
- IgniteException.class,
- "Snapshot creation has been finished with an error");
+ ClusterTopologyException.class,
+ "Snapshot operation interrupted, because baseline node left the cluster.");
assertEquals("Snapshot futures expected: " + exchFuts, 3, exchFuts.size());