Search in sources :

Example 1 with CobarCluster

use of com.alibaba.cobar.CobarCluster in project cobar by alibaba.

the class ShowCobarCluster method getRows.

private static List<RowDataPacket> getRows(ServerConnection c) {
    List<RowDataPacket> rows = new LinkedList<RowDataPacket>();
    CobarConfig config = CobarServer.getInstance().getConfig();
    CobarCluster cluster = config.getCluster();
    Map<String, SchemaConfig> schemas = config.getSchemas();
    SchemaConfig schema = (c.getSchema() == null) ? null : schemas.get(c.getSchema());
    // 如果没有指定schema或者schema为null,则使用全部集群。
    if (schema == null) {
        Map<String, CobarNode> nodes = cluster.getNodes();
        for (CobarNode n : nodes.values()) {
            if (n != null && n.isOnline()) {
                rows.add(getRow(n, c.getCharset()));
            }
        }
    } else {
        String group = (schema.getGroup() == null) ? "default" : schema.getGroup();
        List<String> nodeList = cluster.getGroups().get(group);
        if (nodeList != null && nodeList.size() > 0) {
            Map<String, CobarNode> nodes = cluster.getNodes();
            for (String id : nodeList) {
                CobarNode n = nodes.get(id);
                if (n != null && n.isOnline()) {
                    rows.add(getRow(n, c.getCharset()));
                }
            }
        }
        // 如果schema对应的group或者默认group都没有有效的节点,则使用全部集群。
        if (rows.size() == 0) {
            Map<String, CobarNode> nodes = cluster.getNodes();
            for (CobarNode n : nodes.values()) {
                if (n != null && n.isOnline()) {
                    rows.add(getRow(n, c.getCharset()));
                }
            }
        }
    }
    if (rows.size() == 0) {
        alarm.error(Alarms.CLUSTER_EMPTY + c.toString());
    }
    return rows;
}
Also used : SchemaConfig(com.alibaba.cobar.config.model.SchemaConfig) CobarNode(com.alibaba.cobar.CobarNode) RowDataPacket(com.alibaba.cobar.net.mysql.RowDataPacket) CobarConfig(com.alibaba.cobar.CobarConfig) LinkedList(java.util.LinkedList) CobarCluster(com.alibaba.cobar.CobarCluster)

Example 2 with CobarCluster

use of com.alibaba.cobar.CobarCluster 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 3 with CobarCluster

use of com.alibaba.cobar.CobarCluster 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)3 CobarConfig (com.alibaba.cobar.CobarConfig)3 SchemaConfig (com.alibaba.cobar.config.model.SchemaConfig)3 DataSourceConfig (com.alibaba.cobar.config.model.DataSourceConfig)2 QuarantineConfig (com.alibaba.cobar.config.model.QuarantineConfig)2 UserConfig (com.alibaba.cobar.config.model.UserConfig)2 MySQLDataNode (com.alibaba.cobar.mysql.MySQLDataNode)2 MySQLDataSource (com.alibaba.cobar.mysql.MySQLDataSource)2 CobarNode (com.alibaba.cobar.CobarNode)1 ConfigInitializer (com.alibaba.cobar.ConfigInitializer)1 RowDataPacket (com.alibaba.cobar.net.mysql.RowDataPacket)1 LinkedList (java.util.LinkedList)1