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 <82999245+thy950...@users.noreply.github.com>
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();
     }
 

Reply via email to