From 8cefa760ec1d3f0ddf67d37b00bfba7ef57a666b Mon Sep 17 00:00:00 2001 From: morningman Date: Fri, 5 Jun 2020 11:28:46 +0800 Subject: [PATCH 1/2] [Code Refactor] Remove Catalog.getInstance() method Use Catalog.getCurrentCatalog() instead, to avoid potential meta operation error. --- fe/src/main/java/org/apache/doris/PaloFe.java | 4 +- .../java/org/apache/doris/alter/Alter.java | 22 +++++----- .../org/apache/doris/alter/AlterHandler.java | 2 +- .../doris/alter/DecommissionBackendJob.java | 6 +-- .../doris/alter/MaterializedViewHandler.java | 10 ++--- .../org/apache/doris/alter/RollupJob.java | 12 +++--- .../doris/alter/SchemaChangeHandler.java | 8 ++-- .../apache/doris/alter/SchemaChangeJob.java | 18 ++++---- .../org/apache/doris/alter/SystemHandler.java | 16 +++---- .../org/apache/doris/analysis/CastExpr.java | 4 +- .../apache/doris/analysis/DescribeStmt.java | 2 +- .../java/org/apache/doris/analysis/Expr.java | 2 +- .../doris/analysis/FunctionCallExpr.java | 2 +- .../apache/doris/analysis/ShowDataStmt.java | 2 +- .../doris/analysis/ShowPartitionsStmt.java | 2 +- .../org/apache/doris/backup/BlobStorage.java | 2 +- .../org/apache/doris/catalog/BrokerMgr.java | 6 +-- .../org/apache/doris/catalog/Catalog.java | 24 ++++------- .../doris/catalog/CatalogRecycleBin.java | 32 +++++++------- .../doris/catalog/ColocateTableIndex.java | 4 +- .../org/apache/doris/catalog/Database.java | 8 ++-- .../org/apache/doris/catalog/ResourceMgr.java | 4 +- .../apache/doris/catalog/SparkResource.java | 2 +- .../doris/clone/ColocateTableBalancer.java | 2 +- .../clone/DynamicPartitionScheduler.java | 8 ++-- .../apache/doris/clone/TabletSchedCtx.java | 6 +-- .../apache/doris/clone/TabletScheduler.java | 2 +- .../doris/common/proc/BackendsProcDir.java | 2 +- .../apache/doris/common/proc/JobsProcDir.java | 8 ++-- .../apache/doris/common/proc/ProcService.java | 14 +++---- .../apache/doris/common/util/BrokerUtil.java | 2 +- .../doris/common/util/MasterDaemon.java | 2 +- .../consistency/CheckConsistencyJob.java | 6 +-- .../doris/consistency/ConsistencyChecker.java | 2 +- .../main/java/org/apache/doris/ha/BDBHA.java | 2 +- .../doris/ha/BDBStateChangeListener.java | 4 +- .../org/apache/doris/http/BaseAction.java | 2 +- .../apache/doris/http/action/HaAction.java | 18 ++++---- .../doris/http/meta/ColocateMetaService.java | 2 +- .../doris/http/meta/MetaBaseAction.java | 2 +- .../apache/doris/http/meta/MetaService.java | 6 +-- .../http/rest/BootstrapFinishAction.java | 12 +++--- .../doris/http/rest/CancelStreamLoad.java | 2 +- .../doris/http/rest/GetDdlStmtAction.java | 2 +- .../doris/http/rest/GetStreamLoadState.java | 2 +- .../http/rest/MetaReplayerCheckAction.java | 2 +- .../doris/http/rest/MigrationAction.java | 2 +- .../doris/http/rest/RestBaseAction.java | 2 +- .../doris/http/rest/RowCountAction.java | 2 +- .../doris/http/rest/SetConfigAction.java | 2 +- .../doris/http/rest/ShowMetaInfoAction.java | 18 ++++---- .../doris/journal/bdbje/BDBEnvironment.java | 4 +- .../doris/journal/bdbje/BDBJEJournal.java | 12 +++--- .../org/apache/doris/load/AsyncDeleteJob.java | 2 +- .../org/apache/doris/load/DeleteHandler.java | 4 +- .../java/org/apache/doris/load/DeleteJob.java | 2 +- .../java/org/apache/doris/load/DppConfig.java | 4 +- .../org/apache/doris/load/ExportChecker.java | 4 +- .../java/org/apache/doris/load/ExportJob.java | 6 +-- .../java/org/apache/doris/load/ExportMgr.java | 4 +- .../main/java/org/apache/doris/load/Load.java | 42 +++++++++---------- .../org/apache/doris/load/LoadChecker.java | 28 ++++++------- .../org/apache/doris/load/loadv2/LoadJob.java | 2 +- .../apache/doris/load/loadv2/LoadManager.java | 4 +- .../doris/load/loadv2/LoadingTaskPlanner.java | 2 +- .../load/routineload/KafkaRoutineLoadJob.java | 2 +- .../load/routineload/RoutineLoadJob.java | 2 +- .../load/routineload/RoutineLoadManager.java | 4 +- .../routineload/RoutineLoadScheduler.java | 2 +- .../routineload/RoutineLoadTaskScheduler.java | 2 +- .../org/apache/doris/master/Checkpoint.java | 6 +-- .../org/apache/doris/master/MasterImpl.java | 34 +++++++-------- .../apache/doris/master/ReportHandler.java | 24 +++++------ .../org/apache/doris/metric/MetricRepo.java | 14 +++---- .../doris/metric/PrometheusMetricVisitor.java | 2 +- .../org/apache/doris/mysql/MysqlProto.java | 4 +- .../org/apache/doris/mysql/MysqlServer.java | 2 +- .../doris/mysql/nio/AcceptListener.java | 2 +- .../apache/doris/planner/BrokerScanNode.java | 2 +- .../org/apache/doris/planner/ExportSink.java | 2 +- .../org/apache/doris/qe/ConnectProcessor.java | 6 +-- .../org/apache/doris/qe/JournalObserver.java | 2 +- .../org/apache/doris/qe/MultiLoadMgr.java | 6 +-- .../org/apache/doris/qe/ShowExecutor.java | 26 ++++++------ .../org/apache/doris/qe/StmtExecutor.java | 6 +-- .../java/org/apache/doris/qe/VariableMgr.java | 2 +- .../doris/service/FrontendServiceImpl.java | 20 ++++----- .../java/org/apache/doris/system/Backend.java | 2 +- .../org/apache/doris/system/HeartbeatMgr.java | 6 +-- .../doris/system/SystemInfoService.java | 20 ++++----- .../doris/task/ExportExportingTask.java | 2 +- .../apache/doris/task/ExportPendingTask.java | 2 +- .../org/apache/doris/task/LoadEtlTask.java | 4 +- .../apache/doris/task/LoadPendingTask.java | 4 +- .../apache/doris/task/PullLoadEtlTask.java | 2 +- .../doris/task/PullLoadTaskPlanner.java | 2 +- .../doris/task/UpdateTabletMetaInfoTask.java | 2 +- .../transaction/DatabaseTransactionMgr.java | 2 +- .../transaction/GlobalTransactionMgr.java | 2 +- .../apache/doris/alter/RollupJobV2Test.java | 8 ++-- .../doris/alter/SchemaChangeJobV2Test.java | 10 ++--- .../doris/analysis/ShowDataStmtTest.java | 2 +- .../org/apache/doris/catalog/CatalogTest.java | 12 +++--- .../doris/catalog/ColocateTableTest.java | 2 +- .../apache/doris/catalog/CreateTableTest.java | 4 +- .../apache/doris/catalog/DatabaseTest.java | 2 +- .../doris/cluster/SystemInfoServiceTest.java | 2 +- .../common/proc/BackendProcNodeTest.java | 2 +- .../common/proc/BackendsProcDirTest.java | 2 +- .../apache/doris/load/LoadCheckerTest.java | 2 +- .../RoutineLoadTaskSchedulerTest.java | 2 +- .../apache/doris/mysql/MysqlProtoTest.java | 2 +- .../org/apache/doris/qe/CoordinatorTest.java | 2 +- .../org/apache/doris/qe/ShowExecutorTest.java | 2 +- .../apache/doris/qe/SimpleSchedulerTest.java | 2 +- .../org/apache/doris/qe/StmtExecutorTest.java | 4 +- .../org/apache/doris/qe/VariableMgrTest.java | 2 +- .../apache/doris/system/HeartbeatMgrTest.java | 2 +- .../apache/doris/task/LoadEtlTaskTest.java | 2 +- .../doris/task/LoadPendingTaskTest.java | 2 +- 120 files changed, 368 insertions(+), 374 deletions(-) diff --git a/fe/src/main/java/org/apache/doris/PaloFe.java b/fe/src/main/java/org/apache/doris/PaloFe.java index adf8ea3a85ebf0..b9c2217ccf6ca9 100644 --- a/fe/src/main/java/org/apache/doris/PaloFe.java +++ b/fe/src/main/java/org/apache/doris/PaloFe.java @@ -104,8 +104,8 @@ public static void start(String dorisHomeDir, String pidDir, String[] args) { ExecuteEnv.setup(); // init catalog and wait it be ready - Catalog.getInstance().initialize(args); - Catalog.getInstance().waitForReady(); + Catalog.getCurrentCatalog().initialize(args); + Catalog.getCurrentCatalog().waitForReady(); // init and start: // 1. QeService for MySQL Server diff --git a/fe/src/main/java/org/apache/doris/alter/Alter.java b/fe/src/main/java/org/apache/doris/alter/Alter.java index 9711065282eb2a..017d4b1fa0c053 100644 --- a/fe/src/main/java/org/apache/doris/alter/Alter.java +++ b/fe/src/main/java/org/apache/doris/alter/Alter.java @@ -85,7 +85,7 @@ public void processCreateMaterializedView(CreateMaterializedViewStmt stmt) String tableName = stmt.getBaseIndexName(); // check db String dbName = stmt.getDBName(); - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } @@ -113,7 +113,7 @@ public void processCreateMaterializedView(CreateMaterializedViewStmt stmt) public void processDropMaterializedView(DropMaterializedViewStmt stmt) throws DdlException, MetaNotFoundException { // check db String dbName = stmt.getTableName().getDb(); - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } @@ -150,7 +150,7 @@ public void processAlterTable(AlterTableStmt stmt) throws UserException { String dbName = dbTableName.getDb(); final String clusterName = stmt.getClusterName(); - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } @@ -198,7 +198,7 @@ public void processAlterTable(AlterTableStmt stmt) throws UserException { if (!((DropPartitionClause) alterClause).isTempPartition()) { DynamicPartitionUtil.checkAlterAllowed((OlapTable) db.getTable(tableName)); } - Catalog.getInstance().dropPartition(db, olapTable, ((DropPartitionClause) alterClause)); + Catalog.getCurrentCatalog().dropPartition(db, olapTable, ((DropPartitionClause) alterClause)); } else if (alterClause instanceof ReplacePartitionClause) { Catalog.getCurrentCatalog().replaceTempPartition(db, tableName, (ReplacePartitionClause) alterClause); } else if (alterClause instanceof ModifyPartitionClause) { @@ -208,7 +208,7 @@ public void processAlterTable(AlterTableStmt stmt) throws UserException { needProcessOutsideDatabaseLock = true; } else { String partitionName = clause.getPartitionName(); - Catalog.getInstance().modifyPartitionProperty(db, olapTable, partitionName, properties); + Catalog.getCurrentCatalog().modifyPartitionProperty(db, olapTable, partitionName, properties); } } else if (alterClause instanceof AddPartitionClause) { needProcessOutsideDatabaseLock = true; @@ -267,7 +267,7 @@ public void processAlterView(AlterViewStmt stmt, ConnectContext ctx) throws User TableName dbTableName = stmt.getTbl(); String dbName = dbTableName.getDb(); - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } @@ -306,7 +306,7 @@ private void modifyViewDef(Database db, View view, String inlineViewDef, long sq db.createTable(view); AlterViewInfo alterViewInfo = new AlterViewInfo(db.getId(), view.getId(), inlineViewDef, newFullSchema, sqlMode); - Catalog.getInstance().getEditLog().logModifyViewDef(alterViewInfo); + Catalog.getCurrentCatalog().getEditLog().logModifyViewDef(alterViewInfo); LOG.info("modify view[{}] definition to {}", viewName, inlineViewDef); } @@ -345,16 +345,16 @@ public void processAlterCluster(AlterSystemStmt stmt) throws UserException { private void processRename(Database db, OlapTable table, List alterClauses) throws DdlException { for (AlterClause alterClause : alterClauses) { if (alterClause instanceof TableRenameClause) { - Catalog.getInstance().renameTable(db, table, (TableRenameClause) alterClause); + Catalog.getCurrentCatalog().renameTable(db, table, (TableRenameClause) alterClause); break; } else if (alterClause instanceof RollupRenameClause) { - Catalog.getInstance().renameRollup(db, table, (RollupRenameClause) alterClause); + Catalog.getCurrentCatalog().renameRollup(db, table, (RollupRenameClause) alterClause); break; } else if (alterClause instanceof PartitionRenameClause) { - Catalog.getInstance().renamePartition(db, table, (PartitionRenameClause) alterClause); + Catalog.getCurrentCatalog().renamePartition(db, table, (PartitionRenameClause) alterClause); break; } else if (alterClause instanceof ColumnRenameClause) { - Catalog.getInstance().renameColumn(db, table, (ColumnRenameClause) alterClause); + Catalog.getCurrentCatalog().renameColumn(db, table, (ColumnRenameClause) alterClause); break; } else { Preconditions.checkState(false); diff --git a/fe/src/main/java/org/apache/doris/alter/AlterHandler.java b/fe/src/main/java/org/apache/doris/alter/AlterHandler.java index 86d0879998ddd0..372ff2b7f11f3b 100644 --- a/fe/src/main/java/org/apache/doris/alter/AlterHandler.java +++ b/fe/src/main/java/org/apache/doris/alter/AlterHandler.java @@ -466,7 +466,7 @@ public void handleFinishAlterTask(AlterReplicaTask task) throws MetaNotFoundExce replica.getDataSize(), replica.getRowCount(), replica.getLastFailedVersion(), replica.getLastFailedVersionHash(), replica.getLastSuccessVersion(), replica.getLastSuccessVersionHash()); - Catalog.getInstance().getEditLog().logUpdateReplica(info); + Catalog.getCurrentCatalog().getEditLog().logUpdateReplica(info); } LOG.info("after handle alter task tablet: {}, replica: {}", task.getSignature(), replica); diff --git a/fe/src/main/java/org/apache/doris/alter/DecommissionBackendJob.java b/fe/src/main/java/org/apache/doris/alter/DecommissionBackendJob.java index 0aae302c5447ac..aa72d838985690 100644 --- a/fe/src/main/java/org/apache/doris/alter/DecommissionBackendJob.java +++ b/fe/src/main/java/org/apache/doris/alter/DecommissionBackendJob.java @@ -225,7 +225,7 @@ public synchronized int tryFinishJob() { if (decommissionType == DecommissionType.ClusterDecommission) { for (String clusterName : clusterBackendsMap.keySet()) { final Map idToBackend = clusterBackendsMap.get(clusterName); - final Cluster cluster = Catalog.getInstance().getCluster(clusterName); + final Cluster cluster = Catalog.getCurrentCatalog().getCluster(clusterName); List backendList = Lists.newArrayList(); for (long id : idToBackend.keySet()) { final Backend backend = idToBackend.get(id); @@ -236,7 +236,7 @@ public synchronized int tryFinishJob() { cluster.removeBackend(id); } BackendIdsUpdateInfo updateInfo = new BackendIdsUpdateInfo(backendList); - Catalog.getInstance().getEditLog().logUpdateClusterAndBackendState(updateInfo); + Catalog.getCurrentCatalog().getEditLog().logUpdateClusterAndBackendState(updateInfo); } } } @@ -244,7 +244,7 @@ public synchronized int tryFinishJob() { this.finishedTime = System.currentTimeMillis(); this.state = JobState.FINISHED; - Catalog.getInstance().getEditLog().logFinishDecommissionBackend(this); + Catalog.getCurrentCatalog().getEditLog().logFinishDecommissionBackend(this); LOG.info("finished {} decommission {} backends: {}", decommissionType.toString(), allClusterBackendIds.size(), getBackendIdsString()); diff --git a/fe/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java b/fe/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java index 1d3fb3ae5795be..37136a00dd2808 100644 --- a/fe/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java +++ b/fe/src/main/java/org/apache/doris/alter/MaterializedViewHandler.java @@ -679,7 +679,7 @@ public void processBatchDropRollup(List dropRollupClauses, Database } // batch log drop rollup operation - EditLog editLog = Catalog.getInstance().getEditLog(); + EditLog editLog = Catalog.getCurrentCatalog().getEditLog(); long dbId = db.getId(); long tableId = olapTable.getId(); editLog.logBatchDropRollup(new BatchDropInfo(dbId, tableId, indexIdSet)); @@ -699,7 +699,7 @@ public void processDropMaterializedView(DropMaterializedViewStmt dropMaterialize // Step2; drop data in memory long mvIndexId = dropMaterializedView(mvName, olapTable); // Step3: log drop mv operation - EditLog editLog = Catalog.getInstance().getEditLog(); + EditLog editLog = Catalog.getCurrentCatalog().getEditLog(); editLog.logDropRollup(new DropInfo(db.getId(), olapTable.getId(), mvIndexId)); LOG.info("finished drop materialized view [{}] in table [{}]", mvName, olapTable.getName()); } catch (MetaNotFoundException e) { @@ -1009,7 +1009,7 @@ private void runOldAlterJob() { // handle cancelled rollup jobs for (AlterJob rollupJob : cancelledJobs) { - Database db = Catalog.getInstance().getDb(rollupJob.getDbId()); + Database db = Catalog.getCurrentCatalog().getDb(rollupJob.getDbId()); if (db == null) { cancelInternal(rollupJob, null, null); continue; @@ -1034,7 +1034,7 @@ private void runOldAlterJob() { // then schema change job will be failed. alterJob.finishJob(); jobDone(alterJob); - Catalog.getInstance().getEditLog().logFinishRollup((RollupJob) alterJob); + Catalog.getCurrentCatalog().getEditLog().logFinishRollup((RollupJob) alterJob); } } @@ -1133,7 +1133,7 @@ public void cancel(CancelStmt stmt) throws DdlException { Preconditions.checkState(!Strings.isNullOrEmpty(dbName)); Preconditions.checkState(!Strings.isNullOrEmpty(tableName)); - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } diff --git a/fe/src/main/java/org/apache/doris/alter/RollupJob.java b/fe/src/main/java/org/apache/doris/alter/RollupJob.java index 746bb76f9a137a..63f5a167a2a516 100644 --- a/fe/src/main/java/org/apache/doris/alter/RollupJob.java +++ b/fe/src/main/java/org/apache/doris/alter/RollupJob.java @@ -339,7 +339,7 @@ public int checkOrResendClearTasks() { if (!clearFailed && batchClearAlterTask != null) { return 1; } - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { cancelMsg = "db[" + dbId + "] does not exist"; LOG.warn(cancelMsg); @@ -405,7 +405,7 @@ public boolean sendTasks() { // here we just rejoin tasks to AgentTaskQueue. // task report process will later resend these tasks - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { cancelMsg = "db[" + dbId + "] does not exist"; LOG.warn(cancelMsg); @@ -512,7 +512,7 @@ public synchronized void cancel(OlapTable olapTable, String msg) { this.finishedTime = System.currentTimeMillis(); // log - Catalog.getInstance().getEditLog().logCancelRollup(this); + Catalog.getCurrentCatalog().getEditLog().logCancelRollup(this); LOG.debug("cancel rollup job[{}] finished. because: {}", tableId, cancelMsg); } @@ -621,7 +621,7 @@ public int tryFinishJob() { return 0; } - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { cancelMsg = "Db[" + dbId + "] does not exist"; LOG.warn(cancelMsg); @@ -760,7 +760,7 @@ public int tryFinishJob() { db.writeUnlock(); } - Catalog.getInstance().getEditLog().logFinishingRollup(this); + Catalog.getCurrentCatalog().getEditLog().logFinishingRollup(this); LOG.info("rollup job[{}] is finishing.", this.getTableId()); return 1; @@ -938,7 +938,7 @@ public void replayCancel(Database db) { @Override public void finishJob() { - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { cancelMsg = String.format("database %d does not exist", dbId); LOG.warn(cancelMsg); diff --git a/fe/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java b/fe/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java index 8b0431489a7d4f..3e5b71d9473910 100644 --- a/fe/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java +++ b/fe/src/main/java/org/apache/doris/alter/SchemaChangeHandler.java @@ -1156,7 +1156,7 @@ private void createJob(long dbId, OlapTable olapTable, Map> jobInfos, OlapTable tbl) { indexState.put(indexId, idxState); - if (Catalog.getInstance().isMaster() && state == JobState.RUNNING && totalReplicaNum != 0) { + if (Catalog.getCurrentCatalog().isMaster() && state == JobState.RUNNING && totalReplicaNum != 0) { indexProgress.put(indexId, (finishedReplicaNum * 100 / totalReplicaNum) + "%"); } else { indexProgress.put(indexId, "0%"); diff --git a/fe/src/main/java/org/apache/doris/alter/SystemHandler.java b/fe/src/main/java/org/apache/doris/alter/SystemHandler.java index 8407a090720785..2d368f3ed7158d 100644 --- a/fe/src/main/java/org/apache/doris/alter/SystemHandler.java +++ b/fe/src/main/java/org/apache/doris/alter/SystemHandler.java @@ -140,7 +140,7 @@ public synchronized void process(List alterClauses, String clusterN } if (!Strings.isNullOrEmpty(destClusterName) - && Catalog.getInstance().getCluster(destClusterName) == null) { + && Catalog.getCurrentCatalog().getCluster(destClusterName) == null) { throw new DdlException("Cluster: " + destClusterName + " does not exist."); } Catalog.getCurrentSystemInfo().addBackends(addBackendClause.getHostPortPairs(), @@ -172,22 +172,22 @@ public synchronized void process(List alterClauses, String clusterN } else if (alterClause instanceof AddObserverClause) { AddObserverClause clause = (AddObserverClause) alterClause; - Catalog.getInstance().addFrontend(FrontendNodeType.OBSERVER, clause.getHost(), clause.getPort()); + Catalog.getCurrentCatalog().addFrontend(FrontendNodeType.OBSERVER, clause.getHost(), clause.getPort()); } else if (alterClause instanceof DropObserverClause) { DropObserverClause clause = (DropObserverClause) alterClause; - Catalog.getInstance().dropFrontend(FrontendNodeType.OBSERVER, clause.getHost(), clause.getPort()); + Catalog.getCurrentCatalog().dropFrontend(FrontendNodeType.OBSERVER, clause.getHost(), clause.getPort()); } else if (alterClause instanceof AddFollowerClause) { AddFollowerClause clause = (AddFollowerClause) alterClause; - Catalog.getInstance().addFrontend(FrontendNodeType.FOLLOWER, clause.getHost(), clause.getPort()); + Catalog.getCurrentCatalog().addFrontend(FrontendNodeType.FOLLOWER, clause.getHost(), clause.getPort()); } else if (alterClause instanceof DropFollowerClause) { DropFollowerClause clause = (DropFollowerClause) alterClause; - Catalog.getInstance().dropFrontend(FrontendNodeType.FOLLOWER, clause.getHost(), clause.getPort()); + Catalog.getCurrentCatalog().dropFrontend(FrontendNodeType.FOLLOWER, clause.getHost(), clause.getPort()); } else if (alterClause instanceof ModifyBrokerClause) { ModifyBrokerClause clause = (ModifyBrokerClause) alterClause; - Catalog.getInstance().getBrokerMgr().execute(clause); + Catalog.getCurrentCatalog().getBrokerMgr().execute(clause); } else if (alterClause instanceof AlterLoadErrorUrlClause) { AlterLoadErrorUrlClause clause = (AlterLoadErrorUrlClause) alterClause; - Catalog.getInstance().getLoadInstance().setLoadErrorHubInfo(clause.getProperties()); + Catalog.getCurrentCatalog().getLoadInstance().setLoadErrorHubInfo(clause.getProperties()); } else { Preconditions.checkState(false, alterClause.getClass()); } @@ -254,7 +254,7 @@ public synchronized void cancel(CancelStmt stmt) throws DdlException { for (Backend backend : backends) { if (backend.setDecommissioned(false)) { - Catalog.getInstance().getEditLog().logBackendStateChange(backend); + Catalog.getCurrentCatalog().getEditLog().logBackendStateChange(backend); } else { LOG.info("backend is not decommissioned[{}]", backend.getHost()); } diff --git a/fe/src/main/java/org/apache/doris/analysis/CastExpr.java b/fe/src/main/java/org/apache/doris/analysis/CastExpr.java index e9f9cd80570a6b..f8b4177721b086 100644 --- a/fe/src/main/java/org/apache/doris/analysis/CastExpr.java +++ b/fe/src/main/java/org/apache/doris/analysis/CastExpr.java @@ -185,10 +185,10 @@ public void analyze() throws AnalysisException { FunctionName fnName = new FunctionName(getFnName(type)); Function searchDesc = new Function(fnName, collectChildReturnTypes(), Type.INVALID, false); if (isImplicit) { - fn = Catalog.getInstance().getFunction( + fn = Catalog.getCurrentCatalog().getFunction( searchDesc, Function.CompareMode.IS_NONSTRICT_SUPERTYPE_OF); } else { - fn = Catalog.getInstance().getFunction( + fn = Catalog.getCurrentCatalog().getFunction( searchDesc, Function.CompareMode.IS_IDENTICAL); } diff --git a/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java b/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java index ca350f17201a35..368a7c786c0f9f 100644 --- a/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java +++ b/fe/src/main/java/org/apache/doris/analysis/DescribeStmt.java @@ -105,7 +105,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException, UserException { dbTableName.getTbl()); } - Database db = Catalog.getInstance().getDb(dbTableName.getDb()); + Database db = Catalog.getCurrentCatalog().getDb(dbTableName.getDb()); if (db == null) { ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, dbTableName.getDb()); } diff --git a/fe/src/main/java/org/apache/doris/analysis/Expr.java b/fe/src/main/java/org/apache/doris/analysis/Expr.java index dbac37437473e7..c605e49cd6fba0 100644 --- a/fe/src/main/java/org/apache/doris/analysis/Expr.java +++ b/fe/src/main/java/org/apache/doris/analysis/Expr.java @@ -1404,7 +1404,7 @@ protected Function getBuiltinFunction( throws AnalysisException { FunctionName fnName = new FunctionName(name); Function searchDesc = new Function(fnName, argTypes, Type.INVALID, false); - return Catalog.getInstance().getFunction(searchDesc, mode); + return Catalog.getCurrentCatalog().getFunction(searchDesc, mode); } /** diff --git a/fe/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java b/fe/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java index 5709e04c4af907..174b41025c97f5 100644 --- a/fe/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java +++ b/fe/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java @@ -571,7 +571,7 @@ public void analyzeImpl(Analyzer analyzer) throws AnalysisException { ConnectContext.get(), dbName, PrivPredicate.SELECT)) { ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR, "SELECT"); } - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db != null) { Function searchDesc = new Function( fnName, collectChildReturnTypes(), Type.INVALID, false); diff --git a/fe/src/main/java/org/apache/doris/analysis/ShowDataStmt.java b/fe/src/main/java/org/apache/doris/analysis/ShowDataStmt.java index 8a1eee6c932ab7..fd34bf4d25ffb8 100644 --- a/fe/src/main/java/org/apache/doris/analysis/ShowDataStmt.java +++ b/fe/src/main/java/org/apache/doris/analysis/ShowDataStmt.java @@ -89,7 +89,7 @@ public void analyze(Analyzer analyzer) throws AnalysisException, UserException { dbName = ClusterNamespace.getFullName(getClusterName(), dbName); } - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } diff --git a/fe/src/main/java/org/apache/doris/analysis/ShowPartitionsStmt.java b/fe/src/main/java/org/apache/doris/analysis/ShowPartitionsStmt.java index 73e7671b84f352..6da48376ccc7da 100644 --- a/fe/src/main/java/org/apache/doris/analysis/ShowPartitionsStmt.java +++ b/fe/src/main/java/org/apache/doris/analysis/ShowPartitionsStmt.java @@ -110,7 +110,7 @@ public void analyze(Analyzer analyzer) throws UserException { ConnectContext.get().getRemoteIP(), tableName); } - Database db = Catalog.getInstance().getDb(dbName); + Database db = Catalog.getCurrentCatalog().getDb(dbName); if (db == null) { ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, dbName); } diff --git a/fe/src/main/java/org/apache/doris/backup/BlobStorage.java b/fe/src/main/java/org/apache/doris/backup/BlobStorage.java index 13781117b81dde..77be204796163f 100644 --- a/fe/src/main/java/org/apache/doris/backup/BlobStorage.java +++ b/fe/src/main/java/org/apache/doris/backup/BlobStorage.java @@ -646,7 +646,7 @@ private Status getBroker(Pair result FsBroker broker = null; try { String localIP = FrontendOptions.getLocalHostAddress(); - broker = Catalog.getInstance().getBrokerMgr().getBroker(brokerName, localIP); + broker = Catalog.getCurrentCatalog().getBrokerMgr().getBroker(brokerName, localIP); } catch (AnalysisException e) { return new Status(ErrCode.COMMON_ERROR, "failed to get a broker address: " + e.getMessage()); } diff --git a/fe/src/main/java/org/apache/doris/catalog/BrokerMgr.java b/fe/src/main/java/org/apache/doris/catalog/BrokerMgr.java index 7873babb8c4ce4..133a018d1f6978 100644 --- a/fe/src/main/java/org/apache/doris/catalog/BrokerMgr.java +++ b/fe/src/main/java/org/apache/doris/catalog/BrokerMgr.java @@ -198,7 +198,7 @@ public void addBrokers(String name, Collection> addresses) } addedBrokerAddress.add(new FsBroker(pair.first, pair.second)); } - Catalog.getInstance().getEditLog().logAddBroker(new ModifyBrokerInfo(name, addedBrokerAddress)); + Catalog.getCurrentCatalog().getEditLog().logAddBroker(new ModifyBrokerInfo(name, addedBrokerAddress)); for (FsBroker address : addedBrokerAddress) { brokerAddrsMap.put(address.ip, address); } @@ -250,7 +250,7 @@ public void dropBrokers(String name, Collection> addresses throw new DdlException("Broker(" + pair.first + ":" + pair.second + ") has not in brokers."); } } - Catalog.getInstance().getEditLog().logDropBroker(new ModifyBrokerInfo(name, dropedAddressList)); + Catalog.getCurrentCatalog().getEditLog().logDropBroker(new ModifyBrokerInfo(name, dropedAddressList)); for (FsBroker address : dropedAddressList) { brokerAddrsMap.remove(address.ip, address); } @@ -281,7 +281,7 @@ public void dropAllBroker(String name) throws DdlException { if (!brokersMap.containsKey(name)) { throw new DdlException("Unknown broker name(" + name + ")"); } - Catalog.getInstance().getEditLog().logDropAllBroker(name); + Catalog.getCurrentCatalog().getEditLog().logDropAllBroker(name); brokersMap.remove(name); brokerListMap.remove(name); } finally { diff --git a/fe/src/main/java/org/apache/doris/catalog/Catalog.java b/fe/src/main/java/org/apache/doris/catalog/Catalog.java index cf95e6ddbbc86a..7391b32861f3eb 100755 --- a/fe/src/main/java/org/apache/doris/catalog/Catalog.java +++ b/fe/src/main/java/org/apache/doris/catalog/Catalog.java @@ -202,9 +202,8 @@ import org.apache.doris.thrift.TStorageFormat; import org.apache.doris.thrift.TStorageMedium; import org.apache.doris.thrift.TStorageType; -import org.apache.doris.thrift.TTaskType; import org.apache.doris.thrift.TTabletType; - +import org.apache.doris.thrift.TTaskType; import org.apache.doris.transaction.GlobalTransactionMgr; import org.apache.doris.transaction.PublishVersionDaemon; @@ -542,11 +541,6 @@ public static void destroyCheckpoint() { } } - // use this to get real Catalog instance - public static Catalog getInstance() { - return SingletonHolder.INSTANCE; - } - // use this to get CheckPoint Catalog instance public static Catalog getCheckpoint() { if (CHECKPOINT == null) { @@ -3601,7 +3595,7 @@ private void createOlapTable(Database db, CreateTableStmt stmt) throws DdlExcept TableIndexes indexes = new TableIndexes(stmt.getIndexes()); // create table - long tableId = Catalog.getInstance().getNextId(); + long tableId = Catalog.getCurrentCatalog().getNextId(); OlapTable olapTable = new OlapTable(tableId, tableName, baseSchema, keysType, partitionInfo, distributionInfo, indexes); olapTable.setComment(stmt.getComment()); @@ -3855,7 +3849,7 @@ private void createMysqlTable(Database db, CreateTableStmt stmt) throws DdlExcep List columns = stmt.getColumns(); - long tableId = Catalog.getInstance().getNextId(); + long tableId = Catalog.getCurrentCatalog().getNextId(); MysqlTable mysqlTable = new MysqlTable(tableId, tableName, columns, stmt.getProperties()); mysqlTable.setComment(stmt.getComment()); if (!db.createTableWithLock(mysqlTable, false, stmt.isSetIfNotExists())) { @@ -3885,7 +3879,7 @@ private Table createEsTable(Database db, CreateTableStmt stmt) throws DdlExcepti partitionInfo = new SinglePartitionInfo(); } - long tableId = Catalog.getInstance().getNextId(); + long tableId = Catalog.getCurrentCatalog().getNextId(); EsTable esTable = new EsTable(tableId, tableName, baseSchema, stmt.getProperties(), partitionInfo); esTable.setComment(stmt.getComment()); @@ -3901,7 +3895,7 @@ private void createBrokerTable(Database db, CreateTableStmt stmt) throws DdlExce List columns = stmt.getColumns(); - long tableId = Catalog.getInstance().getNextId(); + long tableId = Catalog.getCurrentCatalog().getNextId(); BrokerTable brokerTable = new BrokerTable(tableId, tableName, columns, stmt.getProperties()); brokerTable.setComment(stmt.getComment()); brokerTable.setBrokerProperties(stmt.getExtProperties()); @@ -4206,7 +4200,7 @@ private void createTablets(String clusterName, MaterializedIndex index, ReplicaS GroupId groupId = null; if (colocateIndex.isColocateTable(tabletMeta.getTableId())) { // if this is a colocate table, try to get backend seqs from colocation index. - Database db = Catalog.getInstance().getDb(tabletMeta.getDbId()); + Database db = Catalog.getCurrentCatalog().getDb(tabletMeta.getDbId()); groupId = colocateIndex.getGroup(tabletMeta.getTableId()); // Use db write lock here to make sure the backendsPerBucketSeq is consistent when the backendsPerBucketSeq is updating. // This lock will release very fast. @@ -5428,7 +5422,7 @@ public void createView(CreateViewStmt stmt) throws DdlException { List columns = stmt.getColumns(); - long tableId = Catalog.getInstance().getNextId(); + long tableId = Catalog.getCurrentCatalog().getNextId(); View newView = new View(tableId, tableName, columns); newView.setComment(stmt.getComment()); newView.setInlineViewDefWithSqlMode(stmt.getInlineViewDef(), @@ -6017,8 +6011,8 @@ public long loadCluster(DataInputStream dis, long checksum) throws IOException, InfoSchemaDb db; // Use real Catalog instance to avoid InfoSchemaDb id continuously increment // when checkpoint thread load image. - if (Catalog.getInstance().getFullNameToDb().containsKey(dbName)) { - db = (InfoSchemaDb)Catalog.getInstance().getFullNameToDb().get(dbName); + if (Catalog.getCurrentCatalog().getFullNameToDb().containsKey(dbName)) { + db = (InfoSchemaDb)Catalog.getCurrentCatalog().getFullNameToDb().get(dbName); } else { db = new InfoSchemaDb(cluster.getName()); db.setClusterName(cluster.getName()); diff --git a/fe/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java b/fe/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java index 230790855df9ea..ed993b54a65654 100644 --- a/fe/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java +++ b/fe/src/main/java/org/apache/doris/catalog/CatalogRecycleBin.java @@ -148,16 +148,16 @@ private synchronized void eraseDatabase(long currentTimeMs) { idToRecycleTime.remove(entry.getKey()); // remove jobs - Catalog.getInstance().getLoadInstance().removeDbLoadJob(db.getId()); - Catalog.getInstance().getLoadInstance().removeDbDeleteJob(db.getId()); - Catalog.getInstance().getSchemaChangeHandler().removeDbAlterJob(db.getId()); - Catalog.getInstance().getRollupHandler().removeDbAlterJob(db.getId()); + Catalog.getCurrentCatalog().getLoadInstance().removeDbLoadJob(db.getId()); + Catalog.getCurrentCatalog().getLoadInstance().removeDbDeleteJob(db.getId()); + Catalog.getCurrentCatalog().getSchemaChangeHandler().removeDbAlterJob(db.getId()); + Catalog.getCurrentCatalog().getRollupHandler().removeDbAlterJob(db.getId()); // remove database transaction manager - Catalog.getInstance().getGlobalTransactionMgr().removeDatabaseTransactionMgr(db.getId()); + Catalog.getCurrentCatalog().getGlobalTransactionMgr().removeDatabaseTransactionMgr(db.getId()); // log - Catalog.getInstance().getEditLog().logEraseDb(entry.getKey()); + Catalog.getCurrentCatalog().getEditLog().logEraseDb(entry.getKey()); LOG.info("erase db[{}]", entry.getKey()); } } @@ -186,13 +186,13 @@ public synchronized void replayEraseDatabase(long dbId) { idToRecycleTime.remove(dbId); // remove jobs - Catalog.getInstance().getLoadInstance().removeDbLoadJob(dbId); - Catalog.getInstance().getLoadInstance().removeDbDeleteJob(dbId); - Catalog.getInstance().getSchemaChangeHandler().removeDbAlterJob(dbId); - Catalog.getInstance().getRollupHandler().removeDbAlterJob(dbId); + Catalog.getCurrentCatalog().getLoadInstance().removeDbLoadJob(dbId); + Catalog.getCurrentCatalog().getLoadInstance().removeDbDeleteJob(dbId); + Catalog.getCurrentCatalog().getSchemaChangeHandler().removeDbAlterJob(dbId); + Catalog.getCurrentCatalog().getRollupHandler().removeDbAlterJob(dbId); // remove database transaction manager - Catalog.getInstance().getGlobalTransactionMgr().removeDatabaseTransactionMgr(dbId); + Catalog.getCurrentCatalog().getGlobalTransactionMgr().removeDatabaseTransactionMgr(dbId); LOG.info("replay erase db[{}]", dbId); } @@ -214,7 +214,7 @@ private synchronized void eraseTable(long currentTimeMs) { idToRecycleTime.remove(tableId); // log - Catalog.getInstance().getEditLog().logEraseTable(tableId); + Catalog.getCurrentCatalog().getEditLog().logEraseTable(tableId); LOG.info("erase table[{}]", tableId); } } // end for tables @@ -328,7 +328,7 @@ private synchronized void erasePartition(long currentTimeMs) { idToRecycleTime.remove(partitionId); // log - Catalog.getInstance().getEditLog().logErasePartition(partitionId); + Catalog.getCurrentCatalog().getEditLog().logErasePartition(partitionId); LOG.info("erase partition[{}]", partitionId); } } // end for partitions @@ -469,7 +469,7 @@ public synchronized boolean recoverTable(Database db, String tableName) { // log RecoverInfo recoverInfo = new RecoverInfo(dbId, table.getId(), -1L); - Catalog.getInstance().getEditLog().logRecoverTable(recoverInfo); + Catalog.getCurrentCatalog().getEditLog().logRecoverTable(recoverInfo); LOG.info("recover db[{}] with table[{}]: {}", dbId, table.getId(), table.getName()); return true; } @@ -547,7 +547,7 @@ public synchronized void recoverPartition(long dbId, OlapTable table, String par // log RecoverInfo recoverInfo = new RecoverInfo(dbId, table.getId(), partitionId); - Catalog.getInstance().getEditLog().logRecoverPartition(recoverInfo); + Catalog.getCurrentCatalog().getEditLog().logRecoverPartition(recoverInfo); LOG.info("recover partition[{}]", partitionId); } @@ -622,7 +622,7 @@ public void addTabletToInvertedIndex() { // we need to get olap table to get schema hash info // first find it in catalog. if not found, it should be in recycle bin OlapTable olapTable = null; - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { // just log. db should be in recycle bin if (!idToDatabase.containsKey(dbId)) { diff --git a/fe/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java b/fe/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java index 381c40fe28a7c6..62dc4ccf78a740 100644 --- a/fe/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java +++ b/fe/src/main/java/org/apache/doris/catalog/ColocateTableIndex.java @@ -190,7 +190,7 @@ public void markGroupUnstable(GroupId groupId, boolean needEditLog) { if (unstableGroups.add(groupId)) { if (needEditLog) { ColocatePersistInfo info = ColocatePersistInfo.createForMarkUnstable(groupId); - Catalog.getInstance().getEditLog().logColocateMarkUnstable(info); + Catalog.getCurrentCatalog().getEditLog().logColocateMarkUnstable(info); } LOG.info("mark group {} as unstable", groupId); } @@ -208,7 +208,7 @@ public void markGroupStable(GroupId groupId, boolean needEditLog) { if (unstableGroups.remove(groupId)) { if (needEditLog) { ColocatePersistInfo info = ColocatePersistInfo.createForMarkStable(groupId); - Catalog.getInstance().getEditLog().logColocateMarkStable(info); + Catalog.getCurrentCatalog().getEditLog().logColocateMarkStable(info); } LOG.info("mark group {} as stable", groupId); } diff --git a/fe/src/main/java/org/apache/doris/catalog/Database.java b/fe/src/main/java/org/apache/doris/catalog/Database.java index 0d46c7a160e5fa..5333d3177ae918 100644 --- a/fe/src/main/java/org/apache/doris/catalog/Database.java +++ b/fe/src/main/java/org/apache/doris/catalog/Database.java @@ -301,7 +301,7 @@ public boolean createTableWithLock(Table table, boolean isReplay, boolean setIfN if (!isReplay) { // Write edit log CreateTableInfo info = new CreateTableInfo(fullQualifiedName, table); - Catalog.getInstance().getEditLog().logCreateTable(info); + Catalog.getCurrentCatalog().getEditLog().logCreateTable(info); } if (table.getType() == TableType.ELASTICSEARCH) { Catalog.getCurrentCatalog().getEsStateStore().registerTable((EsTable)table); @@ -558,7 +558,7 @@ public void setName(String name) { public synchronized void addFunction(Function function) throws UserException { addFunctionImpl(function, false); - Catalog.getInstance().getEditLog().logAddFunction(function); + Catalog.getCurrentCatalog().getEditLog().logAddFunction(function); } public synchronized void replayAddFunction(Function function) { @@ -583,7 +583,7 @@ private void addFunctionImpl(Function function, boolean isReplay) throws UserExc } // Get function id for this UDF, use CatalogIdGenerator. Only get function id // when isReplay is false - long functionId = Catalog.getInstance().getNextId(); + long functionId = Catalog.getCurrentCatalog().getNextId(); function.setId(functionId); } @@ -597,7 +597,7 @@ private void addFunctionImpl(Function function, boolean isReplay) throws UserExc public synchronized void dropFunction(FunctionSearchDesc function) throws UserException { dropFunctionImpl(function); - Catalog.getInstance().getEditLog().logDropFunction(function); + Catalog.getCurrentCatalog().getEditLog().logDropFunction(function); } public synchronized void replayDropFunction(FunctionSearchDesc functionSearchDesc) { diff --git a/fe/src/main/java/org/apache/doris/catalog/ResourceMgr.java b/fe/src/main/java/org/apache/doris/catalog/ResourceMgr.java index d974b16afa4ced..3932ceee62baf8 100644 --- a/fe/src/main/java/org/apache/doris/catalog/ResourceMgr.java +++ b/fe/src/main/java/org/apache/doris/catalog/ResourceMgr.java @@ -73,7 +73,7 @@ public void createResource(CreateResourceStmt stmt) throws DdlException { throw new DdlException("Resource(" + resourceName + ") already exist"); } // log add - Catalog.getInstance().getEditLog().logCreateResource(resource); + Catalog.getCurrentCatalog().getEditLog().logCreateResource(resource); LOG.info("create resource success. resource: {}", resource); } @@ -88,7 +88,7 @@ public void dropResource(DropResourceStmt stmt) throws DdlException { } // log drop - Catalog.getInstance().getEditLog().logDropResource(name); + Catalog.getCurrentCatalog().getEditLog().logDropResource(name); LOG.info("drop resource success. resource name: {}", name); } diff --git a/fe/src/main/java/org/apache/doris/catalog/SparkResource.java b/fe/src/main/java/org/apache/doris/catalog/SparkResource.java index 3d57914b2e25c3..3a819148016c21 100644 --- a/fe/src/main/java/org/apache/doris/catalog/SparkResource.java +++ b/fe/src/main/java/org/apache/doris/catalog/SparkResource.java @@ -207,7 +207,7 @@ && isYarnMaster()) { throw new DdlException("working_dir and broker should be assigned at the same time"); } // check broker exist - if (broker != null && !Catalog.getInstance().getBrokerMgr().contaisnBroker(broker)) { + if (broker != null && !Catalog.getCurrentCatalog().getBrokerMgr().contaisnBroker(broker)) { throw new DdlException("Unknown broker name(" + broker + ")"); } brokerProperties = getBrokerProperties(properties); diff --git a/fe/src/main/java/org/apache/doris/clone/ColocateTableBalancer.java b/fe/src/main/java/org/apache/doris/clone/ColocateTableBalancer.java index 3d2e292606498c..a65797dfa9b35a 100644 --- a/fe/src/main/java/org/apache/doris/clone/ColocateTableBalancer.java +++ b/fe/src/main/java/org/apache/doris/clone/ColocateTableBalancer.java @@ -209,7 +209,7 @@ private void relocateGroup() { private long selectSubstituteBackend(int tabletOrderIdx, GroupId groupId, long unavailableBeId, Set excludeBeIds, Map statisticMap) { ColocateTableIndex colocateIndex = Catalog.getCurrentColocateIndex(); - Database db = Catalog.getInstance().getDb(groupId.dbId); + Database db = Catalog.getCurrentCatalog().getDb(groupId.dbId); if (db == null) { LOG.info("db {} does not exist", groupId.dbId); return -1; diff --git a/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java b/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java index a311a68231e394..999375b6473fb0 100644 --- a/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java +++ b/fe/src/main/java/org/apache/doris/clone/DynamicPartitionScheduler.java @@ -249,7 +249,7 @@ private void executeDynamicPartition() { Pair tableInfo = iterator.next(); Long dbId = tableInfo.first; Long tableId = tableInfo.second; - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { iterator.remove(); continue; @@ -356,14 +356,14 @@ private void clearDropPartitionFailedMsg(String tableName) { } private void initDynamicPartitionTable() { - for (Long dbId : Catalog.getInstance().getDbIds()) { - Database db = Catalog.getInstance().getDb(dbId); + for (Long dbId : Catalog.getCurrentCatalog().getDbIds()) { + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db == null) { continue; } db.readLock(); try { - for (Table table : Catalog.getInstance().getDb(dbId).getTables()) { + for (Table table : Catalog.getCurrentCatalog().getDb(dbId).getTables()) { if (DynamicPartitionUtil.isDynamicPartitionTable(table)) { registerDynamicPartitionTable(db.getId(), table.getId()); } diff --git a/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java b/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java index 37ae8c1aa2fbf2..75ddbbcbc747e3 100644 --- a/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java +++ b/fe/src/main/java/org/apache/doris/clone/TabletSchedCtx.java @@ -613,7 +613,7 @@ public void releaseResource(TabletScheduler tabletScheduler) { AgentTaskQueue.removeTask(cloneTask.getBackendId(), TTaskType.CLONE, cloneTask.getSignature()); // clear all CLONE replicas - Database db = Catalog.getInstance().getDb(dbId); + Database db = Catalog.getCurrentCatalog().getDb(dbId); if (db != null) { db.writeLock(); try { @@ -860,11 +860,11 @@ public void finishCloneTask(CloneTask cloneTask, TFinishTaskRequest request) if (replica.getState() == ReplicaState.CLONE) { replica.setState(ReplicaState.NORMAL); - Catalog.getInstance().getEditLog().logAddReplica(info); + Catalog.getCurrentCatalog().getEditLog().logAddReplica(info); } else { // if in VERSION_INCOMPLETE, replica is not newly created, thus the state is not CLONE // so we keep it state unchanged, and log update replica - Catalog.getInstance().getEditLog().logUpdateReplica(info); + Catalog.getCurrentCatalog().getEditLog().logUpdateReplica(info); } state = State.FINISHED; diff --git a/fe/src/main/java/org/apache/doris/clone/TabletScheduler.java b/fe/src/main/java/org/apache/doris/clone/TabletScheduler.java index a127255d436dc0..695796de172ef4 100644 --- a/fe/src/main/java/org/apache/doris/clone/TabletScheduler.java +++ b/fe/src/main/java/org/apache/doris/clone/TabletScheduler.java @@ -906,7 +906,7 @@ private void deleteReplicaInternal(TabletSchedCtx tabletCtx, Replica replica, St tabletCtx.getTabletId(), replica.getBackendId()); - Catalog.getInstance().getEditLog().logDeleteReplica(info); + Catalog.getCurrentCatalog().getEditLog().logDeleteReplica(info); LOG.info("delete replica. tablet id: {}, backend id: {}. reason: {}, force: {}", tabletCtx.getTabletId(), replica.getBackendId(), reason, force); diff --git a/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java b/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java index b8f1a829c00206..7cd2fee914a923 100644 --- a/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java +++ b/fe/src/main/java/org/apache/doris/common/proc/BackendsProcDir.java @@ -89,7 +89,7 @@ public static List> getClusterBackendInfos(String clusterName) { List> backendInfos = new LinkedList<>(); List backendIds; if (!Strings.isNullOrEmpty(clusterName)) { - final Cluster cluster = Catalog.getInstance().getCluster(clusterName); + final Cluster cluster = Catalog.getCurrentCatalog().getCluster(clusterName); // root not in any cluster if (null == cluster) { return backendInfos; diff --git a/fe/src/main/java/org/apache/doris/common/proc/JobsProcDir.java b/fe/src/main/java/org/apache/doris/common/proc/JobsProcDir.java index 35af1d3a4bcdde..e35e1f29901fb5 100644 --- a/fe/src/main/java/org/apache/doris/common/proc/JobsProcDir.java +++ b/fe/src/main/java/org/apache/doris/common/proc/JobsProcDir.java @@ -92,7 +92,7 @@ public ProcResult fetchResult() throws AnalysisException { long dbId = db.getId(); // load - Load load = Catalog.getInstance().getLoadInstance(); + Load load = Catalog.getCurrentCatalog().getLoadInstance(); LoadManager loadManager = Catalog.getCurrentCatalog().getLoadManager(); Long pendingNum = load.getLoadJobNum(org.apache.doris.load.LoadJob.JobState.PENDING, dbId) + loadManager.getLoadJobNum(org.apache.doris.load.loadv2.JobState.PENDING, dbId); @@ -118,7 +118,7 @@ public ProcResult fetchResult() throws AnalysisException { cancelledNum.toString(), totalNum.toString())); // rollup - MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler(); + MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler(); pendingNum = materializedViewHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.PENDING, dbId); runningNum = materializedViewHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.WAITING_TXN, dbId) + materializedViewHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.RUNNING, dbId); @@ -129,7 +129,7 @@ public ProcResult fetchResult() throws AnalysisException { cancelledNum.toString(), totalNum.toString())); // schema change - SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler(); + SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler(); pendingNum = schemaChangeHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.PENDING, dbId); runningNum = schemaChangeHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.WAITING_TXN, dbId) + schemaChangeHandler.getAlterJobV2Num(org.apache.doris.alter.AlterJobV2.JobState.RUNNING, dbId); @@ -140,7 +140,7 @@ public ProcResult fetchResult() throws AnalysisException { finishedNum.toString(), cancelledNum.toString(), totalNum.toString())); // export - ExportMgr exportMgr = Catalog.getInstance().getExportMgr(); + ExportMgr exportMgr = Catalog.getCurrentCatalog().getExportMgr(); pendingNum = exportMgr.getJobNum(ExportJob.JobState.PENDING, dbId); runningNum = exportMgr.getJobNum(ExportJob.JobState.EXPORTING, dbId); finishedNum = exportMgr.getJobNum(ExportJob.JobState.FINISHED, dbId); diff --git a/fe/src/main/java/org/apache/doris/common/proc/ProcService.java b/fe/src/main/java/org/apache/doris/common/proc/ProcService.java index ecdad70a56fdaa..6b0e60f92f9496 100644 --- a/fe/src/main/java/org/apache/doris/common/proc/ProcService.java +++ b/fe/src/main/java/org/apache/doris/common/proc/ProcService.java @@ -36,14 +36,14 @@ private ProcService() { root = new BaseProcDir(); root.register("auth", new AuthProcDir(Catalog.getCurrentCatalog().getAuth())); root.register("backends", new BackendsProcDir(Catalog.getCurrentSystemInfo())); - root.register("dbs", new DbsProcDir(Catalog.getInstance())); - root.register("jobs", new JobsDbProcDir(Catalog.getInstance())); - root.register("statistic", new StatisticProcDir(Catalog.getInstance())); + root.register("dbs", new DbsProcDir(Catalog.getCurrentCatalog())); + root.register("jobs", new JobsDbProcDir(Catalog.getCurrentCatalog())); + root.register("statistic", new StatisticProcDir(Catalog.getCurrentCatalog())); root.register("tasks", new TasksProcDir()); - root.register("frontends", new FrontendsProcNode(Catalog.getInstance())); - root.register("brokers", Catalog.getInstance().getBrokerMgr().getProcNode()); - root.register("resources", Catalog.getInstance().getResourceMgr().getProcNode()); - root.register("load_error_hub", new LoadErrorHubProcNode(Catalog.getInstance())); + root.register("frontends", new FrontendsProcNode(Catalog.getCurrentCatalog())); + root.register("brokers", Catalog.getCurrentCatalog().getBrokerMgr().getProcNode()); + root.register("resources", Catalog.getCurrentCatalog().getResourceMgr().getProcNode()); + root.register("load_error_hub", new LoadErrorHubProcNode(Catalog.getCurrentCatalog())); root.register("transactions", new TransDbProcDir()); root.register("monitor", new MonitorProcDir()); root.register("current_queries", new CurrentQueryStatisticsProcDir()); diff --git a/fe/src/main/java/org/apache/doris/common/util/BrokerUtil.java b/fe/src/main/java/org/apache/doris/common/util/BrokerUtil.java index bae07676e3cf45..622b871589d172 100644 --- a/fe/src/main/java/org/apache/doris/common/util/BrokerUtil.java +++ b/fe/src/main/java/org/apache/doris/common/util/BrokerUtil.java @@ -48,7 +48,7 @@ public static void parseBrokerFile(String path, BrokerDesc brokerDesc, List chooseTablets() { - Catalog catalog = Catalog.getInstance(); + Catalog catalog = Catalog.getCurrentCatalog(); MetaObject chosenOne = null; List chosenTablets = Lists.newArrayList(); diff --git a/fe/src/main/java/org/apache/doris/ha/BDBHA.java b/fe/src/main/java/org/apache/doris/ha/BDBHA.java index 67fe127337973e..bbe7326ef79538 100644 --- a/fe/src/main/java/org/apache/doris/ha/BDBHA.java +++ b/fe/src/main/java/org/apache/doris/ha/BDBHA.java @@ -74,7 +74,7 @@ public boolean fencing() { DatabaseEntry theData = new DatabaseEntry(new byte[1]); OperationStatus status = epochDb.putNoOverwrite(null, theKey, theData); if (status == OperationStatus.SUCCESS) { - Catalog.getInstance().setEpoch(myEpoch); + Catalog.getCurrentCatalog().setEpoch(myEpoch); return true; } else if (status == OperationStatus.KEYEXIST) { return false; diff --git a/fe/src/main/java/org/apache/doris/ha/BDBStateChangeListener.java b/fe/src/main/java/org/apache/doris/ha/BDBStateChangeListener.java index 30e380f97880e9..58c9d13ab60b9d 100644 --- a/fe/src/main/java/org/apache/doris/ha/BDBStateChangeListener.java +++ b/fe/src/main/java/org/apache/doris/ha/BDBStateChangeListener.java @@ -43,7 +43,7 @@ public synchronized void stateChange(StateChangeEvent sce) throws RuntimeExcepti break; } case REPLICA: { - if (Catalog.getInstance().isElectable()) { + if (Catalog.getCurrentCatalog().isElectable()) { newType = FrontendNodeType.FOLLOWER; } else { newType = FrontendNodeType.OBSERVER; @@ -62,7 +62,7 @@ public synchronized void stateChange(StateChangeEvent sce) throws RuntimeExcepti } } Preconditions.checkNotNull(newType); - Catalog.getInstance().notifyNewFETypeTransfer(newType); + Catalog.getCurrentCatalog().notifyNewFETypeTransfer(newType); } } diff --git a/fe/src/main/java/org/apache/doris/http/BaseAction.java b/fe/src/main/java/org/apache/doris/http/BaseAction.java index 35d0d44ba0bfd1..0ac1d57a5f7cb0 100644 --- a/fe/src/main/java/org/apache/doris/http/BaseAction.java +++ b/fe/src/main/java/org/apache/doris/http/BaseAction.java @@ -78,7 +78,7 @@ public abstract class BaseAction implements IAction { public BaseAction(ActionController controller) { this.controller = controller; // TODO(zc): remove this instance - this.catalog = Catalog.getInstance(); + this.catalog = Catalog.getCurrentCatalog(); } @Override diff --git a/fe/src/main/java/org/apache/doris/http/action/HaAction.java b/fe/src/main/java/org/apache/doris/http/action/HaAction.java index d4e46c1fc2d352..aa759b1da52d34 100644 --- a/fe/src/main/java/org/apache/doris/http/action/HaAction.java +++ b/fe/src/main/java/org/apache/doris/http/action/HaAction.java @@ -64,23 +64,23 @@ public void executeGet(BaseRequest request, BaseResponse response) { private void appendRoleInfo(StringBuilder buffer) { buffer.append("

Frontend Role

"); buffer.append("
");
-        buffer.append("

" + Catalog.getInstance().getFeType() + "

"); + buffer.append("

" + Catalog.getCurrentCatalog().getFeType() + "

"); buffer.append("
"); } private void appendJournalInfo(StringBuilder buffer) { buffer.append("

Current Journal Id

"); buffer.append("
");
-        if (Catalog.getInstance().isMaster()) {
-            buffer.append("

" + Catalog.getInstance().getEditLog().getMaxJournalId() + "

"); + if (Catalog.getCurrentCatalog().isMaster()) { + buffer.append("

" + Catalog.getCurrentCatalog().getEditLog().getMaxJournalId() + "

"); } else { - buffer.append("

" + Catalog.getInstance().getReplayedJournalId() + "

"); + buffer.append("

" + Catalog.getCurrentCatalog().getReplayedJournalId() + "

"); } buffer.append("
"); } private void appendNodesInfo(StringBuilder buffer) { - HAProtocol haProtocol = Catalog.getInstance().getHaProtocol(); + HAProtocol haProtocol = Catalog.getCurrentCatalog().getHaProtocol(); if (haProtocol == null) { return; } @@ -111,7 +111,7 @@ private void appendNodesInfo(StringBuilder buffer) { private void appendCanReadInfo(StringBuilder buffer) { buffer.append("

Can Read

"); buffer.append("
");
-        buffer.append("

" + Catalog.getInstance().canRead() + "

"); + buffer.append("

" + Catalog.getCurrentCatalog().canRead() + "

"); buffer.append("
"); } @@ -132,7 +132,7 @@ private void appendImageInfo(StringBuilder buffer) { } private void appendDbNames(StringBuilder buffer) { - List names = Catalog.getInstance().getEditLog().getDatabaseNames(); + List names = Catalog.getCurrentCatalog().getEditLog().getDatabaseNames(); if (names == null) { return; } @@ -148,7 +148,7 @@ private void appendDbNames(StringBuilder buffer) { } private void appendFe(StringBuilder buffer) { - List fes = Catalog.getInstance().getFrontends(null /* all */); + List fes = Catalog.getCurrentCatalog().getFrontends(null /* all */); if (fes == null) { return; } @@ -162,7 +162,7 @@ private void appendFe(StringBuilder buffer) { } private void appendRemovedFe(StringBuilder buffer) { - List feNames = Catalog.getInstance().getRemovedFrontendNames(); + List feNames = Catalog.getCurrentCatalog().getRemovedFrontendNames(); buffer.append("

Removed Frontends

"); buffer.append("
");
         for (String feName : feNames) {
diff --git a/fe/src/main/java/org/apache/doris/http/meta/ColocateMetaService.java b/fe/src/main/java/org/apache/doris/http/meta/ColocateMetaService.java
index 2be9afa0059ed4..63c54ee9ea2924 100644
--- a/fe/src/main/java/org/apache/doris/http/meta/ColocateMetaService.java
+++ b/fe/src/main/java/org/apache/doris/http/meta/ColocateMetaService.java
@@ -219,7 +219,7 @@ public void executeInMasterWithAdmin(BaseRequest request, BaseResponse response)
         private void updateBackendPerBucketSeq(GroupId groupId, List> backendsPerBucketSeq) {
             colocateIndex.addBackendsPerBucketSeq(groupId, backendsPerBucketSeq);
             ColocatePersistInfo info2 = ColocatePersistInfo.createForBackendsPerBucketSeq(groupId, backendsPerBucketSeq);
-            Catalog.getInstance().getEditLog().logColocateBackendsPerBucketSeq(info2);
+            Catalog.getCurrentCatalog().getEditLog().logColocateBackendsPerBucketSeq(info2);
         }
     }
 
diff --git a/fe/src/main/java/org/apache/doris/http/meta/MetaBaseAction.java b/fe/src/main/java/org/apache/doris/http/meta/MetaBaseAction.java
index 7addda988e4cc5..b8d8843420e147 100644
--- a/fe/src/main/java/org/apache/doris/http/meta/MetaBaseAction.java
+++ b/fe/src/main/java/org/apache/doris/http/meta/MetaBaseAction.java
@@ -91,7 +91,7 @@ protected void writeFileResponse(BaseRequest request, BaseResponse response, Fil
 
     private boolean isFromValidFe(BaseRequest request) {
         String clientHost = request.getHostString();
-        Frontend fe = Catalog.getInstance().getFeByHost(clientHost);
+        Frontend fe = Catalog.getCurrentCatalog().getFeByHost(clientHost);
         if (fe == null) {
             LOG.warn("request is not from valid FE. client: {}", clientHost);
             return false;
diff --git a/fe/src/main/java/org/apache/doris/http/meta/MetaService.java b/fe/src/main/java/org/apache/doris/http/meta/MetaService.java
index 3027424d339c13..4f2d51ef6fa1c4 100644
--- a/fe/src/main/java/org/apache/doris/http/meta/MetaService.java
+++ b/fe/src/main/java/org/apache/doris/http/meta/MetaService.java
@@ -217,7 +217,7 @@ public static void registerAction (ActionController controller, File imageDir)
 
         @Override
         public void executeGet(BaseRequest request, BaseResponse response) {
-            long id = Catalog.getInstance().getReplayedJournalId();
+            long id = Catalog.getCurrentCatalog().getReplayedJournalId();
             response.updateHeader("id", Long.toString(id));
             writeResponse(request, response);
         }
@@ -243,7 +243,7 @@ public void executeGet(BaseRequest request, BaseResponse response) {
 
             if (!Strings.isNullOrEmpty(host) && !Strings.isNullOrEmpty(portString)) {
                 int port = Integer.parseInt(portString);
-                Frontend fe = Catalog.getInstance().checkFeExist(host, port);
+                Frontend fe = Catalog.getCurrentCatalog().checkFeExist(host, port);
                 if (fe == null) {
                     response.updateHeader("role", FrontendNodeType.UNKNOWN.name());
                 } else {
@@ -323,7 +323,7 @@ public void executeGet(BaseRequest request, BaseResponse response) {
              */
 
             // TODO: Still need to lock ClusterInfoService to prevent add or drop Backends
-            String dumpFilePath = Catalog.getInstance().dumpImage();
+            String dumpFilePath = Catalog.getCurrentCatalog().dumpImage();
             if (dumpFilePath == null) {
                 response.appendContent("dump failed. " + dumpFilePath);
             }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/BootstrapFinishAction.java b/fe/src/main/java/org/apache/doris/http/rest/BootstrapFinishAction.java
index 1ebfa612819dda..eee998c1c2d123 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/BootstrapFinishAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/BootstrapFinishAction.java
@@ -54,7 +54,7 @@ public static void registerAction(ActionController controller) throws IllegalArg
 
     @Override
     public void execute(BaseRequest request, BaseResponse response) throws DdlException {
-        boolean isReady = Catalog.getInstance().isReady();
+        boolean isReady = Catalog.getCurrentCatalog().isReady();
 
         // to json response
         BootstrapResult result = null;
@@ -73,22 +73,22 @@ public void execute(BaseRequest request, BaseResponse response) throws DdlExcept
                 }
 
                 if (result.status == ActionStatus.OK) {
-                    if (clusterId != Catalog.getInstance().getClusterId()) {
+                    if (clusterId != Catalog.getCurrentCatalog().getClusterId()) {
                         result.status = ActionStatus.FAILED;
-                        result.msg = "invalid cluster id: " + Catalog.getInstance().getClusterId();
+                        result.msg = "invalid cluster id: " + Catalog.getCurrentCatalog().getClusterId();
                     }
                 }
 
                 if (result.status == ActionStatus.OK) {
-                    if (!token.equals(Catalog.getInstance().getToken())) {
+                    if (!token.equals(Catalog.getCurrentCatalog().getToken())) {
                         result.status = ActionStatus.FAILED;
-                        result.msg = "invalid token: " + Catalog.getInstance().getToken();
+                        result.msg = "invalid token: " + Catalog.getCurrentCatalog().getToken();
                     }
                 }
 
                 if (result.status == ActionStatus.OK) {
                     // cluster id and token are valid, return replayed journal id
-                    long replayedJournalId = Catalog.getInstance().getReplayedJournalId();
+                    long replayedJournalId = Catalog.getCurrentCatalog().getReplayedJournalId();
                     result.setMaxReplayedJournal(replayedJournalId);
                     result.setQueryPort(Config.query_port);
                     result.setRpcPort(Config.rpc_port);
diff --git a/fe/src/main/java/org/apache/doris/http/rest/CancelStreamLoad.java b/fe/src/main/java/org/apache/doris/http/rest/CancelStreamLoad.java
index 87575ef1a118dd..0520706433e42f 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/CancelStreamLoad.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/CancelStreamLoad.java
@@ -70,7 +70,7 @@ public void executeWithoutPassword(BaseRequest request, BaseResponse response) t
         // FIXME(cmy)
         // checkWritePriv(authInfo.fullUserName, fullDbName);
 
-        Database db = Catalog.getInstance().getDb(fullDbName);
+        Database db = Catalog.getCurrentCatalog().getDb(fullDbName);
         if (db == null) {
             throw new DdlException("unknown database, database=" + dbName);
         }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/GetDdlStmtAction.java b/fe/src/main/java/org/apache/doris/http/rest/GetDdlStmtAction.java
index bd26e59bf5f4bd..51982b538f29ae 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/GetDdlStmtAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/GetDdlStmtAction.java
@@ -72,7 +72,7 @@ public void executeWithoutPassword(BaseRequest request, BaseResponse response)
             throw new DdlException("Missing params. Need database name and Table name");
         }
 
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Database[" + dbName + "] does not exist");
         }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/GetStreamLoadState.java b/fe/src/main/java/org/apache/doris/http/rest/GetStreamLoadState.java
index f9bbaf91328db6..8f1a26fab60d2b 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/GetStreamLoadState.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/GetStreamLoadState.java
@@ -70,7 +70,7 @@ public void executeWithoutPassword(BaseRequest request, BaseResponse response)
         // FIXME(cmy)
         // checkReadPriv(authInfo.fullUserName, fullDbName);
 
-        Database db = Catalog.getInstance().getDb(fullDbName);
+        Database db = Catalog.getCurrentCatalog().getDb(fullDbName);
         if (db == null) {
             throw new DdlException("unknown database, database=" + dbName);
         }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/MetaReplayerCheckAction.java b/fe/src/main/java/org/apache/doris/http/rest/MetaReplayerCheckAction.java
index e1b6d0319b5778..f874ecf9bd716a 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/MetaReplayerCheckAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/MetaReplayerCheckAction.java
@@ -51,7 +51,7 @@ public static void registerAction(ActionController controller) throws IllegalArg
     protected void executeWithoutPassword(BaseRequest request, BaseResponse response) throws DdlException {
         checkGlobalAuth(ConnectContext.get().getCurrentUserIdentity(), PrivPredicate.ADMIN);
 
-        Map resultMap = Catalog.getInstance().getMetaReplayState().getInfo();
+        Map resultMap = Catalog.getCurrentCatalog().getMetaReplayState().getInfo();
 
         // to json response
         String result = "";
diff --git a/fe/src/main/java/org/apache/doris/http/rest/MigrationAction.java b/fe/src/main/java/org/apache/doris/http/rest/MigrationAction.java
index bc5c5b95d399f1..5ebf92f27be2b9 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/MigrationAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/MigrationAction.java
@@ -77,7 +77,7 @@ protected void executeWithoutPassword(BaseRequest request, BaseResponse response
             throw new DdlException("Missing params. Need database name");
         }
 
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Database[" + dbName + "] does not exist");
         }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/RestBaseAction.java b/fe/src/main/java/org/apache/doris/http/rest/RestBaseAction.java
index 73f887b25cea4d..d9bb7680f1fd64 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/RestBaseAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/RestBaseAction.java
@@ -116,7 +116,7 @@ public void redirectTo(BaseRequest request, BaseResponse response, TNetworkAddre
     }
 
     public boolean redirectToMaster(BaseRequest request, BaseResponse response) throws DdlException {
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         if (catalog.isMaster()) {
             return false;
         }
diff --git a/fe/src/main/java/org/apache/doris/http/rest/RowCountAction.java b/fe/src/main/java/org/apache/doris/http/rest/RowCountAction.java
index 82c7466a156535..bc7003c014c1ae 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/RowCountAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/RowCountAction.java
@@ -73,7 +73,7 @@ protected void executeWithoutPassword(BaseRequest request, BaseResponse response
         }
 
         Map indexRowCountMap = Maps.newHashMap();
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Database db = catalog.getDb(dbName);
         if (db == null) {
             throw new DdlException("Database[" + dbName + "] does not exist");
diff --git a/fe/src/main/java/org/apache/doris/http/rest/SetConfigAction.java b/fe/src/main/java/org/apache/doris/http/rest/SetConfigAction.java
index 776443310b1ad7..ed90c5637f0a23 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/SetConfigAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/SetConfigAction.java
@@ -75,7 +75,7 @@ protected void executeWithoutPassword(BaseRequest request, BaseResponse response
                 continue;
             }
 
-            if (anno.masterOnly() && !Catalog.getInstance().isMaster()) {
+            if (anno.masterOnly() && !Catalog.getCurrentCatalog().isMaster()) {
                 continue;
             }
 
diff --git a/fe/src/main/java/org/apache/doris/http/rest/ShowMetaInfoAction.java b/fe/src/main/java/org/apache/doris/http/rest/ShowMetaInfoAction.java
index 7bad5007315fd8..faf99f386e89e2 100644
--- a/fe/src/main/java/org/apache/doris/http/rest/ShowMetaInfoAction.java
+++ b/fe/src/main/java/org/apache/doris/http/rest/ShowMetaInfoAction.java
@@ -98,16 +98,16 @@ public void execute(BaseRequest request, BaseResponse response) {
     
     public Map getHaInfo() {
         HashMap feInfo = new HashMap();
-        feInfo.put("role", Catalog.getInstance().getFeType().toString());
-        if (Catalog.getInstance().isMaster()) {
+        feInfo.put("role", Catalog.getCurrentCatalog().getFeType().toString());
+        if (Catalog.getCurrentCatalog().isMaster()) {
             feInfo.put("current_journal_id",
-                       String.valueOf(Catalog.getInstance().getEditLog().getMaxJournalId()));
+                       String.valueOf(Catalog.getCurrentCatalog().getEditLog().getMaxJournalId()));
         } else {
             feInfo.put("current_journal_id",
-                       String.valueOf(Catalog.getInstance().getReplayedJournalId()));
+                       String.valueOf(Catalog.getCurrentCatalog().getReplayedJournalId()));
         }
 
-        HAProtocol haProtocol = Catalog.getInstance().getHaProtocol();
+        HAProtocol haProtocol = Catalog.getCurrentCatalog().getHaProtocol();
         if (haProtocol != null) {
 
             InetSocketAddress master = null;
@@ -142,8 +142,8 @@ public Map getHaInfo() {
             }
         }
 
-        feInfo.put("can_read", String.valueOf(Catalog.getInstance().canRead()));
-        feInfo.put("is_ready", String.valueOf(Catalog.getInstance().isReady()));
+        feInfo.put("can_read", String.valueOf(Catalog.getCurrentCatalog().canRead()));
+        feInfo.put("is_ready", String.valueOf(Catalog.getCurrentCatalog().isReady()));
         try {
             Storage storage = new Storage(Config.meta_dir + "/image");
             feInfo.put("last_checkpoint_version", String.valueOf(storage.getImageSeq()));
@@ -157,11 +157,11 @@ public Map getHaInfo() {
 
     public Map getDataSize() {
         Map result = new HashMap();
-        List dbNames = Catalog.getInstance().getDbNames();
+        List dbNames = Catalog.getCurrentCatalog().getDbNames();
 
         for (int i = 0; i < dbNames.size(); i++) {
             String dbName = dbNames.get(i);
-            Database db = Catalog.getInstance().getDb(dbName);
+            Database db = Catalog.getCurrentCatalog().getDb(dbName);
 
             long totalSize = 0;
             List tables = db.getTables();
diff --git a/fe/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java b/fe/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java
index df4c932f00427d..6b8b900c745e98 100644
--- a/fe/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java
+++ b/fe/src/main/java/org/apache/doris/journal/bdbje/BDBEnvironment.java
@@ -156,7 +156,7 @@ public void setup(File envHome, String selfNodeName, String selfNodeHostPort,
                 adminNodes.add(helper);
                 LOG.info("add helper[{}] as ReplicationGroupAdmin", helperHostPort);
                 // 2. add self if is electable
-                if (!selfNodeHostPort.equals(helperHostPort) && Catalog.getInstance().isElectable()) {
+                if (!selfNodeHostPort.equals(helperHostPort) && Catalog.getCurrentCatalog().isElectable()) {
                     InetSocketAddress self = new InetSocketAddress(selfNodeHostPort.split(":")[0],
                                                                    Integer.parseInt(selfNodeHostPort.split(":")[1]));
                     adminNodes.add(self);
@@ -167,7 +167,7 @@ public void setup(File envHome, String selfNodeName, String selfNodeHostPort,
                 
                 // get a BDBHA object and pass the reference to Catalog
                 HAProtocol protocol = new BDBHA(this, selfNodeName);
-                Catalog.getInstance().setHaProtocol(protocol);
+                Catalog.getCurrentCatalog().setHaProtocol(protocol);
                 
                 // start state change listener
                 StateChangeListener listener = new BDBStateChangeListener();
diff --git a/fe/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java b/fe/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java
index 502a9d2d5b428f..f11e42a0abbb29 100644
--- a/fe/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java
+++ b/fe/src/main/java/org/apache/doris/journal/bdbje/BDBJEJournal.java
@@ -83,7 +83,7 @@ public BDBJEJournal(String nodeName) {
     private void initBDBEnv(String nodeName) {
         environmentPath = Catalog.getCurrentCatalog().getBdbDir();
         try {
-            Pair selfNode = Catalog.getInstance().getSelfNode();
+            Pair selfNode = Catalog.getCurrentCatalog().getSelfNode();
             if (isPortUsing(selfNode.first, selfNode.second)) {
                 LOG.error("edit_log_port {} is already in use. will exit.", selfNode.second);
                 System.exit(-1);
@@ -310,11 +310,11 @@ public synchronized void open() {
         if (bdbEnvironment == null) {
             File dbEnv = new File(environmentPath);
             bdbEnvironment = new BDBEnvironment();
-            Pair helperNode = Catalog.getInstance().getHelperNode();
+            Pair helperNode = Catalog.getCurrentCatalog().getHelperNode();
             String helperHostPort = helperNode.first + ":" + helperNode.second;
             try {
                 bdbEnvironment.setup(dbEnv, selfNodeName, selfNodeHostPort,
-                                     helperHostPort, Catalog.getInstance().isElectable());
+                                     helperHostPort, Catalog.getCurrentCatalog().isElectable());
             } catch (Exception e) {
                 LOG.error("catch an exception when setup bdb environment. will exit.", e);
                 System.exit(-1);
@@ -322,7 +322,7 @@ public synchronized void open() {
         }
         
         // Open a new journal database or get last existing one as current journal database
-        Pair helperNode = Catalog.getInstance().getHelperNode();
+        Pair helperNode = Catalog.getCurrentCatalog().getHelperNode();
         List dbNames = null;
         for (int i = 0; i < RETRY_TIME; i++) {
             try {
@@ -339,7 +339,7 @@ public synchronized void open() {
                      *  here we should open database with name image max journal id + 1.
                      *  (default Catalog.getInstance().getReplayedJournalId() is 0)
                      */
-                    String dbName = Long.toString(Catalog.getInstance().getReplayedJournalId() + 1);
+                    String dbName = Long.toString(Catalog.getCurrentCatalog().getReplayedJournalId() + 1);
                     LOG.info("the very first time to open bdb, dbname is {}", dbName);
                     currentJournalDB = bdbEnvironment.openDatabase(dbName);
                 } else {
@@ -360,7 +360,7 @@ public synchronized void open() {
                 restore.execute(insufficientLogEx, config);
                 bdbEnvironment.close();
                 bdbEnvironment.setup(new File(environmentPath), selfNodeName, selfNodeHostPort, 
-                                     helperNode.first + ":" + helperNode.second, Catalog.getInstance().isElectable());
+                                     helperNode.first + ":" + helperNode.second, Catalog.getCurrentCatalog().isElectable());
             }
         }
     }
diff --git a/fe/src/main/java/org/apache/doris/load/AsyncDeleteJob.java b/fe/src/main/java/org/apache/doris/load/AsyncDeleteJob.java
index f8aacdc4a5d469..baa8f0ab0f211a 100644
--- a/fe/src/main/java/org/apache/doris/load/AsyncDeleteJob.java
+++ b/fe/src/main/java/org/apache/doris/load/AsyncDeleteJob.java
@@ -82,7 +82,7 @@ public AsyncDeleteJob(long dbId, long tableId, long partitionId,
                           List conditions) {
         this.state = DeleteState.QUORUM_FINISHED;
 
-        this.jobId = Catalog.getInstance().getNextId();
+        this.jobId = Catalog.getCurrentCatalog().getNextId();
         this.dbId = dbId;
         this.tableId = tableId;
         this.partitionId = partitionId;
diff --git a/fe/src/main/java/org/apache/doris/load/DeleteHandler.java b/fe/src/main/java/org/apache/doris/load/DeleteHandler.java
index b503937356494d..bba013aea5d159 100644
--- a/fe/src/main/java/org/apache/doris/load/DeleteHandler.java
+++ b/fe/src/main/java/org/apache/doris/load/DeleteHandler.java
@@ -120,7 +120,7 @@ public void process(DeleteStmt stmt) throws DdlException, QueryStateException {
         String tableName = stmt.getTableName();
         String partitionName = stmt.getPartitionName();
         List conditions = stmt.getDeleteConditions();
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + dbName);
         }
@@ -566,7 +566,7 @@ private void checkDeleteV2(OlapTable table, Partition partition, List
     // show delete stmt
     public List> getDeleteInfosByDb(long dbId, boolean forUser) {
         LinkedList> infos = new LinkedList>();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             return infos;
         }
diff --git a/fe/src/main/java/org/apache/doris/load/DeleteJob.java b/fe/src/main/java/org/apache/doris/load/DeleteJob.java
index 957d9f5ccdce23..dde3e87d9c02b0 100644
--- a/fe/src/main/java/org/apache/doris/load/DeleteJob.java
+++ b/fe/src/main/java/org/apache/doris/load/DeleteJob.java
@@ -85,7 +85,7 @@ public void checkAndUpdateQuorum() throws MetaNotFoundException {
         long dbId = deleteInfo.getDbId();
         long tableId = deleteInfo.getTableId();
         long partitionId = deleteInfo.getPartitionId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             throw new MetaNotFoundException("can not find database "+ dbId +" when commit delete");
         }
diff --git a/fe/src/main/java/org/apache/doris/load/DppConfig.java b/fe/src/main/java/org/apache/doris/load/DppConfig.java
index 919d7e3f84eda7..55437ec9bbb6cd 100644
--- a/fe/src/main/java/org/apache/doris/load/DppConfig.java
+++ b/fe/src/main/java/org/apache/doris/load/DppConfig.java
@@ -289,12 +289,12 @@ public String getPaloPath() {
     }
 
     public String getApplicationsPath() {
-        return String.format("%s/%d/%s/%s", paloPath, Catalog.getInstance().getClusterId(), APPLICATIONS_PATH,
+        return String.format("%s/%d/%s/%s", paloPath, Catalog.getCurrentCatalog().getClusterId(), APPLICATIONS_PATH,
                 FeConstants.dpp_version);
     }
 
     public String getOutputPath() {
-        return String.format("%s/%d/%s", paloPath, Catalog.getInstance().getClusterId(), OUTPUT_PATH);
+        return String.format("%s/%d/%s", paloPath, Catalog.getCurrentCatalog().getClusterId(), OUTPUT_PATH);
     }
 
     public static String getHttpPortKey() {
diff --git a/fe/src/main/java/org/apache/doris/load/ExportChecker.java b/fe/src/main/java/org/apache/doris/load/ExportChecker.java
index 4678a8f6278f68..414cfbd774d63e 100644
--- a/fe/src/main/java/org/apache/doris/load/ExportChecker.java
+++ b/fe/src/main/java/org/apache/doris/load/ExportChecker.java
@@ -83,7 +83,7 @@ protected void runAfterCatalogReady() {
     }
 
     private void runPendingJobs() {
-        ExportMgr exportMgr = Catalog.getInstance().getExportMgr();
+        ExportMgr exportMgr = Catalog.getCurrentCatalog().getExportMgr();
         List pendingJobs = exportMgr.getExportJobs(JobState.PENDING);
 
         // check to limit running etl job num
@@ -118,7 +118,7 @@ private void runPendingJobs() {
     }
 
     private void runExportingJobs() {
-        List jobs = Catalog.getInstance().getExportMgr().getExportJobs(JobState.EXPORTING);
+        List jobs = Catalog.getCurrentCatalog().getExportMgr().getExportJobs(JobState.EXPORTING);
         LOG.debug("exporting export job num: {}", jobs.size());
         for (ExportJob job : jobs) {
             try {
diff --git a/fe/src/main/java/org/apache/doris/load/ExportJob.java b/fe/src/main/java/org/apache/doris/load/ExportJob.java
index 71c2eef2582fc2..71fd29a7701a82 100644
--- a/fe/src/main/java/org/apache/doris/load/ExportJob.java
+++ b/fe/src/main/java/org/apache/doris/load/ExportJob.java
@@ -157,7 +157,7 @@ public ExportJob() {
         this.startTimeMs = -1;
         this.finishTimeMs = -1;
         this.failMsg = new ExportFailMsg(ExportFailMsg.CancelType.UNKNOWN, "");
-        this.analyzer = new Analyzer(Catalog.getInstance(), null);
+        this.analyzer = new Analyzer(Catalog.getCurrentCatalog(), null);
         this.desc = new DescriptorTable();
         this.exportPath = "";
         this.columnSeparator = "\t";
@@ -171,7 +171,7 @@ public ExportJob(long jobId) {
 
     public void setJob(ExportStmt stmt) throws UserException {
         String dbName = stmt.getTblName().getDb();
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Database " + dbName + " does not exist");
         }
@@ -524,7 +524,7 @@ public synchronized boolean updateState(ExportJob.JobState newState, boolean isR
                 break;
         }
         if (!isReplay) {
-            Catalog.getInstance().getEditLog().logExportUpdateState(id, newState);
+            Catalog.getCurrentCatalog().getEditLog().logExportUpdateState(id, newState);
         }
         return true;
     }
diff --git a/fe/src/main/java/org/apache/doris/load/ExportMgr.java b/fe/src/main/java/org/apache/doris/load/ExportMgr.java
index 08133298c8d047..b90a4a8f449d89 100644
--- a/fe/src/main/java/org/apache/doris/load/ExportMgr.java
+++ b/fe/src/main/java/org/apache/doris/load/ExportMgr.java
@@ -80,12 +80,12 @@ public Map getIdToJob() {
     }
 
     public void addExportJob(ExportStmt stmt) throws Exception {
-        long jobId = Catalog.getInstance().getNextId();
+        long jobId = Catalog.getCurrentCatalog().getNextId();
         ExportJob job = createJob(jobId, stmt);
         writeLock();
         try {
             unprotectAddJob(job);
-            Catalog.getInstance().getEditLog().logExportCreate(job);
+            Catalog.getCurrentCatalog().getEditLog().logExportCreate(job);
         } finally {
             writeUnlock();
         }
diff --git a/fe/src/main/java/org/apache/doris/load/Load.java b/fe/src/main/java/org/apache/doris/load/Load.java
index 1f36885c42cc11..ccbc23adefe3a5 100644
--- a/fe/src/main/java/org/apache/doris/load/Load.java
+++ b/fe/src/main/java/org/apache/doris/load/Load.java
@@ -367,7 +367,7 @@ public boolean addMiniLoadJob(TMiniLoadRequest request) throws DdlException {
     public void addLoadJob(LoadStmt stmt, EtlJobType etlJobType, long timestamp) throws DdlException {
         // get db
         String dbName = stmt.getLabel().getDbName();
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Database[" + dbName + "] does not exist");
         }
@@ -406,7 +406,7 @@ private void addLoadJob(LoadJob job, Database db) throws DdlException {
         try {
             unprotectAddLoadJob(job, false /* not replay */);
             MetricRepo.COUNTER_LOAD_ADD.increase(1L);
-            Catalog.getInstance().getEditLog().logLoadStart(job);
+            Catalog.getCurrentCatalog().getEditLog().logLoadStart(job);
         } finally {
             writeUnlock();
         }
@@ -602,7 +602,7 @@ private LoadJob createLoadJob(LoadStmt stmt, EtlJobType etlJobType,
         }
 
         // job id
-        job.setId(Catalog.getInstance().getNextId());
+        job.setId(Catalog.getCurrentCatalog().getNextId());
 
         return job;
     }
@@ -1341,7 +1341,7 @@ public void replayLoadingLoadJob(LoadJob job) throws DdlException {
     // return true if we truly register a mini load label
     // return false otherwise (eg: a retry request)
     public boolean registerMiniLabel(String fullDbName, String label, long timestamp) throws DdlException {
-        Database db = Catalog.getInstance().getDb(fullDbName);
+        Database db = Catalog.getCurrentCatalog().getDb(fullDbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + fullDbName);
         }
@@ -1371,7 +1371,7 @@ public boolean registerMiniLabel(String fullDbName, String label, long timestamp
     }
 
     public void deregisterMiniLabel(String fullDbName, String label) throws DdlException {
-        Database db = Catalog.getInstance().getDb(fullDbName);
+        Database db = Catalog.getCurrentCatalog().getDb(fullDbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + fullDbName);
         }
@@ -1468,7 +1468,7 @@ private boolean unprotectIsLabelUsed(long dbId, String label, long timestamp, bo
 
     public boolean isLabelExist(String dbName, String label) throws DdlException {
         // get load job and check state
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + dbName);
         }
@@ -1497,7 +1497,7 @@ public boolean cancelLoadJob(CancelLoadStmt stmt) throws DdlException {
         String label = stmt.getLabel();
 
         // get load job and check state
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + dbName);
         }
@@ -1574,7 +1574,7 @@ public boolean cancelLoadJob(LoadJob job, CancelType cancelType, String msg, Lis
         if (job.getBrokerDesc() != null) {
             if (srcState == JobState.ETL) {
                 // Cancel job id
-                Catalog.getInstance().getPullLoadJobMgr().cancelJob(job.getId());
+                Catalog.getCurrentCatalog().getPullLoadJobMgr().cancelJob(job.getId());
             }
         }
         LOG.info("cancel load job success. job: {}", job);
@@ -1988,7 +1988,7 @@ public List> getLoadJobUnfinishedInfo(long jobId) {
         }
 
         long dbId = loadJob.getDbId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             return infos;
         }
@@ -2138,7 +2138,7 @@ public void setLoadErrorHubInfo(Map properties) throws DdlExcept
             loadErrorHubParam = LoadErrorHub.Param.createNullParam();
         }
 
-        Catalog.getInstance().getEditLog().logSetLoadErrorHub(loadErrorHubParam);
+        Catalog.getCurrentCatalog().getEditLog().logSetLoadErrorHub(loadErrorHubParam);
 
         LOG.info("set load error hub info: {}", loadErrorHubParam);
     }
@@ -2164,7 +2164,7 @@ public JobInfo(String dbName, String label, String clusterName) {
     public void getJobInfo(JobInfo info) throws DdlException, MetaNotFoundException {
         String fullDbName = ClusterNamespace.getFullName(info.clusterName, info.dbName);
         info.dbName = fullDbName;
-        Database db = Catalog.getInstance().getDb(fullDbName);
+        Database db = Catalog.getCurrentCatalog().getDb(fullDbName);
         if (db == null) {
             throw new MetaNotFoundException("Unknown database(" + info.dbName + ")");
         }
@@ -2588,7 +2588,7 @@ public void clearJob(LoadJob job, JobState srcState) {
                     }
 
                     long dbId = job.getDbId();
-                    Database db = Catalog.getInstance().getDb(dbId);
+                    Database db = Catalog.getCurrentCatalog().getDb(dbId);
                     if (db == null) {
                         LOG.warn("db does not exist. id: {}", dbId);
                         break;
@@ -2621,7 +2621,7 @@ public boolean updateLoadJobState(LoadJob job, JobState destState, CancelType ca
 
         long jobId = job.getId();
         long dbId = job.getDbId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         String errMsg = msg;
         if (db == null) {
             // if db is null, update job to cancelled
@@ -2660,7 +2660,7 @@ public boolean updateLoadJobState(LoadJob job, JobState destState, CancelType ca
                             job.setProgress(0);
                             job.setEtlStartTimeMs(System.currentTimeMillis());
                             job.setState(destState);
-                            Catalog.getInstance().getEditLog().logLoadEtl(job);
+                            Catalog.getCurrentCatalog().getEditLog().logLoadEtl(job);
                             break;
                         case LOADING:
                             idToEtlLoadJob.remove(jobId);
@@ -2668,12 +2668,12 @@ public boolean updateLoadJobState(LoadJob job, JobState destState, CancelType ca
                             job.setProgress(0);
                             job.setLoadStartTimeMs(System.currentTimeMillis());
                             job.setState(destState);
-                            Catalog.getInstance().getEditLog().logLoadLoading(job);
+                            Catalog.getCurrentCatalog().getEditLog().logLoadLoading(job);
                             break;
                         case QUORUM_FINISHED:
                             if (processQuorumFinished(job, db)) {
                                 // Write edit log
-                                Catalog.getInstance().getEditLog().logLoadQuorum(job);
+                                Catalog.getCurrentCatalog().getEditLog().logLoadQuorum(job);
                             } else {
                                 errMsg = "process loading finished fail";
                                 processCancelled(job, cancelType, errMsg, failedMsg);
@@ -2714,7 +2714,7 @@ public boolean updateLoadJobState(LoadJob job, JobState destState, CancelType ca
                                 job.clearRedundantInfoForHistoryJob();
                             }
                             // Write edit log
-                            Catalog.getInstance().getEditLog().logLoadDone(job);
+                            Catalog.getCurrentCatalog().getEditLog().logLoadDone(job);
                             break;
                         case CANCELLED:
                             processCancelled(job, cancelType, errMsg, failedMsg);
@@ -2888,7 +2888,7 @@ private boolean processCancelled(LoadJob job, CancelType cancelType, String msg,
 
         // Clear the Map and Set in this job, reduce the memory cost of canceled load job.
         job.clearRedundantInfoForHistoryJob();
-        Catalog.getInstance().getEditLog().logLoadCancel(job);
+        Catalog.getCurrentCatalog().getEditLog().logLoadCancel(job);
 
         return true;
     }
@@ -3267,7 +3267,7 @@ public void delete(DeleteStmt stmt) throws DdlException {
         String tableName = stmt.getTableName();
         String partitionName = stmt.getPartitionName();
         List conditions = stmt.getDeleteConditions();
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + dbName);
         }
@@ -3315,7 +3315,7 @@ public void delete(DeleteStmt stmt) throws DdlException {
                           deleteConditions, true);
             addRunningPartition = checkAndAddRunningSyncDeleteJob(partitionId, partitionName);
             // do not use transaction id generator, or the id maybe duplicated
-            long jobId = Catalog.getInstance().getNextId();
+            long jobId = Catalog.getCurrentCatalog().getNextId();
             String jobLabel = "delete_" + UUID.randomUUID();
             // the version info in delete info will be updated after job finished
             DeleteInfo deleteInfo = new DeleteInfo(db.getId(), tableId, tableName,
@@ -3463,7 +3463,7 @@ public int getDeleteInfoNum(long dbId) {
 
     public List> getDeleteInfosByDb(long dbId, boolean forUser) {
         LinkedList> infos = new LinkedList>();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             return infos;
         }
diff --git a/fe/src/main/java/org/apache/doris/load/LoadChecker.java b/fe/src/main/java/org/apache/doris/load/LoadChecker.java
index da40d229a2bd5f..d6e0cb7d862f7a 100644
--- a/fe/src/main/java/org/apache/doris/load/LoadChecker.java
+++ b/fe/src/main/java/org/apache/doris/load/LoadChecker.java
@@ -135,7 +135,7 @@ protected void runAfterCatalogReady() {
     }
 
     private void runPendingJobs() {
-        Load load = Catalog.getInstance().getLoadInstance();
+        Load load = Catalog.getCurrentCatalog().getLoadInstance();
         List pendingJobs = load.getLoadJobs(JobState.PENDING);
 
         // check to limit running etl job num
@@ -183,7 +183,7 @@ private void runPendingJobs() {
     }
 
     private void runEtlJobs() {
-        List etlJobs = Catalog.getInstance().getLoadInstance().getLoadJobs(JobState.ETL);
+        List etlJobs = Catalog.getCurrentCatalog().getLoadInstance().getLoadJobs(JobState.ETL);
         for (LoadJob job : etlJobs) {
             try {
                 MasterTask task = null;
@@ -214,7 +214,7 @@ private void runEtlJobs() {
     }
     
     private void runLoadingJobs() {
-        List loadingJobs = Catalog.getInstance().getLoadInstance().getLoadJobs(JobState.LOADING);
+        List loadingJobs = Catalog.getCurrentCatalog().getLoadInstance().getLoadJobs(JobState.LOADING);
         for (LoadJob job : loadingJobs) {
             try {
                 LOG.info("run loading job. job: {}", job);
@@ -227,10 +227,10 @@ private void runLoadingJobs() {
     
     private void runOneLoadingJob(LoadJob job) {
         // check timeout
-        Load load = Catalog.getInstance().getLoadInstance();
+        Load load = Catalog.getCurrentCatalog().getLoadInstance();
         // get db
         long dbId = job.getDbId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             load.cancelLoadJob(job, CancelType.LOAD_RUN_FAIL, "db does not exist. id: " + dbId);
             return;
@@ -307,7 +307,7 @@ private void runOneLoadingJob(LoadJob job) {
     
     private void tryCommitJob(LoadJob job, Database db) {
         // check transaction state
-        Load load = Catalog.getInstance().getLoadInstance();
+        Load load = Catalog.getCurrentCatalog().getLoadInstance();
         GlobalTransactionMgr globalTransactionMgr = Catalog.getCurrentGlobalTransactionMgr();
         TransactionState transactionState = globalTransactionMgr.getTransactionState(job.getDbId(), job.getTransactionId());
         List tabletCommitInfos = new ArrayList();
@@ -360,7 +360,7 @@ private Set submitPushTasks(LoadJob job, Database db) {
             }
             TableLoadInfo tableLoadInfo = tableEntry.getValue();
             // check if the job is submit during rollup
-            RollupJob rollupJob = (RollupJob) Catalog.getInstance().getRollupHandler().getAlterJob(tableId);
+            RollupJob rollupJob = (RollupJob) Catalog.getCurrentCatalog().getRollupHandler().getAlterJob(tableId);
             boolean autoLoadToTwoTablet = true;
             if (rollupJob != null && job.getTransactionId() > 0) {
                 long rollupIndexId = rollupJob.getRollupIndexId();
@@ -512,7 +512,7 @@ private Set submitPushTasks(LoadJob job, Database db) {
     }
     
     private void runQuorumFinishedJobs() {
-        List quorumFinishedJobs = Catalog.getInstance().getLoadInstance().getLoadJobs(
+        List quorumFinishedJobs = Catalog.getCurrentCatalog().getLoadInstance().getLoadJobs(
                 JobState.QUORUM_FINISHED);
         for (LoadJob job : quorumFinishedJobs) {
             try {
@@ -525,7 +525,7 @@ private void runQuorumFinishedJobs() {
 
         // handle async delete job
         List quorumFinishedDeleteJobs =
-                Catalog.getInstance().getLoadInstance().getQuorumFinishedDeleteJobs();
+                Catalog.getCurrentCatalog().getLoadInstance().getQuorumFinishedDeleteJobs();
         for (AsyncDeleteJob job : quorumFinishedDeleteJobs) {
             try {
                 LOG.info("run quorum finished delete job. job: {}", job.getJobId());
@@ -538,9 +538,9 @@ private void runQuorumFinishedJobs() {
     
     private void runOneQuorumFinishedJob(LoadJob job) {
         // if db is null, cancel load job
-        Load load = Catalog.getInstance().getLoadInstance();
+        Load load = Catalog.getCurrentCatalog().getLoadInstance();
         long dbId = job.getDbId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             load.cancelLoadJob(job, CancelType.LOAD_RUN_FAIL, "db does not exist. id: " + dbId);
             return;
@@ -553,9 +553,9 @@ private void runOneQuorumFinishedJob(LoadJob job) {
     }
     
     private void runOneQuorumFinishedDeleteJob(AsyncDeleteJob job) {
-        Load load = Catalog.getInstance().getLoadInstance();
+        Load load = Catalog.getCurrentCatalog().getLoadInstance();
         long dbId = job.getDbId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             load.removeDeleteJobAndSetState(job);
             return;
@@ -566,7 +566,7 @@ private void runOneQuorumFinishedDeleteJob(AsyncDeleteJob job) {
             job.clearTasks();
             job.setState(DeleteState.FINISHED);
             // log
-            Catalog.getInstance().getEditLog().logFinishAsyncDelete(job);
+            Catalog.getCurrentCatalog().getEditLog().logFinishAsyncDelete(job);
             load.removeDeleteJobAndSetState(job);
             LOG.info("delete job {} finished", job.getJobId());
         } finally {
diff --git a/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java b/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
index f398cb30357c91..3afadb7436869a 100644
--- a/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
+++ b/fe/src/main/java/org/apache/doris/load/loadv2/LoadJob.java
@@ -549,7 +549,7 @@ private void checkAuth(String command) throws DdlException {
      * @throws DdlException
      */
     private void checkAuthWithoutAuthInfo(String command) throws DdlException {
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             ErrorReport.reportDdlException(ErrorCode.ERR_BAD_DB_ERROR, dbId);
         }
diff --git a/fe/src/main/java/org/apache/doris/load/loadv2/LoadManager.java b/fe/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
index e0cb91a716d372..95a12b4573a758 100644
--- a/fe/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
+++ b/fe/src/main/java/org/apache/doris/load/loadv2/LoadManager.java
@@ -287,7 +287,7 @@ public void recordFinishedLoadJob(String label, String dbName, long tableId, Etl
     }
 
     public void cancelLoadJob(CancelLoadStmt stmt) throws DdlException {
-        Database db = Catalog.getInstance().getDb(stmt.getDbName());
+        Database db = Catalog.getCurrentCatalog().getDb(stmt.getDbName());
         if (db == null) {
             throw new DdlException("Db does not exist. name: " + stmt.getDbName());
         }
@@ -496,7 +496,7 @@ private void analyzeLoadJobs() {
 
     private Database checkDb(String dbName) throws DdlException {
         // get db
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             LOG.warn("Database {} does not exist", dbName);
             throw new DdlException("Database[" + dbName + "] does not exist");
diff --git a/fe/src/main/java/org/apache/doris/load/loadv2/LoadingTaskPlanner.java b/fe/src/main/java/org/apache/doris/load/loadv2/LoadingTaskPlanner.java
index df9dba54b0f1c7..803e4352b16315 100644
--- a/fe/src/main/java/org/apache/doris/load/loadv2/LoadingTaskPlanner.java
+++ b/fe/src/main/java/org/apache/doris/load/loadv2/LoadingTaskPlanner.java
@@ -68,7 +68,7 @@ public class LoadingTaskPlanner {
 
     // Something useful
     // ConnectContext here is just a dummy object to avoid some NPE problem, like ctx.getDatabase()
-    private Analyzer analyzer = new Analyzer(Catalog.getInstance(), new ConnectContext());
+    private Analyzer analyzer = new Analyzer(Catalog.getCurrentCatalog(), new ConnectContext());
     private DescriptorTable descTable = analyzer.getDescTbl();
 
     // Output params
diff --git a/fe/src/main/java/org/apache/doris/load/routineload/KafkaRoutineLoadJob.java b/fe/src/main/java/org/apache/doris/load/routineload/KafkaRoutineLoadJob.java
index 4ec5a5037b217c..4a95e5743e69b2 100644
--- a/fe/src/main/java/org/apache/doris/load/routineload/KafkaRoutineLoadJob.java
+++ b/fe/src/main/java/org/apache/doris/load/routineload/KafkaRoutineLoadJob.java
@@ -350,7 +350,7 @@ public static KafkaRoutineLoadJob fromCreateStmt(CreateRoutineLoadStmt stmt) thr
         }
 
         // init kafka routine load job
-        long id = Catalog.getInstance().getNextId();
+        long id = Catalog.getCurrentCatalog().getNextId();
         KafkaRoutineLoadJob kafkaRoutineLoadJob = new KafkaRoutineLoadJob(id, stmt.getName(),
                 db.getClusterName(), db.getId(), tableId,
                 stmt.getKafkaBrokerList(), stmt.getKafkaTopic());
diff --git a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java
index 142fcdf5342c9f..d947bd9f987bf9 100644
--- a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java
+++ b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadJob.java
@@ -1010,7 +1010,7 @@ protected void unprotectUpdateState(JobState jobState, ErrorReason reason, boole
         }
 
         if (!isReplay && jobState != JobState.RUNNING) {
-            Catalog.getInstance().getEditLog().logOpRoutineLoadJob(new RoutineLoadOperation(id, jobState));
+            Catalog.getCurrentCatalog().getEditLog().logOpRoutineLoadJob(new RoutineLoadOperation(id, jobState));
         }
         LOG.info(new LogBuilder(LogKey.ROUTINE_LOAD_JOB, id)
                          .add("current_job_state", getState())
diff --git a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
index 061d7fb169b8ca..925e31ef576cb6 100644
--- a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
+++ b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadManager.java
@@ -159,7 +159,7 @@ public void addRoutineLoadJob(RoutineLoadJob routineLoadJob, String dbName) thro
             }
 
             unprotectedAddJob(routineLoadJob);
-            Catalog.getInstance().getEditLog().logCreateRoutineLoadJob(routineLoadJob);
+            Catalog.getCurrentCatalog().getEditLog().logCreateRoutineLoadJob(routineLoadJob);
             LOG.info("create routine load job: id: {}, name: {}", routineLoadJob.getId(), routineLoadJob.getName());
         } finally {
             writeUnlock();
@@ -538,7 +538,7 @@ public void cleanOldRoutineLoadJobs() {
 
                     RoutineLoadOperation operation = new RoutineLoadOperation(routineLoadJob.getId(),
                                                                               routineLoadJob.getState());
-                    Catalog.getInstance().getEditLog().logRemoveRoutineLoadJob(operation);
+                    Catalog.getCurrentCatalog().getEditLog().logRemoveRoutineLoadJob(operation);
                     LOG.info(new LogBuilder(LogKey.ROUTINE_LOAD_JOB, routineLoadJob.getId())
                                      .add("end_timestamp", routineLoadJob.getEndTimestamp())
                                      .add("current_timestamp", currentTimestamp)
diff --git a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadScheduler.java b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadScheduler.java
index 35057bee233134..03602c305fbd08 100644
--- a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadScheduler.java
+++ b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadScheduler.java
@@ -43,7 +43,7 @@ public class RoutineLoadScheduler extends MasterDaemon {
     @VisibleForTesting
     public RoutineLoadScheduler() {
         super();
-        routineLoadManager = Catalog.getInstance().getRoutineLoadManager();
+        routineLoadManager = Catalog.getCurrentCatalog().getRoutineLoadManager();
     }
 
     public RoutineLoadScheduler(RoutineLoadManager routineLoadManager) {
diff --git a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java
index d2b1b58adbc517..43c319b51947e4 100644
--- a/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java
+++ b/fe/src/main/java/org/apache/doris/load/routineload/RoutineLoadTaskScheduler.java
@@ -69,7 +69,7 @@ public class RoutineLoadTaskScheduler extends MasterDaemon {
     @VisibleForTesting
     public RoutineLoadTaskScheduler() {
         super("Routine load task scheduler", 0);
-        this.routineLoadManager = Catalog.getInstance().getRoutineLoadManager();
+        this.routineLoadManager = Catalog.getCurrentCatalog().getRoutineLoadManager();
     }
 
     public RoutineLoadTaskScheduler(RoutineLoadManager routineLoadManager) {
diff --git a/fe/src/main/java/org/apache/doris/master/Checkpoint.java b/fe/src/main/java/org/apache/doris/master/Checkpoint.java
index 9c469624efeac5..2542c312185c90 100644
--- a/fe/src/main/java/org/apache/doris/master/Checkpoint.java
+++ b/fe/src/main/java/org/apache/doris/master/Checkpoint.java
@@ -124,14 +124,14 @@ protected void runAfterCatalogReady() {
         
         // push image file to all the other non master nodes
         // DO NOT get other nodes from HaProtocol, because node may not in bdbje replication group yet.
-        List allFrontends = Catalog.getInstance().getFrontends(null);
+        List allFrontends = Catalog.getCurrentCatalog().getFrontends(null);
         int successPushed = 0;
         int otherNodesCount = 0;
         if (!allFrontends.isEmpty()) {
             otherNodesCount = allFrontends.size() - 1; // skip master itself
             for (Frontend fe : allFrontends) {
                 String host = fe.getHost();
-                if (host.equals(Catalog.getInstance().getMasterIp())) {
+                if (host.equals(Catalog.getCurrentCatalog().getMasterIp())) {
                     // skip master itself
                     continue;
                 }
@@ -160,7 +160,7 @@ protected void runAfterCatalogReady() {
             if (successPushed > 0) {
                 for (Frontend fe : allFrontends) {
                     String host = fe.getHost();
-                    if (host.equals(Catalog.getInstance().getMasterIp())) {
+                    if (host.equals(Catalog.getCurrentCatalog().getMasterIp())) {
                         // skip master itself
                         continue;
                     }
diff --git a/fe/src/main/java/org/apache/doris/master/MasterImpl.java b/fe/src/main/java/org/apache/doris/master/MasterImpl.java
index 1ed648529875b7..25c3f9fb1f6a07 100644
--- a/fe/src/main/java/org/apache/doris/master/MasterImpl.java
+++ b/fe/src/main/java/org/apache/doris/master/MasterImpl.java
@@ -290,7 +290,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) {
         long backendId = pushTask.getBackendId();
         long signature = task.getSignature();
         long transactionId = ((PushTask) task).getTransactionId();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             AgentTaskQueue.removeTask(backendId, TTaskType.REALTIME_PUSH, signature);
             return;
@@ -349,7 +349,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) {
             // TODO yiguolei: why delete should check request version and task version?
             if (pushTask.getPushType() == TPushType.LOAD || pushTask.getPushType() == TPushType.LOAD_DELETE) {
                 long loadJobId = pushTask.getLoadJobId();
-                LoadJob job = Catalog.getInstance().getLoadInstance().getLoadJob(loadJobId);
+                LoadJob job = Catalog.getCurrentCatalog().getLoadInstance().getLoadJob(loadJobId);
                 if (job == null) {
                     throw new MetaNotFoundException("cannot find load job, job[" + loadJobId + "]");
                 }
@@ -364,7 +364,7 @@ private void finishRealtimePush(AgentTask task, TFinishTaskRequest request) {
                     }
                 }
             } else if (pushTask.getPushType() == TPushType.DELETE) {
-                DeleteJob deleteJob = Catalog.getInstance().getDeleteHandler().getDeleteJob(transactionId);
+                DeleteJob deleteJob = Catalog.getCurrentCatalog().getDeleteHandler().getDeleteJob(transactionId);
                 if (deleteJob == null) {
                     throw new MetaNotFoundException("cannot find delete job, job[" + transactionId + "]");
                 }
@@ -424,7 +424,7 @@ private Replica findRelatedReplica(OlapTable olapTable, Partition partition,
         MaterializedIndex index = partition.getIndex(indexId);
         if (index == null) { 
             // this means the index is under rollup
-            MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+            MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
             AlterJob alterJob = materializedViewHandler.getAlterJob(olapTable.getId());
             if (alterJob == null && olapTable.getState() == OlapTableState.ROLLUP) {
                 // this happens when:
@@ -480,7 +480,7 @@ private void finishPush(AgentTask task, TFinishTaskRequest request) {
         long dbId = pushTask.getDbId();
         long backendId = pushTask.getBackendId();
         long signature = task.getSignature();
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             AgentTaskQueue.removePushTask(backendId, signature, finishVersion, finishVersionHash, 
                                           pushTask.getPushType(), pushTask.getTaskType());
@@ -546,7 +546,7 @@ private void finishPush(AgentTask task, TFinishTaskRequest request) {
             if (pushTask.getPushType() == TPushType.LOAD || pushTask.getPushType() == TPushType.LOAD_DELETE) {
                 // handle load job
                 long loadJobId = pushTask.getLoadJobId();
-                LoadJob job = Catalog.getInstance().getLoadInstance().getLoadJob(loadJobId);
+                LoadJob job = Catalog.getCurrentCatalog().getLoadInstance().getLoadJob(loadJobId);
                 if (job == null) {
                     throw new MetaNotFoundException("cannot find load job, job[" + loadJobId + "]");
                 }
@@ -567,7 +567,7 @@ private void finishPush(AgentTask task, TFinishTaskRequest request) {
                 } else {
                     long asyncDeleteJobId = pushTask.getAsyncDeleteJobId();
                     Preconditions.checkState(asyncDeleteJobId != -1);
-                    AsyncDeleteJob job = Catalog.getInstance().getLoadInstance().getAsyncDeleteJob(asyncDeleteJobId);
+                    AsyncDeleteJob job = Catalog.getCurrentCatalog().getLoadInstance().getAsyncDeleteJob(asyncDeleteJobId);
                     if (job == null) {
                         throw new MetaNotFoundException("cannot find async delete job, job[" + asyncDeleteJobId + "]");
                     }
@@ -648,7 +648,7 @@ private ReplicaPersistInfo updateReplicaInfo(OlapTable olapTable, Partition part
                 return null;
             }
 
-            MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+            MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
             AlterJob alterJob = materializedViewHandler.getAlterJob(olapTable.getId());
             if (alterJob == null) {
                 // this happends when:
@@ -671,7 +671,7 @@ private ReplicaPersistInfo updateReplicaInfo(OlapTable olapTable, Partition part
         int currentSchemaHash = olapTable.getSchemaHashByIndexId(pushIndexId);
         if (schemaHash != currentSchemaHash) {
             if (pushState == PartitionState.SCHEMA_CHANGE) {
-                SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+                SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
                 AlterJob alterJob = schemaChangeHandler.getAlterJob(olapTable.getId());
                 if (alterJob != null && schemaHash != ((SchemaChangeJob) alterJob).getSchemaHashByIndexId(pushIndexId)) {
                     // this is a invalid tablet.
@@ -718,7 +718,7 @@ private void finishSchemaChange(AgentTask task, List finishTabletIn
         Preconditions.checkArgument(finishTabletInfos.size() == 1);
 
         SchemaChangeTask schemaChangeTask = (SchemaChangeTask) task;
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
         schemaChangeHandler.handleFinishedReplica(schemaChangeTask, finishTabletInfos.get(0), reportVersion);
         AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.SCHEMA_CHANGE, task.getSignature());
     }
@@ -729,7 +729,7 @@ private void finishRollup(AgentTask task, List finishTabletInfos)
         Preconditions.checkArgument(finishTabletInfos.size() == 1);
 
         CreateRollupTask createRollupTask = (CreateRollupTask) task;
-        MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+        MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
         materializedViewHandler.handleFinishedReplica(createRollupTask, finishTabletInfos.get(0), -1L);
         AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.ROLLUP, task.getSignature());
     }
@@ -754,14 +754,14 @@ private void finishConsistenctCheck(AgentTask task, TFinishTaskRequest request)
             return;
         }
 
-        Catalog.getInstance().getConsistencyChecker().handleFinishedConsistencyCheck(checkConsistencyTask,
+        Catalog.getCurrentCatalog().getConsistencyChecker().handleFinishedConsistencyCheck(checkConsistencyTask,
                                                                                      request.getTablet_checksum());
         AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.CHECK_CONSISTENCY, task.getSignature());
     }
 
     private void finishMakeSnapshot(AgentTask task, TFinishTaskRequest request) {
         SnapshotTask snapshotTask = (SnapshotTask) task;
-        if (Catalog.getInstance().getBackupHandler().handleFinishedSnapshotTask(snapshotTask, request)) {
+        if (Catalog.getCurrentCatalog().getBackupHandler().handleFinishedSnapshotTask(snapshotTask, request)) {
             AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.MAKE_SNAPSHOT, task.getSignature());
         }
 
@@ -769,21 +769,21 @@ private void finishMakeSnapshot(AgentTask task, TFinishTaskRequest request) {
 
     private void finishUpload(AgentTask task, TFinishTaskRequest request) {
         UploadTask uploadTask = (UploadTask) task;
-        if (Catalog.getInstance().getBackupHandler().handleFinishedSnapshotUploadTask(uploadTask, request)) {
+        if (Catalog.getCurrentCatalog().getBackupHandler().handleFinishedSnapshotUploadTask(uploadTask, request)) {
             AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.UPLOAD, task.getSignature());
         }
     }
 
     private void finishDownloadTask(AgentTask task, TFinishTaskRequest request) {
         DownloadTask downloadTask = (DownloadTask) task;
-        if (Catalog.getInstance().getBackupHandler().handleDownloadSnapshotTask(downloadTask, request)) {
+        if (Catalog.getCurrentCatalog().getBackupHandler().handleDownloadSnapshotTask(downloadTask, request)) {
             AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.DOWNLOAD, task.getSignature());
         }
     }
 
     private void finishMoveDirTask(AgentTask task, TFinishTaskRequest request) {
         DirMoveTask dirMoveTask = (DirMoveTask) task;
-        if (Catalog.getInstance().getBackupHandler().handleDirMoveTask(dirMoveTask, request)) {
+        if (Catalog.getCurrentCatalog().getBackupHandler().handleDirMoveTask(dirMoveTask, request)) {
             AgentTaskQueue.removeTask(task.getBackendId(), TTaskType.MOVE, task.getSignature());
         }
     }
@@ -797,7 +797,7 @@ public TMasterResult report(TReportRequest request) throws TException {
     }
 
     public TFetchResourceResult fetchResource() {
-        return Catalog.getInstance().getAuth().toResourceThrift();
+        return Catalog.getCurrentCatalog().getAuth().toResourceThrift();
     }
 
     private void finishAlterTask(AgentTask task) {
diff --git a/fe/src/main/java/org/apache/doris/master/ReportHandler.java b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
index 6dfbb54d161f61..b8448f5474fa97 100644
--- a/fe/src/main/java/org/apache/doris/master/ReportHandler.java
+++ b/fe/src/main/java/org/apache/doris/master/ReportHandler.java
@@ -248,7 +248,7 @@ private static void tabletReport(long backendId, Map backendTable
                  backendId, backendTablets.size(), backendReportVersion);
 
         // storage medium map
-        HashMap storageMediumMap = Catalog.getInstance().getPartitionIdToStorageMediumMap();
+        HashMap storageMediumMap = Catalog.getCurrentCatalog().getPartitionIdToStorageMediumMap();
 
         // db id -> tablet id
         ListMultimap tabletSyncMap = LinkedListMultimap.create();
@@ -369,7 +369,7 @@ private static void sync(Map backendTablets, ListMultimap backendTablets, ListMultimap tabletDeleteFromMeta
         AgentBatchTask createReplicaBatchTask = new AgentBatchTask();
         TabletInvertedIndex invertedIndex = Catalog.getCurrentInvertedIndex();
         for (Long dbId : tabletDeleteFromMeta.keySet()) {
-            Database db = Catalog.getInstance().getDb(dbId);
+            Database db = Catalog.getCurrentCatalog().getDb(dbId);
             if (db == null) {
                 continue;
             }
@@ -587,7 +587,7 @@ private static void deleteFromMeta(ListMultimap tabletDeleteFromMeta
                                         tabletsInfo.setBad(true);
                                         tabletsInfo.addTabletWithSchemaHash(tabletId,
                                                 olapTable.getSchemaHashByIndexId(indexId));
-                                        Catalog.getInstance().getEditLog().logBackendTabletsInfo(tabletsInfo);
+                                        Catalog.getCurrentCatalog().getEditLog().logBackendTabletsInfo(tabletsInfo);
                                     }
 
                                 }
@@ -605,7 +605,7 @@ private static void deleteFromMeta(ListMultimap tabletDeleteFromMeta
                         ReplicaPersistInfo info = ReplicaPersistInfo.createForDelete(dbId, tableId, partitionId,
                                                                                      indexId, tabletId, backendId);
 
-                        Catalog.getInstance().getEditLog().logDeleteReplica(info);
+                        Catalog.getCurrentCatalog().getEditLog().logDeleteReplica(info);
                         LOG.warn("delete replica[{}] in tablet[{}] from meta. backend[{}], report version: {}"
                                 + ", current report version: {}",
                                 replica.getId(), tabletId, backendId, backendReportVersion,
@@ -748,7 +748,7 @@ private static void handleRecoverTablet(ListMultimap tabletRecoveryM
             BackendTabletsInfo backendTabletsInfo = new BackendTabletsInfo(backendId);
             backendTabletsInfo.setBad(true);
             for (Long dbId : tabletRecoveryMap.keySet()) {
-                Database db = Catalog.getInstance().getDb(dbId);
+                Database db = Catalog.getCurrentCatalog().getDb(dbId);
                 if (db == null) {
                     continue;
                 }
@@ -832,7 +832,7 @@ private static void handleRecoverTablet(ListMultimap tabletRecoveryM
 
             if (!backendTabletsInfo.isEmpty()) {
                 // need to write edit log the sync the bad info to other FEs
-                Catalog.getInstance().getEditLog().logBackendTabletsInfo(backendTabletsInfo);
+                Catalog.getCurrentCatalog().getEditLog().logBackendTabletsInfo(backendTabletsInfo);
             }
 
             return;
@@ -887,7 +887,7 @@ private static void handleSetTabletInMemory(long backendId, Map b
                 long tableId = invertedIndex.getTableId(tabletId);
                 long partitionId = invertedIndex.getPartitionId(tabletId);
 
-                Database db = Catalog.getInstance().getDb(dbId);
+                Database db = Catalog.getCurrentCatalog().getDb(dbId);
                 if (db == null) {
                     continue;
                 }
@@ -948,7 +948,7 @@ private static void addReplica(long tabletId, TTabletInfo backendTabletInfo, lon
         long dataSize = backendTabletInfo.getData_size();
         long rowCount = backendTabletInfo.getRow_count();
 
-        Database db = Catalog.getInstance().getDb(dbId);
+        Database db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             throw new MetaNotFoundException("db[" + dbId + "] does not exist");
         }
@@ -1025,7 +1025,7 @@ private static void addReplica(long tabletId, TTabletInfo backendTabletInfo, lon
                     lastFailedVersionHash = partition.getCommittedVersionHash();
                 }
 
-                long replicaId = Catalog.getInstance().getNextId();
+                long replicaId = Catalog.getCurrentCatalog().getNextId();
                 Replica replica = new Replica(replicaId, backendId, version, versionHash, schemaHash,
                                               dataSize, rowCount, ReplicaState.NORMAL, 
                                               lastFailedVersion, lastFailedVersionHash, version, versionHash);
@@ -1038,7 +1038,7 @@ private static void addReplica(long tabletId, TTabletInfo backendTabletInfo, lon
                         lastFailedVersion, lastFailedVersionHash,
                         version, versionHash);
 
-                Catalog.getInstance().getEditLog().logAddReplica(info);
+                Catalog.getCurrentCatalog().getEditLog().logAddReplica(info);
 
                 LOG.info("add replica[{}-{}] to catalog. backend[{}]", tabletId, replicaId, backendId);
             } else {
diff --git a/fe/src/main/java/org/apache/doris/metric/MetricRepo.java b/fe/src/main/java/org/apache/doris/metric/MetricRepo.java
index bbd3a7dfa061db..9ce0095deb74ec 100644
--- a/fe/src/main/java/org/apache/doris/metric/MetricRepo.java
+++ b/fe/src/main/java/org/apache/doris/metric/MetricRepo.java
@@ -100,7 +100,7 @@ public static synchronized void init() {
                         MetricUnit.NUMBER, "job statistics") {
                     @Override
                     public Long getValue() {
-                        if (!Catalog.getInstance().isMaster()) {
+                        if (!Catalog.getCurrentCatalog().isMaster()) {
                             return 0L;
                         }
                         return loadManger.getLoadJobNum(state, jobType);
@@ -114,7 +114,7 @@ public Long getValue() {
         }
 
         // running alter job
-        Alter alter = Catalog.getInstance().getAlterInstance();
+        Alter alter = Catalog.getCurrentCatalog().getAlterInstance();
         for (JobType jobType : JobType.values()) {
             if (jobType != JobType.SCHEMA_CHANGE && jobType != JobType.ROLLUP) {
                 continue;
@@ -124,7 +124,7 @@ public Long getValue() {
                     MetricUnit.NUMBER, "job statistics") {
                 @Override
                 public Long getValue() {
-                    if (!Catalog.getInstance().isMaster()) {
+                    if (!Catalog.getCurrentCatalog().isMaster()) {
                         return 0L;
                     }
                     if (jobType == JobType.SCHEMA_CHANGE) {
@@ -158,7 +158,7 @@ public Integer getValue() {
                 "max_journal_id", MetricUnit.NUMBER, "max journal id of this frontends") {
             @Override
             public Long getValue() {
-                EditLog editLog = Catalog.getInstance().getEditLog();
+                EditLog editLog = Catalog.getCurrentCatalog().getEditLog();
                 if (editLog == null) {
                     return -1L;
                 }
@@ -172,7 +172,7 @@ public Long getValue() {
                 "scheduled_tablet_num", MetricUnit.NUMBER, "number of tablets being scheduled") {
             @Override
             public Long getValue() {
-                if (!Catalog.getInstance().isMaster()) {
+                if (!Catalog.getCurrentCatalog().isMaster()) {
                     return 0L;
                 }
                 return (long) Catalog.getCurrentCatalog().getTabletScheduler().getTotalNum();
@@ -270,7 +270,7 @@ public static void generateBackendsTabletMetrics() {
                     MetricUnit.NUMBER, "tablet number") {
                 @Override
                 public Long getValue() {
-                    if (!Catalog.getInstance().isMaster()) {
+                    if (!Catalog.getCurrentCatalog().isMaster()) {
                         return 0L;
                     }
                     return (long) invertedIndex.getTabletNumByBackendId(beId);
@@ -285,7 +285,7 @@ public Long getValue() {
                     "tablet max compaction score") {
                 @Override
                 public Long getValue() {
-                    if (!Catalog.getInstance().isMaster()) {
+                    if (!Catalog.getCurrentCatalog().isMaster()) {
                         return 0L;
                     }
                     return be.getTabletMaxCompactionScore();
diff --git a/fe/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java b/fe/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
index d4a638d83023ed..6deba5bb71294c 100644
--- a/fe/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
+++ b/fe/src/main/java/org/apache/doris/metric/PrometheusMetricVisitor.java
@@ -183,7 +183,7 @@ public void getNodeInfo(StringBuilder sb) {
         final String NODE_INFO = "node_info";
         sb.append(Joiner.on(" ").join(TYPE, NODE_INFO, "gauge\n"));
         sb.append(NODE_INFO).append("{type=\"fe_node_num\", state=\"total\"} ")
-                .append(Catalog.getInstance().getFrontends(null).size()).append("\n");
+                .append(Catalog.getCurrentCatalog().getFrontends(null).size()).append("\n");
         sb.append(NODE_INFO).append("{type=\"be_node_num\", state=\"total\"} ")
                 .append(Catalog.getCurrentSystemInfo().getBackendIds(false).size()).append("\n");
         sb.append(NODE_INFO).append("{type=\"be_node_num\", state=\"alive\"} ")
diff --git a/fe/src/main/java/org/apache/doris/mysql/MysqlProto.java b/fe/src/main/java/org/apache/doris/mysql/MysqlProto.java
index 5e8f42a3ce07d4..11b67d63ad28da 100644
--- a/fe/src/main/java/org/apache/doris/mysql/MysqlProto.java
+++ b/fe/src/main/java/org/apache/doris/mysql/MysqlProto.java
@@ -64,7 +64,7 @@ private static boolean authenticate(ConnectContext context, byte[] scramble, byt
             clusterName = strList[1];
             try {
                 // if cluster does not exist and it is not a valid cluster id, authenticate failed
-                if (Catalog.getInstance().getCluster(clusterName) == null 
+                if (Catalog.getCurrentCatalog().getCluster(clusterName) == null 
                         && Integer.valueOf(strList[1]) != context.getCatalog().getClusterId()) {
                     ErrorReport.report(ErrorCode.ERR_UNKNOWN_CLUSTER_ID, strList[1]);
                     return false;
@@ -179,7 +179,7 @@ public static boolean negotiate(ConnectContext context) throws IOException {
         if (!Strings.isNullOrEmpty(db)) {
             try {
                 String dbFullName = ClusterNamespace.getFullName(context.getClusterName(), db);
-                Catalog.getInstance().changeDb(context, dbFullName);
+                Catalog.getCurrentCatalog().changeDb(context, dbFullName);
             } catch (DdlException e) {
                 sendResponsePacket(context);
                 return false;
diff --git a/fe/src/main/java/org/apache/doris/mysql/MysqlServer.java b/fe/src/main/java/org/apache/doris/mysql/MysqlServer.java
index c93a9ec4d02b36..28980d649fba4d 100644
--- a/fe/src/main/java/org/apache/doris/mysql/MysqlServer.java
+++ b/fe/src/main/java/org/apache/doris/mysql/MysqlServer.java
@@ -107,7 +107,7 @@ public void run() {
                     // submit this context to scheduler
                     ConnectContext context = new ConnectContext(clientChannel);
                     // Set catalog here.
-                    context.setCatalog(Catalog.getInstance());
+                    context.setCatalog(Catalog.getCurrentCatalog());
                     if (!scheduler.submit(context)) {
                         LOG.warn("Submit one connect request failed. Client=" + clientChannel.toString());
                         // clear up context
diff --git a/fe/src/main/java/org/apache/doris/mysql/nio/AcceptListener.java b/fe/src/main/java/org/apache/doris/mysql/nio/AcceptListener.java
index 97e81224309811..dad1bd91e41eae 100644
--- a/fe/src/main/java/org/apache/doris/mysql/nio/AcceptListener.java
+++ b/fe/src/main/java/org/apache/doris/mysql/nio/AcceptListener.java
@@ -49,7 +49,7 @@ public void handleEvent(AcceptingChannel channel) {
             }
             LOG.info("Connection established. remote={}", connection.getPeerAddress());
             NConnectContext context = new NConnectContext(connection);
-            context.setCatalog(Catalog.getInstance());
+            context.setCatalog(Catalog.getCurrentCatalog());
             connectScheduler.submit(context);
 
             channel.getWorker().execute(() -> {
diff --git a/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java b/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java
index 4d0db14412bd71..5df36ae9abc126 100644
--- a/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java
+++ b/fe/src/main/java/org/apache/doris/planner/BrokerScanNode.java
@@ -317,7 +317,7 @@ private TScanRangeLocations newLocations(TBrokerScanRangeParams params, String b
 
         FsBroker broker = null;
         try {
-            broker = Catalog.getInstance().getBrokerMgr().getBroker(brokerName, selectedBackend.getHost());
+            broker = Catalog.getCurrentCatalog().getBrokerMgr().getBroker(brokerName, selectedBackend.getHost());
         } catch (AnalysisException e) {
             throw new UserException(e.getMessage());
         }
diff --git a/fe/src/main/java/org/apache/doris/planner/ExportSink.java b/fe/src/main/java/org/apache/doris/planner/ExportSink.java
index 41c0f65bbf02c0..75cecd1628cf0e 100644
--- a/fe/src/main/java/org/apache/doris/planner/ExportSink.java
+++ b/fe/src/main/java/org/apache/doris/planner/ExportSink.java
@@ -66,7 +66,7 @@ protected TDataSink toThrift() {
         TDataSink result = new TDataSink(TDataSinkType.EXPORT_SINK);
         TExportSink tExportSink = new TExportSink(TFileType.FILE_BROKER, exportPath, columnSeparator, lineDelimiter);
 
-        FsBroker broker = Catalog.getInstance().getBrokerMgr().getAnyBroker(brokerDesc.getName());
+        FsBroker broker = Catalog.getCurrentCatalog().getBrokerMgr().getAnyBroker(brokerDesc.getName());
         if (broker != null) {
             tExportSink.addToBroker_addresses(new TNetworkAddress(broker.ip, broker.port));
         }
diff --git a/fe/src/main/java/org/apache/doris/qe/ConnectProcessor.java b/fe/src/main/java/org/apache/doris/qe/ConnectProcessor.java
index de77ebb07f3932..74833ab144c80c 100644
--- a/fe/src/main/java/org/apache/doris/qe/ConnectProcessor.java
+++ b/fe/src/main/java/org/apache/doris/qe/ConnectProcessor.java
@@ -376,7 +376,7 @@ private void finalizeCommand() throws IOException {
     public TMasterOpResult proxyExecute(TMasterOpRequest request) {
         ctx.setDatabase(request.db);
         ctx.setQualifiedUser(request.user);
-        ctx.setCatalog(Catalog.getInstance());
+        ctx.setCatalog(Catalog.getCurrentCatalog());
         ctx.getState().reset();
         if (request.isSetCluster()) {
             ctx.setCluster(request.cluster);
@@ -443,7 +443,7 @@ public TMasterOpResult proxyExecute(TMasterOpRequest request) {
             // return error directly.
             TMasterOpResult result = new TMasterOpResult();
             ctx.getState().setError("Missing current user identity. You need to upgrade this Frontend to the same version as Master Frontend.");
-            result.setMaxJournalId(Catalog.getInstance().getMaxJournalId().longValue());
+            result.setMaxJournalId(Catalog.getCurrentCatalog().getMaxJournalId().longValue());
             result.setPacket(getResultPacket());
             return result;
         }
@@ -467,7 +467,7 @@ public TMasterOpResult proxyExecute(TMasterOpRequest request) {
         // no matter the master execute success or fail, the master must transfer the result to follower
         // and tell the follower the current jounalID.
         TMasterOpResult result = new TMasterOpResult();
-        result.setMaxJournalId(Catalog.getInstance().getMaxJournalId().longValue());
+        result.setMaxJournalId(Catalog.getCurrentCatalog().getMaxJournalId().longValue());
         result.setPacket(getResultPacket());
         if (executor != null && executor.getProxyResultSet() != null) {
             result.setResultSet(executor.getProxyResultSet().tothrift());
diff --git a/fe/src/main/java/org/apache/doris/qe/JournalObserver.java b/fe/src/main/java/org/apache/doris/qe/JournalObserver.java
index c36efeac324140..6e7d0fa050b4ee 100644
--- a/fe/src/main/java/org/apache/doris/qe/JournalObserver.java
+++ b/fe/src/main/java/org/apache/doris/qe/JournalObserver.java
@@ -67,7 +67,7 @@ public void waitForReplay(int timeoutMs) throws DdlException {
             boolean ok = false;
             do {
                 // check if the replayed journal version is already larger than the expected version
-                long replayedJournalId = Catalog.getInstance().getReplayedJournalId();
+                long replayedJournalId = Catalog.getCurrentCatalog().getReplayedJournalId();
                 if (replayedJournalId >= targetJournalVersion || timeoutMs <= 0) {
                     LOG.debug("the replayed journal version {} already large than expected version: {}",
                               replayedJournalId, targetJournalVersion);
diff --git a/fe/src/main/java/org/apache/doris/qe/MultiLoadMgr.java b/fe/src/main/java/org/apache/doris/qe/MultiLoadMgr.java
index 36f2cb57c8b5d5..a9b5a4c5985c63 100644
--- a/fe/src/main/java/org/apache/doris/qe/MultiLoadMgr.java
+++ b/fe/src/main/java/org/apache/doris/qe/MultiLoadMgr.java
@@ -126,7 +126,7 @@ public void commit(String fullDbName, String label) throws DdlException {
             if (multiLoadDesc == null) {
                 throw new DdlException("Unknown label(" + multiLabel + ")");
             }
-            Catalog.getInstance().getLoadInstance().addLoadJob(
+            Catalog.getCurrentCatalog().getLoadInstance().addLoadJob(
                     multiLoadDesc.toLoadStmt(),
                     EtlJobType.MINI,
                     System.currentTimeMillis());
@@ -134,7 +134,7 @@ public void commit(String fullDbName, String label) throws DdlException {
         } finally {
             lock.writeLock().unlock();
         }
-        Catalog.getInstance().getLoadInstance().deregisterMiniLabel(fullDbName, label);
+        Catalog.getCurrentCatalog().getLoadInstance().deregisterMiniLabel(fullDbName, label);
     }
 
     // Abort a in-progress multi-load job
@@ -150,7 +150,7 @@ public void abort(String fullDbName, String label) throws DdlException {
         } finally {
             lock.writeLock().unlock();
         }
-        Catalog.getInstance().getLoadInstance().deregisterMiniLabel(fullDbName, label);
+        Catalog.getCurrentCatalog().getLoadInstance().deregisterMiniLabel(fullDbName, label);
     }
 
     public void desc(String fullDbName, String label, List subLabels) throws DdlException {
diff --git a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
index 42c09420b36155..0807a8503742ac 100644
--- a/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -755,7 +755,7 @@ private void handleHelp() {
     private void handleShowLoad() throws AnalysisException {
         ShowLoadStmt showStmt = (ShowLoadStmt) stmt;
 
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Database db = catalog.getDb(showStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showStmt.getDbName());
@@ -826,7 +826,7 @@ private void handleShowLoadWarnings() throws AnalysisException {
             return;
         }
 
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Database db = catalog.getDb(showWarningsStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showWarningsStmt.getDbName());
@@ -1048,7 +1048,7 @@ private void handleShowUserProperty() throws AnalysisException {
     private void handleShowDelete() throws AnalysisException {
         ShowDeleteStmt showStmt = (ShowDeleteStmt) stmt;
 
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Database db = catalog.getDb(showStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showStmt.getDbName());
@@ -1121,7 +1121,7 @@ private void handleShowTablet() throws AnalysisException {
         ShowTabletStmt showStmt = (ShowTabletStmt) stmt;
         List> rows = Lists.newArrayList();
 
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         if (showStmt.isShowSingleTablet()) {
             long tabletId = showStmt.getTabletId();
             TabletInvertedIndex invertedIndex = Catalog.getCurrentInvertedIndex();
@@ -1301,7 +1301,7 @@ private void handleShowTablet() throws AnalysisException {
     // Handle show brokers
     private void handleShowBroker() {
         ShowBrokerStmt showStmt = (ShowBrokerStmt) stmt;
-        List> rowSet = Catalog.getInstance().getBrokerMgr().getBrokersInfo();
+        List> rowSet = Catalog.getCurrentCatalog().getBrokerMgr().getBrokersInfo();
 
         // Only success
         resultSet = new ShowResultSet(showStmt.getMetaData(), rowSet);
@@ -1310,7 +1310,7 @@ private void handleShowBroker() {
     // Handle show resources
     private void handleShowResources() {
         ShowResourcesStmt showStmt = (ShowResourcesStmt) stmt;
-        List> rowSet = Catalog.getInstance().getResourceMgr().getResourcesInfo();
+        List> rowSet = Catalog.getCurrentCatalog().getResourceMgr().getResourcesInfo();
 
         // Only success
         resultSet = new ShowResultSet(showStmt.getMetaData(), rowSet);
@@ -1318,7 +1318,7 @@ private void handleShowResources() {
 
     private void handleShowExport() throws AnalysisException {
         ShowExportStmt showExportStmt = (ShowExportStmt) stmt;
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Database db = catalog.getDb(showExportStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showExportStmt.getDbName());
@@ -1363,13 +1363,13 @@ private void handleShowFrontends() {
 
     private void handleShowRepositories() {
         final ShowRepositoriesStmt showStmt = (ShowRepositoriesStmt) stmt;
-        List> repoInfos = Catalog.getInstance().getBackupHandler().getRepoMgr().getReposInfo();
+        List> repoInfos = Catalog.getCurrentCatalog().getBackupHandler().getRepoMgr().getReposInfo();
         resultSet = new ShowResultSet(showStmt.getMetaData(), repoInfos);
     }
 
     private void handleShowSnapshot() throws AnalysisException {
         final ShowSnapshotStmt showStmt = (ShowSnapshotStmt) stmt;
-        Repository repo = Catalog.getInstance().getBackupHandler().getRepoMgr().getRepo(showStmt.getRepoName());
+        Repository repo = Catalog.getCurrentCatalog().getBackupHandler().getRepoMgr().getRepo(showStmt.getRepoName());
         if (repo == null) {
             throw new AnalysisException("Repository " + showStmt.getRepoName() + " does not exist");
         }
@@ -1380,12 +1380,12 @@ private void handleShowSnapshot() throws AnalysisException {
 
     private void handleShowBackup() throws AnalysisException {
         ShowBackupStmt showStmt = (ShowBackupStmt) stmt;
-        Database db = Catalog.getInstance().getDb(showStmt.getDbName());
+        Database db = Catalog.getCurrentCatalog().getDb(showStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showStmt.getDbName());
         }
 
-        AbstractJob jobI = Catalog.getInstance().getBackupHandler().getJob(db.getId());
+        AbstractJob jobI = Catalog.getCurrentCatalog().getBackupHandler().getJob(db.getId());
         if (!(jobI instanceof BackupJob)) {
             resultSet = new ShowResultSet(showStmt.getMetaData(), EMPTY_SET);
             return;
@@ -1400,12 +1400,12 @@ private void handleShowBackup() throws AnalysisException {
 
     private void handleShowRestore() throws AnalysisException {
         ShowRestoreStmt showStmt = (ShowRestoreStmt) stmt;
-        Database db = Catalog.getInstance().getDb(showStmt.getDbName());
+        Database db = Catalog.getCurrentCatalog().getDb(showStmt.getDbName());
         if (db == null) {
             ErrorReport.reportAnalysisException(ErrorCode.ERR_BAD_DB_ERROR, showStmt.getDbName());
         }
 
-        AbstractJob jobI = Catalog.getInstance().getBackupHandler().getJob(db.getId());
+        AbstractJob jobI = Catalog.getCurrentCatalog().getBackupHandler().getJob(db.getId());
         if (!(jobI instanceof RestoreJob)) {
             resultSet = new ShowResultSet(showStmt.getMetaData(), EMPTY_SET);
             return;
diff --git a/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
index 114f9cf30c1c6d..ec4d529fbb2f8f 100644
--- a/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
+++ b/fe/src/main/java/org/apache/doris/qe/StmtExecutor.java
@@ -168,13 +168,13 @@ public Planner planner() {
     }
 
     public boolean isForwardToMaster() {
-        if (Catalog.getInstance().isMaster()) {
+        if (Catalog.getCurrentCatalog().isMaster()) {
             return false;
         }
 
         // this is a query stmt, but this non-master FE can not read, forward it to master
-        if ((parsedStmt instanceof QueryStmt) && !Catalog.getInstance().isMaster()
-                && !Catalog.getInstance().canRead()) {
+        if ((parsedStmt instanceof QueryStmt) && !Catalog.getCurrentCatalog().isMaster()
+                && !Catalog.getCurrentCatalog().canRead()) {
             return true;
         }
 
diff --git a/fe/src/main/java/org/apache/doris/qe/VariableMgr.java b/fe/src/main/java/org/apache/doris/qe/VariableMgr.java
index 4bc821a03baa7f..26e4d14461b1e0 100644
--- a/fe/src/main/java/org/apache/doris/qe/VariableMgr.java
+++ b/fe/src/main/java/org/apache/doris/qe/VariableMgr.java
@@ -264,7 +264,7 @@ public static void read(DataInputStream in) throws IOException, DdlException {
     }
 
     private static void writeGlobalVariableUpdate(SessionVariable variable, String msg) {
-        EditLog editLog = Catalog.getInstance().getEditLog();
+        EditLog editLog = Catalog.getCurrentCatalog().getEditLog();
         editLog.logGlobalVariable(variable);
     }
 
diff --git a/fe/src/main/java/org/apache/doris/service/FrontendServiceImpl.java b/fe/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 057d3cdb9591d9..e85d4c2549a174 100644
--- a/fe/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -195,7 +195,7 @@ public TGetTablesResult getTableNames(TGetTablesParams params) throws TException
 
         // database privs should be checked in analysis phrase
 
-        Database db = Catalog.getInstance().getDb(params.db);
+        Database db = Catalog.getCurrentCatalog().getDb(params.db);
         UserIdentity currentUser = null;
         if (params.isSetCurrent_user_ident()) {
             currentUser = UserIdentity.fromThrift(params.current_user_ident);
@@ -237,7 +237,7 @@ public TListTableStatusResult listTableStatus(TGetTablesParams params) throws TE
 
         // database privs should be checked in analysis phrase
 
-        Database db = Catalog.getInstance().getDb(params.db);
+        Database db = Catalog.getCurrentCatalog().getDb(params.db);
         UserIdentity currentUser = null;
         if (params.isSetCurrent_user_ident()) {
             currentUser = UserIdentity.fromThrift(params.current_user_ident);
@@ -300,7 +300,7 @@ public TDescribeTableResult describeTable(TDescribeTableParams params) throws TE
             return result;
         }
 
-        Database db = Catalog.getInstance().getDb(params.db);
+        Database db = Catalog.getCurrentCatalog().getDb(params.db);
         if (db != null) {
             db.readLock();
             try {
@@ -386,7 +386,7 @@ public TFeResult miniLoad(TMiniLoadRequest request) throws TException {
         context.setCluster(cluster);
         context.setDatabase(ClusterNamespace.getFullName(cluster, request.db));
         context.setQualifiedUser(ClusterNamespace.getFullName(cluster, request.user));
-        context.setCatalog(Catalog.getInstance());
+        context.setCatalog(Catalog.getCurrentCatalog());
         context.getState().reset();
         context.setThreadLocalInfo();
 
@@ -397,7 +397,7 @@ public TFeResult miniLoad(TMiniLoadRequest request) throws TException {
                 ExecuteEnv.getInstance().getMultiLoadMgr().load(request);
             } else {
                 // try to add load job, label will be checked here.
-                if (Catalog.getInstance().getLoadManager().createLoadJobV1FromRequest(request)) {
+                if (Catalog.getCurrentCatalog().getLoadManager().createLoadJobV1FromRequest(request)) {
                     try {
                         // generate mini load audit log
                         logMiniLoadStmt(request);
@@ -474,7 +474,7 @@ public TFeResult updateMiniEtlTaskStatus(TUpdateMiniEtlTaskStatusRequest request
         TUniqueId etlTaskId = request.getEtlTaskId();
         long jobId = etlTaskId.getHi();
         long taskId = etlTaskId.getLo();
-        LoadJob job = Catalog.getInstance().getLoadInstance().getLoadJob(jobId);
+        LoadJob job = Catalog.getCurrentCatalog().getLoadInstance().getLoadJob(jobId);
         if (job == null) {
             String failMsg = "job does not exist. id: " + jobId;
             LOG.warn(failMsg);
@@ -564,7 +564,7 @@ public TFeResult isMethodSupported(TIsMethodSupportedRequest request) throws TEx
     public TMasterOpResult forward(TMasterOpRequest params) throws TException {
         TNetworkAddress clientAddr = getClientAddr();
         if (clientAddr != null) {
-            Frontend fe = Catalog.getInstance().getFeByHost(clientAddr.getHostname());
+            Frontend fe = Catalog.getCurrentCatalog().getFeByHost(clientAddr.getHostname());
             if (fe == null) {
                 LOG.warn("reject request from invalid host. client: {}", clientAddr);
                 throw new TException("request from invalid host was rejected.");
@@ -673,7 +673,7 @@ private long loadTxnBeginImpl(TLoadTxnBeginRequest request, String clientIp) thr
             throw new UserException("empty label in begin request");
         }
         // check database
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         String fullDbName = ClusterNamespace.getFullName(cluster, request.getDb());
         Database db = catalog.getDb(fullDbName);
         if (db == null) {
@@ -748,7 +748,7 @@ private boolean loadTxnCommitImpl(TLoadTxnCommitRequest request) throws UserExce
         }
 
         // get database
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         String fullDbName = ClusterNamespace.getFullName(cluster, request.getDb());
         Database db = catalog.getDb(fullDbName);
         if (db == null) {
@@ -809,7 +809,7 @@ private void loadTxnRollbackImpl(TLoadTxnRollbackRequest request) throws UserExc
                     request.getTbl(), request.getUser_ip(), PrivPredicate.LOAD);
         }
         String dbName = ClusterNamespace.getFullName(cluster, request.getDb());
-        Database db = Catalog.getInstance().getDb(dbName);
+        Database db = Catalog.getCurrentCatalog().getDb(dbName);
         if (db == null) {
             throw new MetaNotFoundException("db " + request.getDb() + " does not exist");
         }
diff --git a/fe/src/main/java/org/apache/doris/system/Backend.java b/fe/src/main/java/org/apache/doris/system/Backend.java
index 9a53c3da72d718..24e236f190975b 100644
--- a/fe/src/main/java/org/apache/doris/system/Backend.java
+++ b/fe/src/main/java/org/apache/doris/system/Backend.java
@@ -435,7 +435,7 @@ public void updateDisks(Map backendDisks) {
             disksRef.set(ImmutableMap.copyOf(newDiskInfos));
             Catalog.getCurrentSystemInfo().updatePathInfo(addedDisks, removedDisks);
             // log disk changing
-            Catalog.getInstance().getEditLog().logBackendStateChange(this);
+            Catalog.getCurrentCatalog().getEditLog().logBackendStateChange(this);
         }
     }
 
diff --git a/fe/src/main/java/org/apache/doris/system/HeartbeatMgr.java b/fe/src/main/java/org/apache/doris/system/HeartbeatMgr.java
index 138ff81d47571f..6f391b419e2665 100644
--- a/fe/src/main/java/org/apache/doris/system/HeartbeatMgr.java
+++ b/fe/src/main/java/org/apache/doris/system/HeartbeatMgr.java
@@ -277,11 +277,11 @@ public FrontendHeartbeatHandler(Frontend fe, int clusterId, String token) {
 
         @Override
         public HeartbeatResponse call() {
-            if (fe.getHost().equals(Catalog.getInstance().getSelfNode().first)) {
+            if (fe.getHost().equals(Catalog.getCurrentCatalog().getSelfNode().first)) {
                 // heartbeat to self
-                if (Catalog.getInstance().isReady()) {
+                if (Catalog.getCurrentCatalog().isReady()) {
                     return new FrontendHbResponse(fe.getNodeName(), Config.query_port, Config.rpc_port,
-                            Catalog.getInstance().getReplayedJournalId(), System.currentTimeMillis());
+                            Catalog.getCurrentCatalog().getReplayedJournalId(), System.currentTimeMillis());
                 } else {
                     return new FrontendHbResponse(fe.getNodeName(), "not ready");
                 }
diff --git a/fe/src/main/java/org/apache/doris/system/SystemInfoService.java b/fe/src/main/java/org/apache/doris/system/SystemInfoService.java
index 55c8d8d8c1c9e8..2619e5b041f09f 100644
--- a/fe/src/main/java/org/apache/doris/system/SystemInfoService.java
+++ b/fe/src/main/java/org/apache/doris/system/SystemInfoService.java
@@ -135,7 +135,7 @@ public void addBackend(Backend backend) {
     }
 
     private void setBackendOwner(Backend backend, String clusterName) {
-        final Cluster cluster = Catalog.getInstance().getCluster(clusterName);
+        final Cluster cluster = Catalog.getCurrentCatalog().getCluster(clusterName);
         Preconditions.checkState(cluster != null);
         cluster.addBackend(backend.getId());
         backend.setOwnerClusterName(clusterName);
@@ -144,7 +144,7 @@ private void setBackendOwner(Backend backend, String clusterName) {
 
     // Final entry of adding backend
     private void addBackend(String host, int heartbeatPort, boolean isFree, String destCluster) throws DdlException {
-        Backend newBackend = new Backend(Catalog.getInstance().getNextId(), host, heartbeatPort);
+        Backend newBackend = new Backend(Catalog.getCurrentCatalog().getNextId(), host, heartbeatPort);
         // update idToBackend
         Map copiedBackends = Maps.newHashMap(idToBackendRef.get());
         copiedBackends.put(newBackend.getId(), newBackend);
@@ -168,7 +168,7 @@ private void addBackend(String host, int heartbeatPort, boolean isFree, String d
         }
 
         // log
-        Catalog.getInstance().getEditLog().logAddBackend(newBackend);
+        Catalog.getCurrentCatalog().getEditLog().logAddBackend(newBackend);
         LOG.info("finished to add {} ", newBackend);
 
         // backends is changed, regenerated tablet number metrics
@@ -219,14 +219,14 @@ public void dropBackend(String host, int heartbeatPort) throws DdlException {
         idToReportVersionRef.set(newIdToReportVersion);
 
         // update cluster
-        final Cluster cluster = Catalog.getInstance().getCluster(droppedBackend.getOwnerClusterName());
+        final Cluster cluster = Catalog.getCurrentCatalog().getCluster(droppedBackend.getOwnerClusterName());
         if (null != cluster) {
             cluster.removeBackend(droppedBackend.getId());
         } else {
             LOG.error("Cluster " + droppedBackend.getOwnerClusterName() + " no exist.");
         }
         // log
-        Catalog.getInstance().getEditLog().logDropBackend(droppedBackend);
+        Catalog.getCurrentCatalog().getEditLog().logDropBackend(droppedBackend);
         LOG.info("finished to drop {}", droppedBackend);
 
         // backends is changed, regenerated tablet number metrics
@@ -406,7 +406,7 @@ public void releaseBackends(String clusterName, boolean isReplay) {
                 backend.setBackendState(BackendState.free);
                 backend.clearClusterName();
                 if (!isReplay) {
-                    Catalog.getInstance().getEditLog().logBackendStateChange(backend);
+                    Catalog.getCurrentCatalog().getEditLog().logBackendStateChange(backend);
                 }
             }
         }
@@ -583,7 +583,7 @@ public List calculateExpansionBackends(String clusterName, int expansionNu
             final Backend backend = idToBackends.get(id);
             backend.setOwnerClusterName(clusterName);
             backend.setBackendState(BackendState.using);
-            Catalog.getInstance().getEditLog().logBackendStateChange(backend);
+            Catalog.getCurrentCatalog().getEditLog().logBackendStateChange(backend);
         }
         return chosenBackendIds;
     }
@@ -883,7 +883,7 @@ public long getBackendReportVersion(long backendId) {
     public void updateBackendReportVersion(long backendId, long newReportVersion, long dbId) {
         AtomicLong atomicLong = null;
         if ((atomicLong = idToReportVersionRef.get().get(backendId)) != null) {
-            Database db = Catalog.getInstance().getDb(dbId);
+            Database db = Catalog.getCurrentCatalog().getDb(dbId);
             if (db != null) {
                 db.readLock();
                 try {
@@ -994,7 +994,7 @@ public void replayAddBackend(Backend newBackend) {
 
         // to add be to DEFAULT_CLUSTER
         if (newBackend.getBackendState() == BackendState.using) {
-            final Cluster cluster = Catalog.getInstance().getCluster(DEFAULT_CLUSTER);
+            final Cluster cluster = Catalog.getCurrentCatalog().getCluster(DEFAULT_CLUSTER);
             if (null != cluster) {
                 // replay log
                 cluster.addBackend(newBackend.getId());
@@ -1020,7 +1020,7 @@ public void replayDropBackend(Backend backend) {
         idToReportVersionRef.set(newIdToReportVersion);
 
         // update cluster
-        final Cluster cluster = Catalog.getInstance().getCluster(backend.getOwnerClusterName());
+        final Cluster cluster = Catalog.getCurrentCatalog().getCluster(backend.getOwnerClusterName());
         if (null != cluster) {
             cluster.removeBackend(backend.getId());
         } else {
diff --git a/fe/src/main/java/org/apache/doris/task/ExportExportingTask.java b/fe/src/main/java/org/apache/doris/task/ExportExportingTask.java
index 7e8d75932b3424..939a8b16fb777e 100644
--- a/fe/src/main/java/org/apache/doris/task/ExportExportingTask.java
+++ b/fe/src/main/java/org/apache/doris/task/ExportExportingTask.java
@@ -276,7 +276,7 @@ private Status moveTmpFiles() {
         FsBroker broker = null;
         try {
             String localIP = FrontendOptions.getLocalHostAddress();
-            broker = Catalog.getInstance().getBrokerMgr().getBroker(job.getBrokerDesc().getName(), localIP);
+            broker = Catalog.getCurrentCatalog().getBrokerMgr().getBroker(job.getBrokerDesc().getName(), localIP);
         } catch (AnalysisException e) {
             String failMsg = "get broker failed. export job: " + job.getId() + ". msg: " + e.getMessage();
             LOG.warn(failMsg);
diff --git a/fe/src/main/java/org/apache/doris/task/ExportPendingTask.java b/fe/src/main/java/org/apache/doris/task/ExportPendingTask.java
index c0eb2d0fd26b94..252ae0cea5d9cd 100644
--- a/fe/src/main/java/org/apache/doris/task/ExportPendingTask.java
+++ b/fe/src/main/java/org/apache/doris/task/ExportPendingTask.java
@@ -58,7 +58,7 @@ protected void exec() {
         }
 
         long dbId = job.getDbId();
-        db = Catalog.getInstance().getDb(dbId);
+        db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             job.cancel(ExportFailMsg.CancelType.RUN_FAIL, "database does not exist");
             return;
diff --git a/fe/src/main/java/org/apache/doris/task/LoadEtlTask.java b/fe/src/main/java/org/apache/doris/task/LoadEtlTask.java
index 81b700f19a70b4..5a7e69e1913882 100644
--- a/fe/src/main/java/org/apache/doris/task/LoadEtlTask.java
+++ b/fe/src/main/java/org/apache/doris/task/LoadEtlTask.java
@@ -62,7 +62,7 @@ public LoadEtlTask(LoadJob job) {
         super();
         this.job = job;
         this.signature = job.getId();
-        this.load = Catalog.getInstance().getLoadInstance();
+        this.load = Catalog.getCurrentCatalog().getLoadInstance();
     }
 
     protected String getErrorMsg() {
@@ -84,7 +84,7 @@ protected void exec() {
         
         // check db
         long dbId = job.getDbId();
-        db = Catalog.getInstance().getDb(dbId);
+        db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             load.cancelLoadJob(job, CancelType.ETL_RUN_FAIL, "db does not exist. id: " + dbId);
             return;
diff --git a/fe/src/main/java/org/apache/doris/task/LoadPendingTask.java b/fe/src/main/java/org/apache/doris/task/LoadPendingTask.java
index 61c477c849c32b..a86b58c1bd79e7 100644
--- a/fe/src/main/java/org/apache/doris/task/LoadPendingTask.java
+++ b/fe/src/main/java/org/apache/doris/task/LoadPendingTask.java
@@ -52,7 +52,7 @@ public abstract class LoadPendingTask extends MasterTask {
     public LoadPendingTask(LoadJob job) {
         this.job = job;
         this.signature = job.getId();
-        this.load = Catalog.getInstance().getLoadInstance();
+        this.load = Catalog.getCurrentCatalog().getLoadInstance();
     }
 
     @Override
@@ -71,7 +71,7 @@ protected void exec() {
         // get db
         long dbId = job.getDbId();
         long tableId = job.getTableId();
-        db = Catalog.getInstance().getDb(dbId);
+        db = Catalog.getCurrentCatalog().getDb(dbId);
         if (db == null) {
             load.cancelLoadJob(job, CancelType.ETL_SUBMIT_FAIL, "db does not exist. id: " + dbId);
             return;
diff --git a/fe/src/main/java/org/apache/doris/task/PullLoadEtlTask.java b/fe/src/main/java/org/apache/doris/task/PullLoadEtlTask.java
index 24648c61f7bd18..154134cbd20bd5 100644
--- a/fe/src/main/java/org/apache/doris/task/PullLoadEtlTask.java
+++ b/fe/src/main/java/org/apache/doris/task/PullLoadEtlTask.java
@@ -39,7 +39,7 @@ public class PullLoadEtlTask extends LoadEtlTask {
 
     public PullLoadEtlTask(LoadJob job) {
         super(job);
-        mgr = Catalog.getInstance().getPullLoadJobMgr();
+        mgr = Catalog.getCurrentCatalog().getPullLoadJobMgr();
     }
 
     @Override
diff --git a/fe/src/main/java/org/apache/doris/task/PullLoadTaskPlanner.java b/fe/src/main/java/org/apache/doris/task/PullLoadTaskPlanner.java
index ed3d76c0b96531..e4903ae9667176 100644
--- a/fe/src/main/java/org/apache/doris/task/PullLoadTaskPlanner.java
+++ b/fe/src/main/java/org/apache/doris/task/PullLoadTaskPlanner.java
@@ -68,7 +68,7 @@ public class PullLoadTaskPlanner {
 
     public PullLoadTaskPlanner(PullLoadTask task) {
         this.task = task;
-        this.analyzer = new Analyzer(Catalog.getInstance(), null);
+        this.analyzer = new Analyzer(Catalog.getCurrentCatalog(), null);
         this.descTable = analyzer.getDescTbl();
         this.fragments = Lists.newArrayList();
         this.scanNodes = Lists.newArrayList();
diff --git a/fe/src/main/java/org/apache/doris/task/UpdateTabletMetaInfoTask.java b/fe/src/main/java/org/apache/doris/task/UpdateTabletMetaInfoTask.java
index 67861ab6666e56..12bb108399612b 100644
--- a/fe/src/main/java/org/apache/doris/task/UpdateTabletMetaInfoTask.java
+++ b/fe/src/main/java/org/apache/doris/task/UpdateTabletMetaInfoTask.java
@@ -111,7 +111,7 @@ public TUpdateTabletMetaInfoReq toThrift() {
                     TTabletMetaInfo metaInfo = new TTabletMetaInfo();
                     metaInfo.setTablet_id(pair.first);
                     metaInfo.setSchema_hash(pair.second);
-                    TabletMeta tabletMeta = Catalog.getInstance().getTabletInvertedIndex().getTabletMeta(pair.first);
+                    TabletMeta tabletMeta = Catalog.getCurrentCatalog().getTabletInvertedIndex().getTabletMeta(pair.first);
                     if (tabletMeta == null) {
                         LOG.warn("could not find tablet [{}] in meta ignore it", pair.second);
                         continue;
diff --git a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
index b0c51f4bcbea02..d0b1eaa27ad467 100644
--- a/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
+++ b/fe/src/main/java/org/apache/doris/transaction/DatabaseTransactionMgr.java
@@ -1102,7 +1102,7 @@ public List> getSingleTranInfo(long dbId, long txnId) throws Analys
         List> infos = new ArrayList>();
         readLock();
         try {
-            Database db = Catalog.getInstance().getDb(dbId);
+            Database db = Catalog.getCurrentCatalog().getDb(dbId);
             if (db == null) {
                 throw new AnalysisException("Database[" + dbId + "] does not exist");
             }
diff --git a/fe/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java b/fe/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
index 456c9277b98fb8..41f82bcaada682 100644
--- a/fe/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
+++ b/fe/src/main/java/org/apache/doris/transaction/GlobalTransactionMgr.java
@@ -291,7 +291,7 @@ public List> getDbInfo() {
         for (long dbId : dbIds) {
             List info = new ArrayList();
             info.add(dbId);
-            Database db = Catalog.getInstance().getDb(dbId);
+            Database db = Catalog.getCurrentCatalog().getDb(dbId);
             if (db == null) {
                 continue;
             }
diff --git a/fe/src/test/java/org/apache/doris/alter/RollupJobV2Test.java b/fe/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
index e3fd856137e729..0f647711429c98 100644
--- a/fe/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
+++ b/fe/src/test/java/org/apache/doris/alter/RollupJobV2Test.java
@@ -155,7 +155,7 @@ public void testRunRollupJobConcurrentLimit() throws UserException {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+        MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
         ArrayList alterClauses = new ArrayList<>();
         alterClauses.add(clause);
         alterClauses.add(clause2);
@@ -176,7 +176,7 @@ public void testAddSchemaChange() throws UserException {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+        MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
         ArrayList alterClauses = new ArrayList<>();
         alterClauses.add(clause);
         Database db = masterCatalog.getDb(CatalogTestUtil.testDbId1);
@@ -193,7 +193,7 @@ public void testSchemaChange1() throws Exception {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+        MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
 
         // add a rollup job
         ArrayList alterClauses = new ArrayList<>();
@@ -297,7 +297,7 @@ public void testSchemaChangeWhileTabletNotStable() throws Exception {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        MaterializedViewHandler materializedViewHandler = Catalog.getInstance().getRollupHandler();
+        MaterializedViewHandler materializedViewHandler = Catalog.getCurrentCatalog().getRollupHandler();
 
         // add a rollup job
         ArrayList alterClauses = new ArrayList<>();
diff --git a/fe/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java b/fe/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
index 86970286dbf63a..edcf8eea298c57 100644
--- a/fe/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
+++ b/fe/src/test/java/org/apache/doris/alter/SchemaChangeJobV2Test.java
@@ -128,7 +128,7 @@ public void testAddSchemaChange() throws UserException {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
         ArrayList alterClauses = new ArrayList<>();
         alterClauses.add(addColumnClause);
         Database db = masterCatalog.getDb(CatalogTestUtil.testDbId1);
@@ -145,7 +145,7 @@ public void testSchemaChange1() throws Exception {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
 
         // add a schema change job
         ArrayList alterClauses = new ArrayList<>();
@@ -221,7 +221,7 @@ public void testSchemaChangeWhileTabletNotStable() throws Exception {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
 
         // add a schema change job
         ArrayList alterClauses = new ArrayList<>();
@@ -303,7 +303,7 @@ public void testModifyDynamicPartitionNormal() throws UserException {
         fakeCatalog = new FakeCatalog();
         fakeEditLog = new FakeEditLog();
         FakeCatalog.setCatalog(masterCatalog);
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
         ArrayList alterClauses = new ArrayList<>();
         Map properties = new HashMap<>();
         properties.put(DynamicPartitionProperty.ENABLE, "true");
@@ -359,7 +359,7 @@ public void modifyDynamicPartitionWithoutTableProperty(String propertyKey, Strin
             throws UserException {
         fakeCatalog = new FakeCatalog();
         FakeCatalog.setCatalog(masterCatalog);
-        SchemaChangeHandler schemaChangeHandler = Catalog.getInstance().getSchemaChangeHandler();
+        SchemaChangeHandler schemaChangeHandler = Catalog.getCurrentCatalog().getSchemaChangeHandler();
         ArrayList alterClauses = new ArrayList<>();
         Map properties = new HashMap<>();
         properties.put(propertyKey, propertyValue);
diff --git a/fe/src/test/java/org/apache/doris/analysis/ShowDataStmtTest.java b/fe/src/test/java/org/apache/doris/analysis/ShowDataStmtTest.java
index d892bbdb91617d..f54426e1a5ff4b 100644
--- a/fe/src/test/java/org/apache/doris/analysis/ShowDataStmtTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/ShowDataStmtTest.java
@@ -80,7 +80,7 @@ public void setUp() throws AnalysisException {
                 minTimes = 0;
                 result = catalog;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/catalog/CatalogTest.java b/fe/src/test/java/org/apache/doris/catalog/CatalogTest.java
index 7d4be388ad094e..c97be54498f402 100644
--- a/fe/src/test/java/org/apache/doris/catalog/CatalogTest.java
+++ b/fe/src/test/java/org/apache/doris/catalog/CatalogTest.java
@@ -134,7 +134,7 @@ public void testSaveLoadHeader() throws Exception {
         File file = new File(dir, "image");
         file.createNewFile();
         DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         MetaContext.get().setMetaVersion(FeConstants.meta_version);
         Field field = catalog.getClass().getDeclaredField("load");
         field.setAccessible(true);
@@ -146,7 +146,7 @@ public void testSaveLoadHeader() throws Exception {
         dos.close();
         
         DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
-        catalog = Catalog.getInstance();
+        catalog = Catalog.getCurrentCatalog();
         long checksum2 = catalog.loadHeader(dis, 0);
         Assert.assertEquals(checksum1, checksum2);
         dis.close();
@@ -162,7 +162,7 @@ public void testSaveLoadJob() throws Exception {
         file.createNewFile();
         DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
 
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         MetaContext.get().setMetaVersion(FeConstants.meta_version);
         Field field = catalog.getClass().getDeclaredField("load");
         field.setAccessible(true);
@@ -175,7 +175,7 @@ public void testSaveLoadJob() throws Exception {
         catalog = null;
         dos.close();
         
-        catalog = Catalog.getInstance();
+        catalog = Catalog.getCurrentCatalog();
 
         Field field2 = catalog.getClass().getDeclaredField("load");
         field2.setAccessible(true);
@@ -197,7 +197,7 @@ public void testSaveLoadSchemaChangeJob() throws Exception {
         File file = new File(dir, "image");
         file.createNewFile();
         DataOutputStream dos = new DataOutputStream(new FileOutputStream(file));
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         MetaContext.get().setMetaVersion(FeConstants.meta_version);
         Field field = catalog.getClass().getDeclaredField("load");
         field.setAccessible(true);
@@ -225,7 +225,7 @@ public void testSaveLoadSchemaChangeJob() throws Exception {
         dos.close();
         
         DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));
-        catalog = Catalog.getInstance();
+        catalog = Catalog.getCurrentCatalog();
         long checksum2 = catalog.loadAlterJob(dis, 0, JobType.SCHEMA_CHANGE);
         Assert.assertEquals(checksum1, checksum2);
         Map map = catalog.getSchemaChangeHandler().unprotectedGetAlterJobs();
diff --git a/fe/src/test/java/org/apache/doris/catalog/ColocateTableTest.java b/fe/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
index c14158c371ab48..6210e3086cb09b 100644
--- a/fe/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
+++ b/fe/src/test/java/org/apache/doris/catalog/ColocateTableTest.java
@@ -131,7 +131,7 @@ public void setUp() throws Exception {
                 Catalog.getCurrentCatalog();
                 result = catalog;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 result = catalog;
 
                 Catalog.getCurrentSystemInfo();
diff --git a/fe/src/test/java/org/apache/doris/catalog/CreateTableTest.java b/fe/src/test/java/org/apache/doris/catalog/CreateTableTest.java
index 50cf3d30072dbf..17b364817cf769 100644
--- a/fe/src/test/java/org/apache/doris/catalog/CreateTableTest.java
+++ b/fe/src/test/java/org/apache/doris/catalog/CreateTableTest.java
@@ -62,7 +62,7 @@ public class CreateTableTest {
     private List columnNames = Lists.newArrayList();
     private List columnDefs = Lists.newArrayList();
 
-    private Catalog catalog = Catalog.getInstance();
+    private Catalog catalog = Catalog.getCurrentCatalog();
     private Database db = new Database();
     private Analyzer analyzer;
 
@@ -102,7 +102,7 @@ public void setUp() throws AnalysisException {
                 minTimes = 0;
                 result = catalog;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/catalog/DatabaseTest.java b/fe/src/test/java/org/apache/doris/catalog/DatabaseTest.java
index a5634cc46a7960..dff692d0e9b734 100644
--- a/fe/src/test/java/org/apache/doris/catalog/DatabaseTest.java
+++ b/fe/src/test/java/org/apache/doris/catalog/DatabaseTest.java
@@ -71,7 +71,7 @@ public void Setup() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/cluster/SystemInfoServiceTest.java b/fe/src/test/java/org/apache/doris/cluster/SystemInfoServiceTest.java
index 9cf384c89c00d3..ef96703d6ca06e 100644
--- a/fe/src/test/java/org/apache/doris/cluster/SystemInfoServiceTest.java
+++ b/fe/src/test/java/org/apache/doris/cluster/SystemInfoServiceTest.java
@@ -102,7 +102,7 @@ public void setUp() throws IOException {
                 catalog.clear();
                 minTimes = 0;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/common/proc/BackendProcNodeTest.java b/fe/src/test/java/org/apache/doris/common/proc/BackendProcNodeTest.java
index 6d819d4d50f61a..7f8bb89913f4a4 100644
--- a/fe/src/test/java/org/apache/doris/common/proc/BackendProcNodeTest.java
+++ b/fe/src/test/java/org/apache/doris/common/proc/BackendProcNodeTest.java
@@ -68,7 +68,7 @@ public void setUp() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java b/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
index ab97881de4ad8c..0a2cae9c54357e 100644
--- a/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
+++ b/fe/src/test/java/org/apache/doris/common/proc/BackendsProcDirTest.java
@@ -93,7 +93,7 @@ public void setUp() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/load/LoadCheckerTest.java b/fe/src/test/java/org/apache/doris/load/LoadCheckerTest.java
index 622dec9395cfb0..12fb22be2dfb23 100644
--- a/fe/src/test/java/org/apache/doris/load/LoadCheckerTest.java
+++ b/fe/src/test/java/org/apache/doris/load/LoadCheckerTest.java
@@ -99,7 +99,7 @@ public void setUp() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/load/routineload/RoutineLoadTaskSchedulerTest.java b/fe/src/test/java/org/apache/doris/load/routineload/RoutineLoadTaskSchedulerTest.java
index 5e13821f95f124..133dcb89814c11 100644
--- a/fe/src/test/java/org/apache/doris/load/routineload/RoutineLoadTaskSchedulerTest.java
+++ b/fe/src/test/java/org/apache/doris/load/routineload/RoutineLoadTaskSchedulerTest.java
@@ -85,7 +85,7 @@ public void testRunOneCycle(@Injectable KafkaRoutineLoadJob kafkaRoutineLoadJob1
 
         new Expectations() {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
                 catalog.getRoutineLoadManager();
diff --git a/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java b/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
index eddc4c44843592..4343dbbbf9f712 100644
--- a/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
+++ b/fe/src/test/java/org/apache/doris/mysql/MysqlProtoTest.java
@@ -85,7 +85,7 @@ boolean fakeCheckPassword(String remoteUser, String remoteHost, byte[] remotePas
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/qe/CoordinatorTest.java b/fe/src/test/java/org/apache/doris/qe/CoordinatorTest.java
index 96ea91c252fa85..cc72aee78ae0e4 100644
--- a/fe/src/test/java/org/apache/doris/qe/CoordinatorTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/CoordinatorTest.java
@@ -102,7 +102,7 @@ public static void beforeTest() throws IllegalAccessException, IllegalArgumentEx
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/qe/ShowExecutorTest.java b/fe/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
index 397c49c312b79c..fda3724263b24c 100644
--- a/fe/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/ShowExecutorTest.java
@@ -191,7 +191,7 @@ public void setUp() throws Exception {
                 minTimes = 0;
                 result = auth;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 
diff --git a/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java b/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
index 0e822ba8420240..7bd6e6befbea5b 100644
--- a/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/SimpleSchedulerTest.java
@@ -66,7 +66,7 @@ public void setUp() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java b/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
index c2f701c8b320ce..4a2f1f1cf1f00f 100644
--- a/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/StmtExecutorTest.java
@@ -175,7 +175,7 @@ public void testSelect(@Mocked QueryStmt queryStmt,
                            @Mocked SqlParser parser,
                            @Mocked Planner planner,
                            @Mocked Coordinator coordinator) throws Exception {
-        Catalog catalog = Catalog.getInstance();
+        Catalog catalog = Catalog.getCurrentCatalog();
         Deencapsulation.setField(catalog, "canRead", new AtomicBoolean(true));
 
         new Expectations() {
@@ -232,7 +232,7 @@ public void testSelect(@Mocked QueryStmt queryStmt,
                 minTimes = 0;
                 result = -1L;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/qe/VariableMgrTest.java b/fe/src/test/java/org/apache/doris/qe/VariableMgrTest.java
index 6b181803102337..00d1a52d1289b5 100644
--- a/fe/src/test/java/org/apache/doris/qe/VariableMgrTest.java
+++ b/fe/src/test/java/org/apache/doris/qe/VariableMgrTest.java
@@ -59,7 +59,7 @@ public void setUp() {
 
         new Expectations(catalog) {
             {
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/system/HeartbeatMgrTest.java b/fe/src/test/java/org/apache/doris/system/HeartbeatMgrTest.java
index 703b3a122df140..fc8a1debcd1f7a 100644
--- a/fe/src/test/java/org/apache/doris/system/HeartbeatMgrTest.java
+++ b/fe/src/test/java/org/apache/doris/system/HeartbeatMgrTest.java
@@ -58,7 +58,7 @@ public void setUp() {
                 minTimes = 0;
                 result = true;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java b/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
index d774a23d3ee504..185cd6ccfea3c6 100644
--- a/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
+++ b/fe/src/test/java/org/apache/doris/task/LoadEtlTaskTest.java
@@ -102,7 +102,7 @@ public void testRunEtlTask(@Mocked DppScheduler dppScheduler) throws Exception {
                 minTimes = 0;
                 result = editLog;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
             }
diff --git a/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java b/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
index 70a7d1f95ed6c2..d882dc67c6b1b8 100644
--- a/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
+++ b/fe/src/test/java/org/apache/doris/task/LoadPendingTaskTest.java
@@ -105,7 +105,7 @@ public void testRunPendingTask() throws Exception {
                 minTimes = 0;
                 result = editLog;
 
-                Catalog.getInstance();
+                Catalog.getCurrentCatalog();
                 minTimes = 0;
                 result = catalog;
 

From 575b2cceed844985854c70ac5277c3dbfd5d0029 Mon Sep 17 00:00:00 2001
From: chenmingyu 
Date: Fri, 5 Jun 2020 22:02:15 +0800
Subject: [PATCH 2/2] fix bug

---
 .../org/apache/doris/analysis/AlterViewStmtTest.java     | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/fe/src/test/java/org/apache/doris/analysis/AlterViewStmtTest.java b/fe/src/test/java/org/apache/doris/analysis/AlterViewStmtTest.java
index 1189707381923d..df0f13ffd2de3f 100644
--- a/fe/src/test/java/org/apache/doris/analysis/AlterViewStmtTest.java
+++ b/fe/src/test/java/org/apache/doris/analysis/AlterViewStmtTest.java
@@ -114,7 +114,7 @@ public void setUp() {
 
         new MockUp() {
             @Mock
-            Catalog getInstance() {
+            Catalog getCurrentCatalog() {
                 return catalog;
             }
             @Mock
@@ -172,7 +172,12 @@ public void testNormal() {
         AlterViewStmt alterViewStmt = new AlterViewStmt(new TableName("testDb", "testView"), Lists.newArrayList(col1, col2), alterQueryStmt);
         try {
             alterViewStmt.analyze(analyzer);
-            analyzer.getCatalog().alterView(alterViewStmt);
+            Catalog catalog1 = analyzer.getCatalog();
+            if (catalog1 == null) {
+                System.out.println("cmy get null");
+                return;
+            }
+            catalog1.alterView(alterViewStmt);
         } catch (UserException e) {
             Assert.fail();
         }