MetaPersistMethod.java
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package org.apache.doris.persist.meta;
import org.apache.doris.catalog.Env;
import org.apache.doris.cloud.catalog.CloudEnv;
import org.apache.doris.common.io.CountingDataOutputStream;
import java.io.DataInputStream;
import java.lang.reflect.Method;
/**
* Defines a write and read method for the metadata module
* that needs to be persisted to the image.
*/
public class MetaPersistMethod {
public String name;
public Method readMethod;
public Method writeMethod;
public MetaPersistMethod(String name) {
this.name = name;
}
/**
* All meta modules should be added to this method.
* Modules' names are defined in {@link PersistMetaModules}
*
* @param name
* @return
* @throws NoSuchMethodException
*/
public static MetaPersistMethod create(String name) throws NoSuchMethodException {
MetaPersistMethod metaPersistMethod = new MetaPersistMethod(name);
switch (name) {
case "masterInfo":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadMasterInfo", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveMasterInfo", CountingDataOutputStream.class, long.class);
break;
case "frontends":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadFrontends", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveFrontends", CountingDataOutputStream.class, long.class);
break;
case "backends":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadBackends", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveBackends", CountingDataOutputStream.class, long.class);
break;
case "db":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadDb", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveDb", CountingDataOutputStream.class, long.class);
break;
case "alterJob":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadAlterJob", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveAlterJob", CountingDataOutputStream.class, long.class);
break;
case "cloudWarmUpJob":
metaPersistMethod.readMethod = CloudEnv.class.getDeclaredMethod(
"loadCloudWarmUpJob", DataInputStream.class, long.class);
metaPersistMethod.writeMethod = CloudEnv.class.getDeclaredMethod(
"saveCloudWarmUpJob", CountingDataOutputStream.class, long.class);
break;
case "recycleBin":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadRecycleBin", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveRecycleBin", CountingDataOutputStream.class, long.class);
break;
case "globalVariable":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadGlobalVariable", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveGlobalVariable", CountingDataOutputStream.class,
long.class);
break;
case "cluster":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadCluster", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveCluster", CountingDataOutputStream.class, long.class);
break;
case "broker":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadBrokers", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveBrokers", CountingDataOutputStream.class, long.class);
break;
case "resources":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadResources", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveResources", CountingDataOutputStream.class, long.class);
break;
case "exportJob":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadExportJob", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveExportJob", CountingDataOutputStream.class, long.class);
break;
case "syncJob":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadSyncJobs", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveSyncJobs", CountingDataOutputStream.class, long.class);
break;
case "backupHandler":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadBackupHandler", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveBackupHandler",
CountingDataOutputStream.class, long.class);
break;
case "paloAuth":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadAuth", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveAuth", CountingDataOutputStream.class, long.class);
break;
case "transactionState":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadTransactionState", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveTransactionState", CountingDataOutputStream.class,
long.class);
break;
case "colocateTableIndex":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadColocateTableIndex", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveColocateTableIndex", CountingDataOutputStream.class,
long.class);
break;
case "routineLoadJobs":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadRoutineLoadJobs", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveRoutineLoadJobs", CountingDataOutputStream.class,
long.class);
break;
case "loadJobV2":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadLoadJobsV2", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveLoadJobsV2", CountingDataOutputStream.class, long.class);
break;
case "smallFiles":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadSmallFiles", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveSmallFiles", CountingDataOutputStream.class, long.class);
break;
case "plugins":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadPlugins", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("savePlugins", CountingDataOutputStream.class, long.class);
break;
case "deleteHandler":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadDeleteHandler", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveDeleteHandler",
CountingDataOutputStream.class, long.class);
break;
case "sqlBlockRule":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadSqlBlockRule", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveSqlBlockRule", CountingDataOutputStream.class, long.class);
break;
case "policy":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadPolicy", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("savePolicy", CountingDataOutputStream.class, long.class);
break;
case "datasource":
metaPersistMethod.readMethod = Env.class.getDeclaredMethod("loadCatalog", DataInputStream.class,
long.class);
metaPersistMethod.writeMethod = Env.class.getDeclaredMethod("saveCatalog",
CountingDataOutputStream.class, long.class);
break;
case "globalFunction":
metaPersistMethod.readMethod = Env.class.getDeclaredMethod("loadGlobalFunction", DataInputStream.class,
long.class);
metaPersistMethod.writeMethod = Env.class.getDeclaredMethod("saveGlobalFunction",
CountingDataOutputStream.class, long.class);
break;
case "workloadGroups":
case "resourceGroups":
// In 2.0 alpha, there are many people using resource groups, maybe not upgrade from 2.0 alpha.
// So that add a compatible code here.
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadWorkloadGroups", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveWorkloadGroups", CountingDataOutputStream.class, long.class);
break;
case "workloadSchedPolicy":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadWorkloadSchedPolicy", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveWorkloadSchedPolicy", CountingDataOutputStream.class,
long.class);
break;
case "binlogs":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadBinlogs", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveBinlogs", CountingDataOutputStream.class, long.class);
break;
case "AnalysisMgr":
case "AnalysisMgrV2":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadAnalysisManager", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveAnalysisMgr", CountingDataOutputStream.class, long.class);
break;
case "AsyncJobManager":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadAsyncJobManager", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveAsyncJobManager", CountingDataOutputStream.class, long.class);
break;
case "JobTaskManager":
break;
case "insertOverwrite":
metaPersistMethod.readMethod =
Env.class.getDeclaredMethod("loadInsertOverwrite", DataInputStream.class, long.class);
metaPersistMethod.writeMethod =
Env.class.getDeclaredMethod("saveInsertOverwrite", CountingDataOutputStream.class, long.class);
break;
case "plsql":
// package and stored procedure use the same method in PlsqlManager.
metaPersistMethod.readMethod = Env.class.getDeclaredMethod("loadPlsqlProcedure", DataInputStream.class,
long.class);
metaPersistMethod.writeMethod = Env.class.getDeclaredMethod("savePlsqlProcedure",
CountingDataOutputStream.class, long.class);
break;
case "dictionaryManager":
metaPersistMethod.readMethod = Env.class.getDeclaredMethod("loadDictionaryManager",
DataInputStream.class, long.class);
metaPersistMethod.writeMethod = Env.class.getDeclaredMethod("saveDictionaryManager",
CountingDataOutputStream.class, long.class);
break;
default:
break;
}
return metaPersistMethod;
}
}