Vallishp commented on code in PR #42946:
URL: https://github.com/apache/doris/pull/42946#discussion_r1827183301
##########
fe/fe-core/src/main/java/org/apache/doris/datasource/InternalCatalog.java:
##########
@@ -601,6 +601,63 @@ public void replayDropDb(String dbName, boolean
isForceDrop, Long recycleTime) t
}
}
+ public void recoverDatabase(String dbName, long dbId, String newDbName)
throws DdlException {
+ // check is new db with same name already exist
+ if (!Strings.isNullOrEmpty(newDbName)) {
+ if (getDb(newDbName).isPresent()) {
+ throw new DdlException("Database[" + newDbName + "] already
exist.");
+ }
+ } else {
+ if (getDb(dbName).isPresent()) {
+ throw new DdlException("Database[" + dbName + "] already
exist.");
+ }
+ }
+
+ Database db = Env.getCurrentRecycleBin().recoverDatabase(dbName, dbId);
+
+ // add db to catalog
+ if (!tryLock(false)) {
+ throw new DdlException("Failed to acquire catalog lock. Try
again");
+ }
+ db.writeLock();
+ List<Table> tableList = db.getTablesOnIdOrder();
+ MetaLockUtils.writeLockTables(tableList);
+ try {
+ if (!Strings.isNullOrEmpty(newDbName)) {
+ if (fullNameToDb.containsKey(newDbName)) {
+ throw new DdlException("Database[" + newDbName + "]
already exist.");
+ // it's ok that we do not put db back to CatalogRecycleBin
+ // cause this db cannot recover any more
+ }
+ } else {
+ if (fullNameToDb.containsKey(db.getFullName())) {
+ throw new DdlException("Database[" + db.getFullName() + "]
already exist.");
+ // it's ok that we do not put db back to CatalogRecycleBin
+ // cause this db cannot recover any more
+ }
+ }
+ if (!Strings.isNullOrEmpty(newDbName)) {
+ try {
+ db.writeUnlock();
+ db.setNameWithLock(newDbName);
+ } finally {
+ db.writeLock();
+ }
+ }
+ fullNameToDb.put(db.getFullName(), db);
+ idToDb.put(db.getId(), db);
+ // log
+ RecoverInfo recoverInfo = new RecoverInfo(db.getId(), -1L, -1L,
newDbName, "", "");
+ Env.getCurrentEnv().getEditLog().logRecoverDb(recoverInfo);
+ db.unmarkDropped();
+ } finally {
+ MetaLockUtils.writeUnlockTables(tableList);
+ db.writeUnlock();
+ unlock();
+ }
+ LOG.info("recover database[{}]", db.getId());
+ }
+
public void recoverDatabase(RecoverDbStmt recoverStmt) throws DdlException
{
// check is new db with same name already exist
String newDbName = recoverStmt.getNewDbName();
Review Comment:
thanks have handled it
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]