Search in sources :

Example 1 with QuarantineConfig

use of com.alibaba.cobar.config.model.QuarantineConfig in project cobar by alibaba.

the class ReloadConfig method reload.

private static boolean reload() {
    // 载入新的配置
    ConfigInitializer loader = new ConfigInitializer();
    Map<String, UserConfig> users = loader.getUsers();
    Map<String, SchemaConfig> schemas = loader.getSchemas();
    Map<String, MySQLDataNode> dataNodes = loader.getDataNodes();
    Map<String, DataSourceConfig> dataSources = loader.getDataSources();
    CobarCluster cluster = loader.getCluster();
    QuarantineConfig quarantine = loader.getQuarantine();
    // 应用新配置
    CobarConfig conf = CobarServer.getInstance().getConfig();
    // 如果重载已经存在的数据节点,初始化连接数参考空闲连接数,否则为1。
    boolean reloadStatus = true;
    Map<String, MySQLDataNode> cNodes = conf.getDataNodes();
    for (MySQLDataNode dn : dataNodes.values()) {
        MySQLDataNode cdn = cNodes.get(dn.getName());
        if (cdn != null && cdn.getSource() != null) {
            int size = Math.min(cdn.getSource().getIdleCount(), dn.getConfig().getPoolSize());
            dn.init(size > 0 ? size : 1, 0);
        } else {
            dn.init(1, 0);
        }
        if (!dn.isInitSuccess()) {
            reloadStatus = false;
            break;
        }
    }
    // 如果重载不成功,则清理已初始化的资源。
    if (!reloadStatus) {
        for (MySQLDataNode dn : dataNodes.values()) {
            MySQLDataSource ds = dn.getSource();
            if (ds != null) {
                ds.clear();
            }
        }
        return false;
    }
    // 应用重载
    conf.reload(users, schemas, dataNodes, dataSources, cluster, quarantine);
    // 处理旧的资源
    for (MySQLDataNode dn : cNodes.values()) {
        MySQLDataSource ds = dn.getSource();
        if (ds != null) {
            ds.clear();
        }
    }
    return true;
}
Also used : MySQLDataNode(com.alibaba.cobar.mysql.MySQLDataNode) SchemaConfig(com.alibaba.cobar.config.model.SchemaConfig) DataSourceConfig(com.alibaba.cobar.config.model.DataSourceConfig) ConfigInitializer(com.alibaba.cobar.ConfigInitializer) QuarantineConfig(com.alibaba.cobar.config.model.QuarantineConfig) CobarConfig(com.alibaba.cobar.CobarConfig) UserConfig(com.alibaba.cobar.config.model.UserConfig) MySQLDataSource(com.alibaba.cobar.mysql.MySQLDataSource) CobarCluster(com.alibaba.cobar.CobarCluster)

Example 2 with QuarantineConfig

use of com.alibaba.cobar.config.model.QuarantineConfig in project cobar by alibaba.

the class RollbackConfig method rollback.

private static boolean rollback() {
    CobarConfig conf = CobarServer.getInstance().getConfig();
    Map<String, UserConfig> users = conf.getBackupUsers();
    Map<String, SchemaConfig> schemas = conf.getBackupSchemas();
    Map<String, MySQLDataNode> dataNodes = conf.getBackupDataNodes();
    Map<String, DataSourceConfig> dataSources = conf.getBackupDataSources();
    CobarCluster cluster = conf.getBackupCluster();
    QuarantineConfig quarantine = conf.getBackupQuarantine();
    // 检查可回滚状态
    if (!conf.canRollback()) {
        return false;
    }
    // 如果回滚已经存在的pool,初始化连接数参考空闲连接数,否则为1。
    boolean rollbackStatus = true;
    Map<String, MySQLDataNode> cNodes = conf.getDataNodes();
    for (MySQLDataNode dn : dataNodes.values()) {
        MySQLDataNode cdn = cNodes.get(dn.getName());
        if (cdn != null && cdn.getSource() != null) {
            int size = Math.min(cdn.getSource().getIdleCount(), dn.getConfig().getPoolSize());
            dn.init(size > 0 ? size : 1, dn.getActivedIndex());
        } else {
            dn.init(1, dn.getActivedIndex());
        }
        if (!dn.isInitSuccess()) {
            rollbackStatus = false;
            break;
        }
    }
    // 如果回滚不成功,则清理已初始化的资源。
    if (!rollbackStatus) {
        for (MySQLDataNode dn : dataNodes.values()) {
            MySQLDataSource ds = dn.getSource();
            if (ds != null) {
                ds.clear();
            }
        }
        return false;
    }
    // 应用回滚
    conf.rollback(users, schemas, dataNodes, dataSources, cluster, quarantine);
    // 处理旧的资源
    for (MySQLDataNode dn : cNodes.values()) {
        MySQLDataSource ds = dn.getSource();
        if (ds != null) {
            ds.clear();
        }
    }
    return true;
}
Also used : MySQLDataNode(com.alibaba.cobar.mysql.MySQLDataNode) SchemaConfig(com.alibaba.cobar.config.model.SchemaConfig) DataSourceConfig(com.alibaba.cobar.config.model.DataSourceConfig) QuarantineConfig(com.alibaba.cobar.config.model.QuarantineConfig) CobarConfig(com.alibaba.cobar.CobarConfig) UserConfig(com.alibaba.cobar.config.model.UserConfig) MySQLDataSource(com.alibaba.cobar.mysql.MySQLDataSource) CobarCluster(com.alibaba.cobar.CobarCluster)

Aggregations

CobarCluster (com.alibaba.cobar.CobarCluster)2 CobarConfig (com.alibaba.cobar.CobarConfig)2 DataSourceConfig (com.alibaba.cobar.config.model.DataSourceConfig)2 QuarantineConfig (com.alibaba.cobar.config.model.QuarantineConfig)2 SchemaConfig (com.alibaba.cobar.config.model.SchemaConfig)2 UserConfig (com.alibaba.cobar.config.model.UserConfig)2 MySQLDataNode (com.alibaba.cobar.mysql.MySQLDataNode)2 MySQLDataSource (com.alibaba.cobar.mysql.MySQLDataSource)2 ConfigInitializer (com.alibaba.cobar.ConfigInitializer)1