This is an automated email from the ASF dual-hosted git repository.

w41ter pushed a commit to branch branch-2.0
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/branch-2.0 by this push:
     new f13363a4155 [fix](restore) Reset next version for restored partitions 
(#38344)
f13363a4155 is described below

commit f13363a41554d78ad59fe5b09a0187ddcc2bc8ef
Author: walter <w41te...@gmail.com>
AuthorDate: Thu Jul 25 20:50:01 2024 +0800

    [fix](restore) Reset next version for restored partitions (#38344)
    
    Cherry-pick #38321
---
 .../java/org/apache/doris/backup/RestoreJob.java   | 10 ++++++--
 .../java/org/apache/doris/catalog/OlapTable.java   |  4 ++++
 .../org/apache/doris/backup/RestoreJobTest.java    | 27 ++++++++++++++++++++++
 3 files changed, 39 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 4224dc6c3e7..1b6b4b47072 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;
@@ -1081,8 +1082,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,
-                                               String clusterName, 
ReplicaAllocation replicaAlloc) {
+    @VisibleForTesting
+    protected Partition resetPartitionForRestore(OlapTable localTbl, OlapTable 
remoteTbl, String partName,
+                                                 String clusterName, 
ReplicaAllocation replicaAlloc) {
         Preconditions.checkState(localTbl.getPartition(partName) == null);
         Partition remotePart = remoteTbl.getPartition(partName);
         Preconditions.checkNotNull(remotePart);
@@ -1092,6 +1094,7 @@ public class RestoreJob extends AbstractJob {
 
         // generate new partition id
         long newPartId = env.getNextId();
+        long oldPartId = remotePart.getId();
         remotePart.setIdForRestore(newPartId);
 
         // indexes
@@ -1111,6 +1114,9 @@ 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);
 
         // tablets
         Map<Tag, Integer> nextIndexs = Maps.newHashMap();
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 c3070d903f9..d357b9f93d6 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
@@ -323,6 +323,10 @@ public class OlapTable extends Table {
         }
     }
 
+    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 7e55f94f8d9..5f426aa3311 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

Reply via email to