Search in sources :

Example 1 with MySQLDataSource

use of com.alibaba.cobar.mysql.MySQLDataSource in project cobar by alibaba.

the class ClearSlow method schema.

public static void schema(ManagerConnection c, String name) {
    CobarConfig conf = CobarServer.getInstance().getConfig();
    SchemaConfig schema = conf.getSchemas().get(name);
    if (schema != null) {
        Map<String, MySQLDataNode> dataNodes = conf.getDataNodes();
        for (String n : schema.getAllDataNodes()) {
            MySQLDataNode dn = dataNodes.get(n);
            MySQLDataSource ds = null;
            if (dn != null && (ds = dn.getSource()) != null) {
                ds.getSqlRecorder().clear();
            }
        }
        c.write(c.writeToBuffer(OkPacket.OK, c.allocate()));
    } else {
        c.writeErrMessage(ErrorCode.ER_YES, "Invalid Schema:" + name);
    }
}
Also used : MySQLDataNode(com.alibaba.cobar.mysql.MySQLDataNode) SchemaConfig(com.alibaba.cobar.config.model.SchemaConfig) MySQLDataSource(com.alibaba.cobar.mysql.MySQLDataSource) CobarConfig(com.alibaba.cobar.CobarConfig)

Example 2 with MySQLDataSource

use of com.alibaba.cobar.mysql.MySQLDataSource 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 MySQLDataSource

use of com.alibaba.cobar.mysql.MySQLDataSource 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)

Example 4 with MySQLDataSource

use of com.alibaba.cobar.mysql.MySQLDataSource in project cobar by alibaba.

the class ShowSlow method dataNode.

public static void dataNode(ManagerConnection c, String name) {
    ByteBuffer buffer = c.allocate();
    // write header
    buffer = header.write(buffer, c);
    // write fields
    for (FieldPacket field : fields) {
        buffer = field.write(buffer, c);
    }
    // write eof
    buffer = eof.write(buffer, c);
    // write rows
    byte packetId = eof.packetId;
    CobarConfig conf = CobarServer.getInstance().getConfig();
    MySQLDataNode dn = conf.getDataNodes().get(name);
    MySQLDataSource ds = null;
    if (dn != null && (ds = dn.getSource()) != null) {
        SQLRecord[] records = ds.getSqlRecorder().getRecords();
        for (int i = records.length - 1; i >= 0; i--) {
            if (records[i] != null) {
                RowDataPacket row = getRow(records[i], c.getCharset());
                row.packetId = ++packetId;
                buffer = row.write(buffer, c);
            }
        }
    }
    // write last eof
    EOFPacket lastEof = new EOFPacket();
    lastEof.packetId = ++packetId;
    buffer = lastEof.write(buffer, c);
    // write buffer
    c.write(buffer);
}
Also used : MySQLDataNode(com.alibaba.cobar.mysql.MySQLDataNode) MySQLDataSource(com.alibaba.cobar.mysql.MySQLDataSource) RowDataPacket(com.alibaba.cobar.net.mysql.RowDataPacket) EOFPacket(com.alibaba.cobar.net.mysql.EOFPacket) CobarConfig(com.alibaba.cobar.CobarConfig) SQLRecord(com.alibaba.cobar.statistic.SQLRecord) ByteBuffer(java.nio.ByteBuffer) FieldPacket(com.alibaba.cobar.net.mysql.FieldPacket)

Example 5 with MySQLDataSource

use of com.alibaba.cobar.mysql.MySQLDataSource in project cobar by alibaba.

the class ShowSlow method schema.

public static void schema(ManagerConnection c, String name) {
    ByteBuffer buffer = c.allocate();
    // write header
    buffer = header.write(buffer, c);
    // write fields
    for (FieldPacket field : fields) {
        buffer = field.write(buffer, c);
    }
    // write eof
    buffer = eof.write(buffer, c);
    // write rows
    byte packetId = eof.packetId;
    CobarConfig conf = CobarServer.getInstance().getConfig();
    SchemaConfig schema = conf.getSchemas().get(name);
    if (schema != null) {
        SQLRecorder recorder = new SQLRecorder(conf.getSystem().getSqlRecordCount());
        Map<String, MySQLDataNode> dataNodes = conf.getDataNodes();
        for (String n : schema.getAllDataNodes()) {
            MySQLDataNode dn = dataNodes.get(n);
            MySQLDataSource ds = null;
            if (dn != null && (ds = dn.getSource()) != null) {
                for (SQLRecord r : ds.getSqlRecorder().getRecords()) {
                    if (r != null && recorder.check(r.executeTime)) {
                        recorder.add(r);
                    }
                }
            }
        }
        SQLRecord[] records = recorder.getRecords();
        for (int i = records.length - 1; i >= 0; i--) {
            if (records[i] != null) {
                RowDataPacket row = getRow(records[i], c.getCharset());
                row.packetId = ++packetId;
                buffer = row.write(buffer, c);
            }
        }
    }
    // write last eof
    EOFPacket lastEof = new EOFPacket();
    lastEof.packetId = ++packetId;
    buffer = lastEof.write(buffer, c);
    // write buffer
    c.write(buffer);
}
Also used : MySQLDataNode(com.alibaba.cobar.mysql.MySQLDataNode) SchemaConfig(com.alibaba.cobar.config.model.SchemaConfig) SQLRecorder(com.alibaba.cobar.statistic.SQLRecorder) RowDataPacket(com.alibaba.cobar.net.mysql.RowDataPacket) EOFPacket(com.alibaba.cobar.net.mysql.EOFPacket) CobarConfig(com.alibaba.cobar.CobarConfig) SQLRecord(com.alibaba.cobar.statistic.SQLRecord) ByteBuffer(java.nio.ByteBuffer) MySQLDataSource(com.alibaba.cobar.mysql.MySQLDataSource) FieldPacket(com.alibaba.cobar.net.mysql.FieldPacket)

Aggregations

MySQLDataSource (com.alibaba.cobar.mysql.MySQLDataSource)10 MySQLDataNode (com.alibaba.cobar.mysql.MySQLDataNode)8 CobarConfig (com.alibaba.cobar.CobarConfig)6 DataSourceConfig (com.alibaba.cobar.config.model.DataSourceConfig)5 RowDataPacket (com.alibaba.cobar.net.mysql.RowDataPacket)5 SchemaConfig (com.alibaba.cobar.config.model.SchemaConfig)4 EOFPacket (com.alibaba.cobar.net.mysql.EOFPacket)3 FieldPacket (com.alibaba.cobar.net.mysql.FieldPacket)3 ByteBuffer (java.nio.ByteBuffer)3 CobarCluster (com.alibaba.cobar.CobarCluster)2 QuarantineConfig (com.alibaba.cobar.config.model.QuarantineConfig)2 UserConfig (com.alibaba.cobar.config.model.UserConfig)2 SQLRecord (com.alibaba.cobar.statistic.SQLRecord)2 ConfigInitializer (com.alibaba.cobar.ConfigInitializer)1 SQLRecorder (com.alibaba.cobar.statistic.SQLRecorder)1 ArrayList (java.util.ArrayList)1