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

nizhikov 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 8aed3c61ba2 IGNITE-20601 Support custom location for cache dumps 
(#10990)
8aed3c61ba2 is described below

commit 8aed3c61ba2b61921463da6b35f1e5f936d7027b
Author: Nikolay <[email protected]>
AuthorDate: Wed Oct 11 15:50:52 2023 +0300

    IGNITE-20601 Support custom location for cache dumps (#10990)
---
 .../snapshot/IgniteSnapshotManager.java            |  7 +++-
 .../snapshot/AbstractSnapshotSelfTest.java         |  2 +-
 .../snapshot/EncryptedSnapshotTest.java            |  2 +-
 .../snapshot/IgniteSnapshotManagerSelfTest.java    |  1 +
 .../snapshot/dump/AbstractCacheDumpTest.java       |  7 +++-
 .../snapshot/dump/IgniteCacheDumpSelf2Test.java    | 46 ++++++++++++++++++++++
 6 files changed, 60 insertions(+), 5 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 80811f6fdd7..29560a7228d 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
@@ -1149,7 +1149,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
         Collection<Integer> comprGrpIds,
         boolean withMetaStorage
     ) {
-        if (!isPersistenceEnabled(cctx.gridConfig()))
+        if (!isPersistenceEnabled(cctx.gridConfig()) && req.snapshotPath() == 
null)
             initLocalSnapshotDirectory(true);
 
         Map<Integer, Set<Integer>> parts = new HashMap<>();
@@ -1185,6 +1185,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
             task0 = new GridFinishedFuture<>(Collections.emptySet());
         else {
             task0 = registerSnapshotTask(req.snapshotName(),
+                req.snapshotPath(),
                 req.operationalNodeId(),
                 req.requestId(),
                 parts,
@@ -2719,6 +2720,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
 
     /**
      * @param snpName Unique snapshot name.
+     * @param snpPath Snapshot path.
      * @param srcNodeId Node id which cause snapshot operation.
      * @param requestId Snapshot operation request ID.
      * @param parts Collection of pairs group and appropriate cache partition 
to be snapshot.
@@ -2729,6 +2731,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
      */
     AbstractSnapshotFutureTask<?> registerSnapshotTask(
         String snpName,
+        @Nullable String snpPath,
         UUID srcNodeId,
         UUID requestId,
         Map<Integer, Set<Integer>> parts,
@@ -2737,7 +2740,7 @@ public class IgniteSnapshotManager extends 
GridCacheSharedManagerAdapter
         SnapshotSender snpSndr
     ) {
         AbstractSnapshotFutureTask<?> task = registerTask(snpName, dump
-            ? new CreateDumpFutureTask(cctx, srcNodeId, requestId, snpName, 
snapshotLocalDir(snpName, null), ioFactory, snpSndr, parts)
+            ? new CreateDumpFutureTask(cctx, srcNodeId, requestId, snpName, 
snapshotLocalDir(snpName, snpPath), ioFactory, snpSndr, parts)
             : new SnapshotFutureTask(cctx, srcNodeId, requestId, snpName, 
tmpWorkDir, ioFactory, snpSndr, parts, withMetaStorage, locBuff));
 
         if (!withMetaStorage) {
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
index 7890402f2ec..65857a6d93b 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/AbstractSnapshotSelfTest.java
@@ -823,7 +823,7 @@ public abstract class AbstractSnapshotSelfTest extends 
GridCommonAbstractTest {
         boolean withMetaStorage,
         SnapshotSender snpSndr
     ) throws IgniteCheckedException {
-        AbstractSnapshotFutureTask<?> task = 
cctx.snapshotMgr().registerSnapshotTask(snpName, cctx.localNodeId(), null,
+        AbstractSnapshotFutureTask<?> task = 
cctx.snapshotMgr().registerSnapshotTask(snpName, null, cctx.localNodeId(), null,
             parts, withMetaStorage, false, snpSndr);
 
         if (!(task instanceof SnapshotFutureTask))
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/EncryptedSnapshotTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/EncryptedSnapshotTest.java
index d1d51093c21..a23a61c25a5 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/EncryptedSnapshotTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/EncryptedSnapshotTest.java
@@ -290,7 +290,7 @@ public class EncryptedSnapshotTest extends 
AbstractSnapshotSelfTest {
         IgniteEx ig = startGridsWithCache(1, CACHE_KEYS_RANGE, valueBuilder(), 
dfltCacheCfg);
 
         GridTestUtils.assertThrowsAnyCause(log,
-            () -> snp(ig).registerSnapshotTask(SNAPSHOT_NAME, 
ig.localNode().id(),
+            () -> snp(ig).registerSnapshotTask(SNAPSHOT_NAME, null, 
ig.localNode().id(),
                 null, F.asMap(CU.cacheId(dfltCacheCfg.getName()), null), 
false, false,
                 snp(ig).localSnapshotSenderFactory().apply(SNAPSHOT_NAME, 
null)).get(TIMEOUT),
             IgniteCheckedException.class,
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManagerSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManagerSelfTest.java
index 478cbb750e2..2002417dd11 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManagerSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/IgniteSnapshotManagerSelfTest.java
@@ -144,6 +144,7 @@ public class IgniteSnapshotManagerSelfTest extends 
AbstractSnapshotSelfTest {
 
         // Register task but not schedule it on the checkpoint.
         SnapshotFutureTask snpFutTask = 
(SnapshotFutureTask)mgr.registerSnapshotTask(SNAPSHOT_NAME,
+            null,
             cctx.localNodeId(),
             null,
             F.asMap(CU.cacheId(DEFAULT_CACHE_NAME), null),
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/AbstractCacheDumpTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/AbstractCacheDumpTest.java
index 4e6dd1f79cf..55f63c6bbf2 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/AbstractCacheDumpTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/AbstractCacheDumpTest.java
@@ -512,9 +512,14 @@ public abstract class AbstractCacheDumpTest extends 
GridCommonAbstractTest {
 
     /** */
     public static String invokeCheckCommand(IgniteEx ign, String name) throws 
IgniteCheckedException {
+        return invokeCheckCommand(ign, name, null);
+    }
+
+    /** */
+    public static String invokeCheckCommand(IgniteEx ign, String name, String 
snpPath) throws IgniteCheckedException {
         StringBuffer buf = new StringBuffer();
 
-        ign.context().cache().context().snapshotMgr().checkSnapshot(name, 
null).get(60_000)
+        ign.context().cache().context().snapshotMgr().checkSnapshot(name, 
snpPath).get(60_000)
             .print(line -> buf.append(line).append(System.lineSeparator()));
 
         return buf.toString();
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
index fd4d1764c36..029224383cd 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/snapshot/dump/IgniteCacheDumpSelf2Test.java
@@ -309,6 +309,52 @@ public class IgniteCacheDumpSelf2Test extends 
GridCommonAbstractTest {
         );
     }
 
+    /** */
+    @Test
+    public void testCustomLocation() throws Exception {
+        try (IgniteEx ign = startGrid()) {
+            IgniteCache<Integer, Integer> cache = ign.createCache(new 
CacheConfiguration<Integer, Integer>()
+                .setName("test-cache-0")
+                .setBackups(1)
+                .setAtomicityMode(CacheAtomicityMode.ATOMIC));
+
+            IntStream.range(0, KEYS_CNT).forEach(i -> cache.put(i, i));
+
+            File snpDir = U.resolveWorkDirectory(U.defaultWorkDirectory(), 
"ex_snapshots", true);
+
+            assertTrue(U.delete(snpDir));
+
+            ign.context().cache().context().snapshotMgr().createSnapshot(
+                DMP_NAME,
+                snpDir.getAbsolutePath(),
+                null,
+                false,
+                false,
+                true
+            ).get();
+
+            assertFalse(
+                "Standard snapshot directory must created lazily for in-memory 
node",
+                new File(U.defaultWorkDirectory(), 
DFLT_SNAPSHOT_DIRECTORY).exists()
+            );
+
+            assertFalse(
+                "Temporary snapshot directory must created lazily for 
in-memory node",
+                new File(
+                    
ign.context().pdsFolderResolver().resolveFolders().persistentStoreNodePath().getAbsolutePath(),
+                    DFLT_SNAPSHOT_TMP_DIR
+                ).exists()
+            );
+
+            assertTrue(snpDir.exists());
+
+            assertEquals(
+                "The check procedure has finished, no conflicts have been 
found.\n\n",
+                invokeCheckCommand(ign, DMP_NAME, snpDir.getAbsolutePath())
+            );
+        }
+    }
+
     /** */
     @Test
     public void testCheckOnEmptyNode() throws Exception {

Reply via email to