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 a6ef7e00e4c [fix](restore) Fix view signature #41120 (#41150)
a6ef7e00e4c is described below

commit a6ef7e00e4ce53bc3b4942fcbd804849b189a175
Author: walter <[email protected]>
AuthorDate: Mon Sep 23 22:04:20 2024 +0800

    [fix](restore) Fix view signature #41120 (#41150)
    
    cherry pick from #41120
---
 .../java/org/apache/doris/backup/RestoreJob.java    | 21 ++++++++++++++-------
 .../java/org/apache/doris/catalog/Database.java     |  4 ++++
 .../java/org/apache/doris/catalog/OlapTable.java    |  2 +-
 .../main/java/org/apache/doris/catalog/View.java    |  4 +++-
 .../test_backup_restore_with_view.groovy            | 17 +++++++++++++++++
 5 files changed, 39 insertions(+), 9 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 bad61892b95..a35858e498a 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
@@ -776,16 +776,23 @@ public class RestoreJob extends AbstractJob {
                 if (localTbl != null) {
                     Preconditions.checkState(localTbl.getType() == 
TableType.VIEW);
                     View localView = (View) localTbl;
-                    if 
(!localView.getSignature(BackupHandler.SIGNATURE_VERSION)
-                            
.equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION))) {
-                        status = new Status(ErrCode.COMMON_ERROR, "View "
-                                + 
jobInfo.getAliasByOriginNameIfSet(backupViewName)
-                                + " already exist but with different schema");
-                        return;
+                    String localViewSignature = 
localView.getSignature(BackupHandler.SIGNATURE_VERSION);
+                    // keep compatible with old version, compare the signature 
without reset view def
+                    if 
(!localViewSignature.equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION)))
 {
+                        // reset view def to dest db name and compare 
signature again
+                        String srcDbName = jobInfo.dbName;
+                        remoteView.resetViewDefForRestore(srcDbName, 
db.getName());
+                        if 
(!localViewSignature.equals(remoteView.getSignature(BackupHandler.SIGNATURE_VERSION)))
 {
+                            status = new Status(ErrCode.COMMON_ERROR, "View "
+                                    + 
jobInfo.getAliasByOriginNameIfSet(backupViewName)
+                                    + " already exist but with different 
schema");
+                            return;
+                        }
                     }
                 } else {
                     String srcDbName = jobInfo.dbName;
-                    remoteView.resetIdsForRestore(env, srcDbName, 
db.getFullName());
+                    remoteView.resetViewDefForRestore(srcDbName, db.getName());
+                    remoteView.resetIdsForRestore(env);
                     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 0eed9534f0a..eec5bf2b2a4 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
@@ -213,6 +213,10 @@ public class Database extends MetaObject implements 
Writable, DatabaseIf<Table>
         return fullQualifiedName;
     }
 
+    public String getName() {
+        return ClusterNamespace.getNameFromFullName(fullQualifiedName);
+    }
+
     public void setNameWithLock(String newName) {
         writeLock();
         try {
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 795d1b52d39..48c70917da4 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
@@ -643,7 +643,7 @@ public class OlapTable extends Table implements 
MTMVRelatedTableIf {
                 baseIndexId = newIdxId;
             }
             MaterializedIndexMeta indexMeta = 
origIdxIdToMeta.get(entry.getKey());
-            indexMeta.resetIndexIdForRestore(newIdxId, srcDbName, 
db.getFullName());
+            indexMeta.resetIndexIdForRestore(newIdxId, srcDbName, 
db.getName());
             indexIdToMeta.put(newIdxId, indexMeta);
             indexNameToId.put(entry.getValue(), newIdxId);
         }
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 d9e4ac84d92..54a8f87dc16 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
@@ -244,9 +244,11 @@ public class View extends Table {
         return copied;
     }
 
-    public void resetIdsForRestore(Env env, String srcDbName, String dbName) {
+    public void resetIdsForRestore(Env env) {
         id = env.getNextId();
+    }
 
+    public void resetViewDefForRestore(String srcDbName, String dbName) {
         // the source db name is not setted in old BackupMeta, keep compatible 
with the old one.
         if (srcDbName != null) {
             inlineViewDef = inlineViewDef.replaceAll(srcDbName, dbName);
diff --git 
a/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy 
b/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
index eee4a70c745..4ba7c652be2 100644
--- a/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
+++ b/regression-test/suites/backup_restore/test_backup_restore_with_view.groovy
@@ -93,6 +93,23 @@ suite("test_backup_restore_with_view", "backup_restore") {
     assertTrue(show_view.contains("${tableName}"))
 
 
+    // restore to db1, test the view signature.
+    sql """
+        RESTORE SNAPSHOT ${dbName1}.${snapshotName}
+        FROM `${repoName}`
+        PROPERTIES
+        (
+            "backup_timestamp" = "${snapshot}",
+            "reserve_replica" = "true"
+        )
+    """
+
+    syncer.waitAllRestoreFinish(dbName1)
+    restore_result = sql_return_maparray """ SHOW RESTORE FROM ${dbName1} 
WHERE Label ="${snapshotName}" """
+    restore_result.last()
+    logger.info("show restore result: ${restore_result}")
+    assertTrue(restore_result.last().State == "FINISHED")
+
     sql "DROP TABLE ${dbName}.${tableName} FORCE"
     sql "DROP VIEW ${dbName}.${viewName}"
     sql "DROP DATABASE ${dbName} FORCE"


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to