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

dataroaring 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 2b8c6a08e56 [chore](backup) Fix the db name of the restored view 
(#38075)
2b8c6a08e56 is described below

commit 2b8c6a08e5674fadfedcb4a9e78ba17ec4a428d2
Author: walter <w41te...@gmail.com>
AuthorDate: Thu Jul 18 20:52:43 2024 +0800

    [chore](backup) Fix the db name of the restored view (#38075)
    
    Cherry-pick #37412
    
    Previously, during restore, the database name in the CREATE VIEW
    statement was not modified, causing the restored view to be unviewable
    with the SHOW VIEW command. This PR retains the original cluster's
    database name in the BackupMeta and manually replaces it with the new
    cluster's database name in the CREATE VIEW statement during restore.
---
 .../src/main/java/org/apache/doris/backup/BackupJob.java       |  2 +-
 .../src/main/java/org/apache/doris/backup/BackupMeta.java      | 10 +++++++++-
 .../src/main/java/org/apache/doris/backup/RestoreJob.java      |  3 ++-
 .../src/main/java/org/apache/doris/catalog/Database.java       |  5 +++++
 fe/fe-core/src/main/java/org/apache/doris/catalog/View.java    |  7 ++++++-
 .../test/java/org/apache/doris/backup/BackupHandlerTest.java   |  2 +-
 .../src/test/java/org/apache/doris/backup/RestoreJobTest.java  |  2 +-
 7 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java 
b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
index ec22d6eafc7..5fd4e141262 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/backup/BackupJob.java
@@ -402,7 +402,7 @@ public class BackupJob extends AbstractJob {
             }
         }
 
-        backupMeta = new BackupMeta(copiedTables, copiedResources);
+        backupMeta = new BackupMeta(db.getName(), copiedTables, 
copiedResources);
 
         // send tasks
         for (AgentTask task : batchTask.getAllTasks()) {
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 e22bb7f33ce..42f438a0c22 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
@@ -39,6 +39,8 @@ import java.util.Map;
 
 public class BackupMeta implements Writable {
 
+    @SerializedName(value = "db")
+    private String dbName;
     // tbl name -> tbl
     @SerializedName(value = "tblNameMap")
     private Map<String, Table> tblNameMap = Maps.newHashMap();
@@ -52,7 +54,9 @@ public class BackupMeta implements Writable {
     private BackupMeta() {
     }
 
-    public BackupMeta(List<Table> tables, List<Resource> resources) {
+    public BackupMeta(String dbName, List<Table> tables, List<Resource> 
resources) {
+        this.dbName = dbName;
+
         for (Table table : tables) {
             tblNameMap.put(table.getName(), table);
             tblIdMap.put(table.getId(), table);
@@ -62,6 +66,10 @@ public class BackupMeta implements Writable {
         }
     }
 
+    public String getDbName() {
+        return dbName;
+    }
+
     public Map<String, Table> getTables() {
         return tblNameMap;
     }
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 5812679daaf..4224dc6c3e7 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
@@ -738,7 +738,8 @@ public class RestoreJob extends AbstractJob {
                         return;
                     }
                 } else {
-                    remoteView.resetIdsForRestore(env);
+                    String srcDbName = backupMeta.getDbName();
+                    remoteView.resetIdsForRestore(env, srcDbName, 
db.getFullName());
                     restoredTbls.add(remoteView);
                 }
             }
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
index 9c17f554a8d..816fd021784 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Database.java
@@ -222,6 +222,11 @@ public class Database extends MetaObject implements 
Writable, DatabaseIf<Table>
         return fullQualifiedName;
     }
 
+    public String getName() {
+        String[] strs = fullQualifiedName.split(":");
+        return strs.length == 2 ? strs[1] : strs[0];
+    }
+
     public void setNameWithLock(String newName) {
         writeLock();
         try {
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java 
b/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
index bc2608d7b67..0919ce6c80d 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/View.java
@@ -240,8 +240,13 @@ public class View extends Table {
         return copied;
     }
 
-    public void resetIdsForRestore(Env env) {
+    public void resetIdsForRestore(Env env, String srcDbName, String dbName) {
         id = env.getNextId();
+
+        // the source db name is not setted in old BackupMeta, keep compatible 
with the old one.
+        if (srcDbName != null) {
+            inlineViewDef = inlineViewDef.replaceAll(srcDbName, dbName);
+        }
     }
 
     @Override
diff --git 
a/fe/fe-core/src/test/java/org/apache/doris/backup/BackupHandlerTest.java 
b/fe/fe-core/src/test/java/org/apache/doris/backup/BackupHandlerTest.java
index 97e689b6972..5de2be6c9ee 100644
--- a/fe/fe-core/src/test/java/org/apache/doris/backup/BackupHandlerTest.java
+++ b/fe/fe-core/src/test/java/org/apache/doris/backup/BackupHandlerTest.java
@@ -212,7 +212,7 @@ public class BackupHandlerTest {
                 List<Table> tbls = Lists.newArrayList();
                 tbls.add(tbl);
                 List<Resource> resources = Lists.newArrayList();
-                BackupMeta backupMeta = new BackupMeta(tbls, resources);
+                BackupMeta backupMeta = new BackupMeta(null, tbls, resources);
                 Map<Long, SnapshotInfo> snapshotInfos = Maps.newHashMap();
                 for (Partition part : tbl.getPartitions()) {
                     for (MaterializedIndex idx : 
part.getMaterializedIndices(IndexExtState.VISIBLE)) {
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 d361777fdd5..7e55f94f8d9 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
@@ -252,7 +252,7 @@ public class RestoreJobTest {
         List<Table> tbls = Lists.newArrayList();
         List<Resource> resources = Lists.newArrayList();
         tbls.add(expectedRestoreTbl);
-        backupMeta = new BackupMeta(tbls, resources);
+        backupMeta = new BackupMeta(null, tbls, resources);
     }
 
     @Test


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to