[fix](restore) Fix view signature #41120 (#41150)

cherry pick from #41120
This commit is contained in:
walter
2024-09-23 22:04:20 +08:00
committed by GitHub
parent d529f00dc0
commit a6ef7e00e4
5 changed files with 39 additions and 9 deletions

View File

@ -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);
}
}

View File

@ -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 {

View File

@ -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);
}

View File

@ -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);