This is an automated email from the ASF dual-hosted git repository.
jlfsdtc pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/kylin5 by this push:
new 871f9b893f KYLIN-6017 Skip replay audit log when running metadata
restore tool
871f9b893f is described below
commit 871f9b893fb066f665a0e69b9077eff6943b658c
Author: Zhong.Zhu <[email protected]>
AuthorDate: Thu Nov 7 19:13:58 2024 +0800
KYLIN-6017 Skip replay audit log when running metadata restore tool
---
.../common/persistence/transaction/UnitOfWork.java | 3 ++
.../persistence/transaction/UnitOfWorkParams.java | 3 ++
.../java/org/apache/kylin/tool/MetadataTool.java | 2 +-
.../org/apache/kylin/tool/MetadataToolTest.java | 33 ++++++++++++++++------
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWork.java
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWork.java
index 97b00d4943..c7d9319ca6 100644
---
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWork.java
+++
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWork.java
@@ -281,6 +281,9 @@ public class UnitOfWork {
}
long startTime = System.currentTimeMillis();
+ if (UnitOfWork.get().isSkipReplay()) {
+ return;
+ }
try (SetLogCategory ignored = new
SetLogCategory(LogConstant.METADATA_CATEGORY)) {
transparentRS.getAuditLogStore().catchupWithMaxTimeout();
long endTime = System.currentTimeMillis();
diff --git
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWorkParams.java
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWorkParams.java
index bb7602847d..4174503311 100644
---
a/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWorkParams.java
+++
b/src/core-common/src/main/java/org/apache/kylin/common/persistence/transaction/UnitOfWorkParams.java
@@ -66,6 +66,9 @@ public class UnitOfWorkParams<T> {
@Builder.Default
private boolean skipAuditLog = false;
+ @Builder.Default
+ private boolean skipReplay = false;
+
private String tempLockName;
@Builder.Default
diff --git a/src/tool/src/main/java/org/apache/kylin/tool/MetadataTool.java
b/src/tool/src/main/java/org/apache/kylin/tool/MetadataTool.java
index 74516b80f7..19e9cfb547 100644
--- a/src/tool/src/main/java/org/apache/kylin/tool/MetadataTool.java
+++ b/src/tool/src/main/java/org/apache/kylin/tool/MetadataTool.java
@@ -200,7 +200,7 @@ public class MetadataTool extends ExecutableApplication {
// helper.list(kylinConfig, target);
} else if (optionsHelper.hasOption(OPERATE_RESTORE)) {
boolean delete = optionsHelper.hasOption(OPTION_AFTER_TRUNCATE);
-
UnitOfWork.doInTransactionWithRetry(UnitOfWorkParams.builder().processor(() -> {
+
UnitOfWork.doInTransactionWithRetry(UnitOfWorkParams.builder().skipReplay(true).processor(()
-> {
restoreMetadata(project, path, delete);
return null;
}).unitName(GLOBAL_UNIT).all(true).build());
diff --git a/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTest.java
b/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTest.java
index 2acf1e5242..c1c7372f25 100644
--- a/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTest.java
+++ b/src/tool/src/test/java/org/apache/kylin/tool/MetadataToolTest.java
@@ -309,7 +309,8 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
}
@Test
- public void testRestoreOverwriteAll() throws IOException {
+ public void testRestoreOverwriteAll() throws Exception {
+ val resourceStore = getStore();
val junitFolder = temporaryFolder.getRoot();
val junitCoreMetaFolder = new File(junitFolder.getAbsolutePath() +
"/core_meta");
junitCoreMetaFolder.mkdir();
@@ -333,13 +334,14 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
assertBeforeRestoreTest();
val tool = new MetadataTool(getTestConfig());
tool.execute(new String[] { "-restore", "-dir",
junitFolder.getAbsolutePath(), "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
assertAfterRestoreTest();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
}
@Test
- public void testRestoreUpdateAll() throws IOException {
+ public void testRestoreUpdateAll() throws Exception {
val junitFolder = temporaryFolder.getRoot();
val junitCoreMetaFolder = new File(junitFolder.getAbsolutePath() +
"/core_meta");
junitCoreMetaFolder.mkdir();
@@ -368,18 +370,18 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
val tool = new MetadataTool(getTestConfig());
tool.execute(new String[] { "-restore", "-dir",
junitFolder.getAbsolutePath() });
+ destResourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assert.assertNotNull(destResourceStore.getResource(deletePath));//delete path
will restore
Assert.assertEquals(originDescription,
JsonUtil.readValue(destResourceStore.getResource(modifyPath).getByteSource().read(),
NDataModel.class)
.getDescription());//modify path will restore
- Assert.assertNotNull(destResourceStore.getResource(addPath));//add
path will not delete
FileUtils.deleteDirectory(junitFolder.getAbsoluteFile());
}
@Test
- public void testRestoreUpdateProject() throws IOException {
+ public void testRestoreUpdateProject() throws Exception {
val junitFolder = temporaryFolder.getRoot();
val junitCoreMetaFolder = new File(junitFolder.getAbsolutePath() +
"/core_meta");
junitCoreMetaFolder.mkdir();
@@ -409,12 +411,11 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
val tool = new MetadataTool(getTestConfig());
tool.execute(new String[] { "-restore", "-project", "broken_test",
"-dir", junitFolder.getAbsolutePath() });
-
+ destResourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assert.assertNotNull(destResourceStore.getResource(deletePath));//delete path
will restore
Assert.assertEquals(originDescription,
JsonUtil.readValue(destResourceStore.getResource(modifyPath).getByteSource().read(),
NDataModel.class)
.getDescription());//modify path will restore
- Assert.assertNotNull(destResourceStore.getResource(addPath));//add
path will not delete
FileUtils.deleteDirectory(junitFolder.getAbsoluteFile());
}
@@ -439,7 +440,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
@Test
public void testRestoreOverwriteAllCompress() throws Exception {
prepareCompressedFile();
-
+ val resourceStore = getStore();
val junitFolder = temporaryFolder.getRoot();
MetadataToolTestFixture.fixtureRestoreTest();
@@ -455,6 +456,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
assertBeforeRestoreTest();
val tool = tool(junitFolder.getAbsolutePath());
tool.execute(new String[] { "-restore", "-compress", "-dir",
"ignored", "--after-truncate", });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
assertAfterRestoreTest();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
@@ -462,6 +464,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
@Test
public void testRestoreOverwriteAllWithSrcOrDestIsEmpty() throws Exception
{
+ val resourceStore = getStore();
val emptyFolder = temporaryFolder.newFolder();
val restoreFolder = temporaryFolder.newFolder();
val restoreCoreMetaFolder = new File(restoreFolder.getAbsolutePath() +
"/core_meta");
@@ -473,11 +476,13 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("default")).isNotNull();
val tool = new MetadataTool(getTestConfig());
tool.execute(new String[] { "-restore", "-dir",
emptyFolder.getAbsolutePath(), "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).listAllProjects()).isEmpty();
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
tool.execute(new String[] { "-restore", "-dir",
restoreFolder.getAbsolutePath(), "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNotNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("default")).isNotNull();
@@ -485,6 +490,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
@Test
public void testRestoreDuplicateUuidModel() throws Exception {
+ val resourceStore = getStore();
val project = "default";
val backupPath = temporaryFolder.newFolder();
String backFolder = "testRestoreDuplicateUuidMode_backup";
@@ -552,13 +558,14 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
long start2 = System.currentTimeMillis() / 1000;
await().until(() -> start2 != (System.currentTimeMillis() / 1000));
tool.execute(new String[] { "-restore", "-dir", restorePath,
"--after-truncate" });
-
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(dataModelManager.getDataModelDesc(modelId)).isNotNull();
Assertions.assertThat(dataModelManager.getDataModelDesc(modelId2)).isNotNull();
}
@Test
public void testRestoreOverwriteAllCompressWithSrcOrDestIsEmpty() throws
Exception {
+ val resourceStore = getStore();
val emptyFolder = temporaryFolder.newFolder();
createEmptyCompressedFile(emptyFolder);
val restoreFolder = temporaryFolder.newFolder();
@@ -571,11 +578,13 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("default")).isNotNull();
MetadataTool tool = tool(emptyFolder.getAbsolutePath());
tool.execute(new String[] { "-restore", "-compress", "-dir",
"ignored", "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).listAllProjects()).isEmpty();
tool = tool(restoreFolder.getAbsolutePath());
Thread.sleep(TimeUnit.SECONDS.toMillis(1));
tool.execute(new String[] { "-restore", "-compress", "-dir",
"ignored", "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNotNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("default")).isNotNull();
@@ -617,6 +626,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
val tool = new MetadataTool(getTestConfig());
tool.execute(new String[] { "-restore", "-project", "default", "-dir",
junitFolder.getAbsolutePath(),
"--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
assertAfterRestoreTest();
val path = HadoopUtil.getBackupFolder(getTestConfig());
@@ -648,6 +658,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
val tool = tool(junitFolder.getAbsolutePath());
tool.execute(
new String[] { "-restore", "-project", "default", "-compress",
"-dir", "ignored", "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
assertAfterRestoreTest();
val path = HadoopUtil.getBackupFolder(getTestConfig());
@@ -665,6 +676,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
@Test
public void testRestoreOverwriteProjectWithSrcOrDestIsEmpty() throws
Exception {
+ val resourceStore = getStore();
val junitFolder = temporaryFolder.getRoot();
val junitCoreMetaFolder = new File(junitFolder.getAbsolutePath() +
"/core_meta");
junitCoreMetaFolder.mkdir();
@@ -681,6 +693,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNotNull();
tool.execute(new String[] { "-restore", "-project", "demo", "-dir",
junitFolder.getAbsolutePath(),
"--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNull();
//there is a project metadata that destResourceStore doesn't contain
and srcResourceStore contains
@@ -696,6 +709,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
tool.execute(new String[] { "-restore", "-project", "ssb", "-dir",
junitFolder.getAbsolutePath(),
"--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
}
@@ -727,6 +741,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
@Test
public void testRestoreOverwriteProjectCompressWithSrcOrDestIsEmpty()
throws Exception {
prepareCompressedFile();
+ val resourceStore = getStore();
val junitFolder = temporaryFolder.getRoot();
val tool = tool(junitFolder.getAbsolutePath());
@@ -734,6 +749,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNotNull();
tool.execute(
new String[] { "-restore", "-project", "demo", "-compress",
"-dir", "ignored", "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("demo")).isNull();
//there is a project metadata that destResourceStore doesn't contain
and srcResourceStore contains
@@ -749,6 +765,7 @@ public class MetadataToolTest extends
NLocalFileMetadataTestCase {
tool.execute(
new String[] { "-restore", "-project", "ssb", "-compress",
"-dir", "ignored", "--after-truncate" });
+ resourceStore.getAuditLogStore().catchupWithMaxTimeout();
Assertions.assertThat(NProjectManager.getInstance(getTestConfig()).getProject("ssb")).isNotNull();
}