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 {