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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]