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 fe2fdf0d228 [fix](backup) Read BackupMeta with the specified meta
version (#38397)
fe2fdf0d228 is described below
commit fe2fdf0d228cffc80d350691b9709b7a21cb76c1
Author: walter <[email protected]>
AuthorDate: Fri Jul 26 14:37:47 2024 +0800
[fix](backup) Read BackupMeta with the specified meta version (#38397)
Cherry-pick #38370
---
.../org/apache/doris/backup/BackupHandler.java | 32 ++++++++++++----------
.../java/org/apache/doris/backup/BackupMeta.java | 18 +++++++-----
2 files changed, 28 insertions(+), 22 deletions(-)
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
index 08856b8a0a7..9bf06286ba8 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupHandler.java
@@ -64,9 +64,7 @@ import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
-import java.io.ByteArrayInputStream;
import java.io.DataInput;
-import java.io.DataInputStream;
import java.io.DataOutput;
import java.io.File;
import java.io.IOException;
@@ -441,21 +439,25 @@ public class BackupHandler extends MasterDaemon
implements Writable {
// Create a restore job
RestoreJob restoreJob;
if (stmt.isLocal()) {
- ByteArrayInputStream byteArrayInputStream = new
ByteArrayInputStream(stmt.getMeta());
- DataInputStream dataInputStream = new
DataInputStream(byteArrayInputStream);
+ int metaVersion = stmt.getMetaVersion();
+ if (metaVersion == -1) {
+ metaVersion = jobInfo.metaVersion;
+ }
+
+ BackupMeta backupMeta;
try {
- BackupMeta backupMeta = BackupMeta.read(dataInputStream);
- String backupTimestamp =
- TimeUtils.longToTimeString(jobInfo.getBackupTime(),
TimeUtils.DATETIME_FORMAT_WITH_HYPHEN);
- restoreJob = new RestoreJob(stmt.getLabel(), backupTimestamp,
- db.getId(), db.getFullName(), jobInfo,
stmt.allowLoad(), stmt.getReplicaAlloc(),
- stmt.getTimeoutMs(), stmt.getMetaVersion(),
stmt.reserveReplica(),
- stmt.reserveDynamicPartitionEnable(),
stmt.isBeingSynced(),
- env, Repository.KEEP_ON_LOCAL_REPO_ID, backupMeta);
+ backupMeta = BackupMeta.fromBytes(stmt.getMeta(), metaVersion);
} catch (IOException e) {
- LOG.warn("create restore job failed, current meta version {}",
Env.getCurrentEnvJournalVersion(), e);
- throw new DdlException("create restore job failed", e);
- }
+ LOG.warn("read backup meta failed, current meta version {}",
Env.getCurrentEnvJournalVersion(), e);
+ throw new DdlException("read backup meta failed", e);
+ }
+ String backupTimestamp = TimeUtils.longToTimeString(
+ jobInfo.getBackupTime(),
TimeUtils.DATETIME_FORMAT_WITH_HYPHEN);
+ restoreJob = new RestoreJob(stmt.getLabel(), backupTimestamp,
+ db.getId(), db.getFullName(), jobInfo, stmt.allowLoad(),
stmt.getReplicaAlloc(),
+ stmt.getTimeoutMs(), metaVersion, stmt.reserveReplica(),
+ stmt.reserveDynamicPartitionEnable(), stmt.isBeingSynced(),
+ env, Repository.KEEP_ON_LOCAL_REPO_ID, backupMeta);
} else {
restoreJob = new RestoreJob(stmt.getLabel(),
stmt.getBackupTimestamp(),
db.getId(), db.getFullName(), jobInfo, stmt.allowLoad(),
stmt.getReplicaAlloc(),
diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupMeta.java
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupMeta.java
index 42f438a0c22..9e9da7a2764 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupMeta.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupMeta.java
@@ -26,6 +26,7 @@ import org.apache.doris.persist.gson.GsonUtils;
import com.google.common.collect.Maps;
import com.google.gson.annotations.SerializedName;
+import java.io.ByteArrayInputStream;
import java.io.DataInput;
import java.io.DataInputStream;
import java.io.DataOutput;
@@ -34,6 +35,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.List;
import java.util.Map;
@@ -91,11 +93,18 @@ public class BackupMeta implements Writable {
}
public static BackupMeta fromFile(String filePath, int metaVersion) throws
IOException {
- File file = new File(filePath);
+ return fromInputStream(new FileInputStream(filePath), metaVersion);
+ }
+
+ public static BackupMeta fromBytes(byte[] bytes, int metaVersion) throws
IOException {
+ return fromInputStream(new ByteArrayInputStream(bytes), metaVersion);
+ }
+
+ protected static BackupMeta fromInputStream(InputStream stream, int
metaVersion) throws IOException {
MetaContext metaContext = new MetaContext();
metaContext.setMetaVersion(metaVersion);
metaContext.setThreadLocalInfo();
- try (DataInputStream dis = new DataInputStream(new
FileInputStream(file))) {
+ try (DataInputStream dis = new DataInputStream(stream)) {
BackupMeta backupMeta = BackupMeta.read(dis);
return backupMeta;
} finally {
@@ -113,11 +122,6 @@ public class BackupMeta implements Writable {
}
}
- public boolean compatibleWith(BackupMeta other) {
- // TODO
- return false;
- }
-
public static BackupMeta read(DataInput in) throws IOException {
BackupMeta backupMeta = new BackupMeta();
backupMeta.readFields(in);
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]