From 82ed7d4720b6a481590985ce79549fd125bf8a8b Mon Sep 17 00:00:00 2001 From: srlch Date: Fri, 17 Jan 2025 12:44:14 +0800 Subject: [PATCH] fix Signed-off-by: srlch --- .../lake/snapshot/ClusterSnapshotMgr.java | 1 + .../starrocks/lake/ClusterSnapshotTest.java | 77 ++++++++++++++++++- 2 files changed, 76 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/com/starrocks/lake/snapshot/ClusterSnapshotMgr.java b/fe/fe-core/src/main/java/com/starrocks/lake/snapshot/ClusterSnapshotMgr.java index 2e7ea0e13aeef..63f4776551a54 100644 --- a/fe/fe-core/src/main/java/com/starrocks/lake/snapshot/ClusterSnapshotMgr.java +++ b/fe/fe-core/src/main/java/com/starrocks/lake/snapshot/ClusterSnapshotMgr.java @@ -185,6 +185,7 @@ public synchronized boolean checkValidDeletionForTableFromAlterJob(long tableId) boolean valid = true; Map alterJobs = GlobalStateMgr.getCurrentState().getRollupHandler().getAlterJobsV2(); + alterJobs.putAll(GlobalStateMgr.getCurrentState().getSchemaChangeHandler().getAlterJobsV2()); for (Map.Entry entry : alterJobs.entrySet()) { AlterJobV2 alterJob = entry.getValue(); if (alterJob.getTableId() == tableId) { diff --git a/fe/fe-core/src/test/java/com/starrocks/lake/ClusterSnapshotTest.java b/fe/fe-core/src/test/java/com/starrocks/lake/ClusterSnapshotTest.java index 8f40015f38543..ee3db9dbf4998 100644 --- a/fe/fe-core/src/test/java/com/starrocks/lake/ClusterSnapshotTest.java +++ b/fe/fe-core/src/test/java/com/starrocks/lake/ClusterSnapshotTest.java @@ -14,7 +14,11 @@ package com.starrocks.lake.snapshot; +import com.starrocks.alter.AlterJobV2; import com.starrocks.alter.AlterTest; +import com.starrocks.alter.MaterializedViewHandler; +import com.starrocks.alter.SchemaChangeHandler; +import com.starrocks.alter.SchemaChangeJobV2; import com.starrocks.common.AlreadyExistsException; import com.starrocks.common.Config; import com.starrocks.common.DdlException; @@ -66,6 +70,8 @@ public class ClusterSnapshotTest { private ClusterSnapshotMgr clusterSnapshotMgr = new ClusterSnapshotMgr(); private boolean initSv = false; + private long nextId = 0; + @BeforeClass public static void beforeClass() throws Exception { AlterTest.beforeClass(); @@ -103,7 +109,8 @@ public ClusterSnapshotMgr getClusterSnapshotMgr() { @Mock public long getNextId() { - return 0L; + nextId = nextId + 1; + return nextId; } }; @@ -310,4 +317,70 @@ public long getMaxJournalId() { } setAutomatedSnapshotOff(false); } -} \ No newline at end of file + + @Test + public void testDeletionControl() { + new MockUp() { + @Mock + public boolean isSharedDataMode() { + return true; + } + }; + + ClusterSnapshotMgr localClusterSnapshotMgr = new ClusterSnapshotMgr(); + Assert.assertTrue(localClusterSnapshotMgr.getValidDeletionTimeMsByAutomatedSnapshot() == Long.MAX_VALUE); + localClusterSnapshotMgr.setAutomatedSnapshotOn(storageVolumeName); + Assert.assertEquals(localClusterSnapshotMgr.getValidDeletionTimeMsByAutomatedSnapshot(), 0L); + + ClusterSnapshotJob job1 = localClusterSnapshotMgr.createAutomatedSnapshotJob(); + job1.setState(ClusterSnapshotJobState.FINISHED); + Assert.assertEquals(localClusterSnapshotMgr.getValidDeletionTimeMsByAutomatedSnapshot(), 0L); + ClusterSnapshotJob job2 = localClusterSnapshotMgr.createAutomatedSnapshotJob(); + job2.setState(ClusterSnapshotJobState.FINISHED); + Assert.assertEquals(localClusterSnapshotMgr.getValidDeletionTimeMsByAutomatedSnapshot(), job1.getCreatedTimeMs()); + localClusterSnapshotMgr.setAutomatedSnapshotOff(); + + localClusterSnapshotMgr = new ClusterSnapshotMgr(); + Assert.assertTrue(localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(10)); + AlterJobV2 alterjob1 = new SchemaChangeJobV2(1, 2, 10, "table1", 100000); + AlterJobV2 alterjob2 = new SchemaChangeJobV2(2, 2, 11, "table2", 100000); + alterjob1.setJobState(AlterJobV2.JobState.FINISHED); + alterjob1.setFinishedTimeMs(1000); + alterjob2.setJobState(AlterJobV2.JobState.FINISHED); + alterjob2.setFinishedTimeMs(1000); + + + MaterializedViewHandler rollupHandler = new MaterializedViewHandler(); + SchemaChangeHandler schemaChangeHandler = new SchemaChangeHandler(); + schemaChangeHandler.addAlterJobV2(alterjob1); + schemaChangeHandler.addAlterJobV2(alterjob2); + + new MockUp() { + @Mock + public SchemaChangeHandler getSchemaChangeHandler() { + return schemaChangeHandler; + } + + @Mock + public MaterializedViewHandler getRollupHandler() { + return rollupHandler; + } + }; + + localClusterSnapshotMgr.setAutomatedSnapshotOn(storageVolumeName); + Assert.assertTrue(!localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(10)); + Assert.assertTrue(!localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(11)); + ClusterSnapshotJob j1 = localClusterSnapshotMgr.createAutomatedSnapshotJob(); + j1.setState(ClusterSnapshotJobState.FINISHED); + + Assert.assertTrue(!localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(10)); + Assert.assertTrue(!localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(11)); + + ClusterSnapshotJob j2 = localClusterSnapshotMgr.createAutomatedSnapshotJob(); + j2.setState(ClusterSnapshotJobState.FINISHED); + + Assert.assertTrue(localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(10)); + Assert.assertTrue(localClusterSnapshotMgr.checkValidDeletionForTableFromAlterJob(11)); + localClusterSnapshotMgr.setAutomatedSnapshotOff(); + } +}