This is an automated email from the ASF dual-hosted git repository. w41ter pushed a commit to branch branch-2.1 in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/branch-2.1 by this push: new 3d6689d32cc [fix](restore) Reset next version for restored partitions (#38343) 3d6689d32cc is described below commit 3d6689d32cc84cd96f5c2e76d4378d1586a1344e Author: walter <w41te...@gmail.com> AuthorDate: Thu Jul 25 16:07:54 2024 +0800 [fix](restore) Reset next version for restored partitions (#38343) Cherry-pick #38321 --- .../java/org/apache/doris/backup/RestoreJob.java | 7 ++++-- .../java/org/apache/doris/catalog/OlapTable.java | 4 ++++ .../org/apache/doris/backup/RestoreJobTest.java | 27 ++++++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java index 2e20a9fa223..57696bc5a84 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java +++ b/fe/fe-core/src/main/java/org/apache/doris/backup/RestoreJob.java @@ -82,6 +82,7 @@ import org.apache.doris.thrift.TStorageMedium; import org.apache.doris.thrift.TStorageType; import org.apache.doris.thrift.TTaskType; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.ArrayListMultimap; @@ -1112,8 +1113,9 @@ public class RestoreJob extends AbstractJob { // reset remote partition. // reset all id in remote partition, but DO NOT modify any exist catalog objects. - private Partition resetPartitionForRestore(OlapTable localTbl, OlapTable remoteTbl, String partName, - ReplicaAllocation replicaAlloc) { + @VisibleForTesting + protected Partition resetPartitionForRestore(OlapTable localTbl, OlapTable remoteTbl, String partName, + ReplicaAllocation replicaAlloc) { Preconditions.checkState(localTbl.getPartition(partName) == null); Partition remotePart = remoteTbl.getPartition(partName); Preconditions.checkNotNull(remotePart); @@ -1143,6 +1145,7 @@ public class RestoreJob extends AbstractJob { // save version info for creating replicas long visibleVersion = remotePart.getVisibleVersion(); + remotePart.setNextVersion(visibleVersion + 1); LOG.info("reset partition {} for restore, visible version: {}, old partition id: {}", newPartId, visibleVersion, oldPartId); diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java index de93324891a..8a4a9fee95f 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java @@ -348,6 +348,10 @@ public class OlapTable extends Table implements MTMVRelatedTableIf { } } + public void setPartitionInfo(PartitionInfo info) { + partitionInfo = info; + } + public boolean hasMaterializedIndex(String indexName) { return indexNameToId.containsKey(indexName); } diff --git a/fe/fe-core/src/test/java/org/apache/doris/backup/RestoreJobTest.java b/fe/fe-core/src/test/java/org/apache/doris/backup/RestoreJobTest.java index ff60a6e8b90..a9e0a981a12 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/backup/RestoreJobTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/backup/RestoreJobTest.java @@ -24,10 +24,13 @@ import org.apache.doris.backup.BackupJobInfo.BackupPartitionInfo; import org.apache.doris.backup.BackupJobInfo.BackupTabletInfo; import org.apache.doris.catalog.Database; import org.apache.doris.catalog.Env; +import org.apache.doris.catalog.HashDistributionInfo; import org.apache.doris.catalog.MaterializedIndex; import org.apache.doris.catalog.MaterializedIndex.IndexExtState; import org.apache.doris.catalog.OlapTable; import org.apache.doris.catalog.Partition; +import org.apache.doris.catalog.PartitionInfo; +import org.apache.doris.catalog.PartitionType; import org.apache.doris.catalog.ReplicaAllocation; import org.apache.doris.catalog.Resource; import org.apache.doris.catalog.Table; @@ -51,6 +54,7 @@ import mockit.Injectable; import mockit.Mock; import mockit.MockUp; import mockit.Mocked; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -276,4 +280,27 @@ public class RestoreJobTest { System.out.println("tbl signature: " + tbl.getSignature(BackupHandler.SIGNATURE_VERSION, partNames)); } + @Test + public void testResetPartitionVisibleAndNextVersionForRestore() throws Exception { + long visibleVersion = 1234; + long remotePartId = 123; + String partName = "p20240723"; + MaterializedIndex index = new MaterializedIndex(); + Partition remotePart = new Partition(remotePartId, partName, index, new HashDistributionInfo()); + remotePart.setVisibleVersionAndTime(visibleVersion, 0); + remotePart.setNextVersion(visibleVersion + 10); + + OlapTable localTbl = new OlapTable(); + localTbl.setPartitionInfo(new PartitionInfo(PartitionType.RANGE)); + OlapTable remoteTbl = new OlapTable(); + remoteTbl.addPartition(remotePart); + remoteTbl.setPartitionInfo(new PartitionInfo(PartitionType.RANGE)); + + ReplicaAllocation alloc = new ReplicaAllocation(); + job.resetPartitionForRestore(localTbl, remoteTbl, partName, alloc); + + Partition localPart = remoteTbl.getPartition(partName); + Assert.assertEquals(localPart.getVisibleVersion(), visibleVersion); + Assert.assertEquals(localPart.getNextVersion(), visibleVersion + 1); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org