Search in sources :

Example 1 with MySQLConsistencyChecker

use of io.mycat.backend.heartbeat.MySQLConsistencyChecker in project Mycat-Server by MyCATApache.

the class GlobalTableUtil method reGetColumnsForTable.

/**
	 * 重新获得table 的列list
	 * @param tableName
	 */
private static void reGetColumnsForTable(String tableName) {
    MycatConfig config = MycatServer.getInstance().getConfig();
    if (globalTableMap != null && globalTableMap.get(tableName.toUpperCase()) != null) {
        TableConfig tableConfig = globalTableMap.get(tableName.toUpperCase());
        if (// consistencyCheck 在运行中
        tableConfig == null || isInnerColumnCheckFinished != 1)
            return;
        String nodeName = tableConfig.getDataNodes().get(0);
        Map<String, PhysicalDBNode> map = config.getDataNodes();
        for (String k2 : map.keySet()) {
            PhysicalDBNode dBnode = map.get(k2);
            if (nodeName.equals(dBnode.getName())) {
                PhysicalDBPool pool = dBnode.getDbPool();
                List<PhysicalDatasource> dsList = (List<PhysicalDatasource>) pool.genAllDataSources();
                for (PhysicalDatasource ds : dsList) {
                    if (ds instanceof MySQLDataSource) {
                        MySQLDataSource mds = (MySQLDataSource) dsList.get(0);
                        MySQLConsistencyChecker checker = new MySQLConsistencyChecker(mds, tableConfig.getName());
                        checker.checkInnerColumnExist();
                        // 运行一次就行了,不需要像consistencyCheck那样每个db都运行一次
                        return;
                    }
                }
            }
        }
    }
}
Also used : PhysicalDBNode(io.mycat.backend.datasource.PhysicalDBNode) MySQLConsistencyChecker(io.mycat.backend.heartbeat.MySQLConsistencyChecker) PhysicalDatasource(io.mycat.backend.datasource.PhysicalDatasource) MySQLDataSource(io.mycat.backend.mysql.nio.MySQLDataSource) TableConfig(io.mycat.config.model.TableConfig) PhysicalDBPool(io.mycat.backend.datasource.PhysicalDBPool) ArrayList(java.util.ArrayList) List(java.util.List) MycatConfig(io.mycat.config.MycatConfig)

Example 2 with MySQLConsistencyChecker

use of io.mycat.backend.heartbeat.MySQLConsistencyChecker in project Mycat-Server by MyCATApache.

the class GlobalTableUtil method consistencyCheck.

public static void consistencyCheck() {
    MycatConfig config = MycatServer.getInstance().getConfig();
    for (String key : globalTableMap.keySet()) {
        TableConfig table = globalTableMap.get(key);
        // <table name="travelrecord" dataNode="dn1,dn2,dn3"
        List<String> dataNodeList = table.getDataNodes();
        // 记录本次已经执行的datanode
        // 多个 datanode 对应到同一个 PhysicalDatasource 只执行一次
        Map<String, String> executedMap = new HashMap<>();
        for (String nodeName : dataNodeList) {
            Map<String, PhysicalDBNode> map = config.getDataNodes();
            for (String k2 : map.keySet()) {
                // <dataNode name="dn1" dataHost="localhost1" database="db1" />
                PhysicalDBNode dBnode = map.get(k2);
                if (nodeName.equals(dBnode.getName())) {
                    // dn1,dn2,dn3
                    PhysicalDBPool pool = dBnode.getDbPool();
                    Collection<PhysicalDatasource> allDS = pool.genAllDataSources();
                    for (PhysicalDatasource pds : allDS) {
                        if (pds instanceof MySQLDataSource) {
                            MySQLDataSource mds = (MySQLDataSource) pds;
                            if (executedMap.get(pds.getName()) == null) {
                                MySQLConsistencyChecker checker = new MySQLConsistencyChecker(mds, table.getName());
                                isInnerColumnCheckFinished = 0;
                                checker.checkInnerColumnExist();
                                while (isInnerColumnCheckFinished <= 0) {
                                    LOGGER.debug("isInnerColumnCheckFinished:" + isInnerColumnCheckFinished);
                                    try {
                                        TimeUnit.SECONDS.sleep(1);
                                    } catch (InterruptedException e) {
                                        LOGGER.warn(e.getMessage());
                                    }
                                }
                                LOGGER.debug("isInnerColumnCheckFinished:" + isInnerColumnCheckFinished);
                                // 一种 check 完成之后,再进行另一种 check
                                checker = new MySQLConsistencyChecker(mds, table.getName());
                                isColumnCountCheckFinished = 0;
                                checker.checkRecordCout();
                                while (isColumnCountCheckFinished <= 0) {
                                    LOGGER.debug("isColumnCountCheckFinished:" + isColumnCountCheckFinished);
                                    try {
                                        TimeUnit.SECONDS.sleep(1);
                                    } catch (InterruptedException e) {
                                        LOGGER.warn(e.getMessage());
                                    }
                                }
                                LOGGER.debug("isColumnCountCheckFinished:" + isColumnCountCheckFinished);
                                checker = new MySQLConsistencyChecker(mds, table.getName());
                                checker.checkMaxTimeStamp();
                                executedMap.put(pds.getName(), nodeName);
                            }
                        }
                    }
                }
            }
        }
    }
}
Also used : PhysicalDBNode(io.mycat.backend.datasource.PhysicalDBNode) HashMap(java.util.HashMap) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) PhysicalDBPool(io.mycat.backend.datasource.PhysicalDBPool) MycatConfig(io.mycat.config.MycatConfig) MySQLConsistencyChecker(io.mycat.backend.heartbeat.MySQLConsistencyChecker) PhysicalDatasource(io.mycat.backend.datasource.PhysicalDatasource) MySQLDataSource(io.mycat.backend.mysql.nio.MySQLDataSource) TableConfig(io.mycat.config.model.TableConfig)

Aggregations

PhysicalDBNode (io.mycat.backend.datasource.PhysicalDBNode)2 PhysicalDBPool (io.mycat.backend.datasource.PhysicalDBPool)2 PhysicalDatasource (io.mycat.backend.datasource.PhysicalDatasource)2 MySQLConsistencyChecker (io.mycat.backend.heartbeat.MySQLConsistencyChecker)2 MySQLDataSource (io.mycat.backend.mysql.nio.MySQLDataSource)2 MycatConfig (io.mycat.config.MycatConfig)2 TableConfig (io.mycat.config.model.TableConfig)2 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1