Search in sources :

Example 1 with ReplicaSelector

use of io.mycat.replica.ReplicaSelector in project Mycat2 by MyCATApache.

the class RWEntry method snapshot.

public static RWEntryMap snapshot() {
    if ((!MetaClusterCurrent.exist(ReplicaSelectorManager.class)) || (!MetaClusterCurrent.exist(MycatRouterConfig.class))) {
        return new RWEntryMap();
    }
    ReplicaSelectorManager replicaSelectorManager = MetaClusterCurrent.wrapper(ReplicaSelectorManager.class);
    MycatRouterConfig routerConfig = MetaClusterCurrent.wrapper(MycatRouterConfig.class);
    Map<String, ClusterConfig> clusterConfigMap = routerConfig.getClusters().stream().collect(Collectors.toMap(k -> k.getName(), v -> v));
    Map<String, ReplicaSelector> replicaMap = replicaSelectorManager.getReplicaMap();
    Map<String, RWEntry> rwEntryMap = new HashMap<>();
    for (Map.Entry<String, Entry> entry : map.entrySet()) {
        String name = entry.getKey();
        Entry value = entry.getValue();
        // //////////////////////////////////////////////////////////////
        boolean status = false;
        ReplicaSelector replicaSelector = replicaMap.get(name);
        if (replicaSelector != null) {
            ClusterConfig clusterConfig = clusterConfigMap.get(replicaSelector.getName());
            List<String> dsNames = (List) ImmutableList.builder().addAll(clusterConfig.getMasters()).addAll(clusterConfig.getReplicas()).build().stream().distinct().collect(Collectors.toList());
            int i = 0;
            for (; i < dsNames.size(); i++) {
                String dsName = dsNames.get(i);
                PhysicsInstance physicsInstance = replicaSelector.getRawDataSourceMap().get(dsName);
                if (physicsInstance == null) {
                    break;
                } else {
                    if (!physicsInstance.isAlive()) {
                        break;
                    }
                }
            }
            status = i == dsNames.size();
        } else {
            status = false;
        }
        rwEntryMap.put(name, new RWEntry(value.MASTER.get(), value.SLAVE.get(), status));
    }
    RWEntryMap res = new RWEntryMap();
    res.rwMap = rwEntryMap;
    return res;
}
Also used : ReplicaSelectorManager(io.mycat.replica.ReplicaSelectorManager) ClusterConfig(io.mycat.config.ClusterConfig) java.util(java.util) MetaClusterCurrent(io.mycat.MetaClusterCurrent) MycatRouterConfig(io.mycat.config.MycatRouterConfig) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) EqualsAndHashCode(lombok.EqualsAndHashCode) Collectors(java.util.stream.Collectors) AtomicLong(java.util.concurrent.atomic.AtomicLong) ReplicaSelector(io.mycat.replica.ReplicaSelector) ImmutableList(com.google.common.collect.ImmutableList) ReplicaSelectorManager(io.mycat.replica.ReplicaSelectorManager) Data(lombok.Data) ToString(lombok.ToString) PhysicsInstance(io.mycat.replica.PhysicsInstance) MycatRouterConfig(io.mycat.config.MycatRouterConfig) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ToString(lombok.ToString) PhysicsInstance(io.mycat.replica.PhysicsInstance) ReplicaSelector(io.mycat.replica.ReplicaSelector) ImmutableList(com.google.common.collect.ImmutableList) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ClusterConfig(io.mycat.config.ClusterConfig)

Example 2 with ReplicaSelector

use of io.mycat.replica.ReplicaSelector in project Mycat2 by MyCATApache.

the class HintHandler method showClusters.

public static RowBaseIterator showClusters(String clusterName) {
    MycatRouterConfig routerConfig = MetaClusterCurrent.wrapper(MycatRouterConfig.class);
    ResultSetBuilder resultSetBuilder = ResultSetBuilder.create();
    resultSetBuilder.addColumnInfo("NAME", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("SWITCH_TYPE", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("MAX_REQUEST_COUNT", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("TYPE", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("WRITE_DS", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("READ_DS", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("WRITE_L", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("READ_L", JDBCType.VARCHAR);
    resultSetBuilder.addColumnInfo("AVAILABLE", JDBCType.VARCHAR);
    Collection<ReplicaSelector> values = MetaClusterCurrent.wrapper(ReplicaSelectorManager.class).getReplicaMap().values();
    Map<String, ClusterConfig> clusterConfigMap = routerConfig.getClusters().stream().collect(Collectors.toMap(k -> k.getName(), v -> v));
    for (ReplicaSelector value : values.stream().filter(v -> {
        if (clusterName != null) {
            return clusterName.equalsIgnoreCase(v.getName());
        }
        return true;
    }).collect(Collectors.toList())) {
        String NAME = value.getName();
        Optional<ClusterConfig> e = Optional.ofNullable(clusterConfigMap.get(NAME));
        ReplicaSwitchType SWITCH_TYPE = value.getSwitchType();
        int MAX_REQUEST_COUNT = value.maxRequestCount();
        String TYPE = value.getBalanceType().name();
        String WRITE_DS = ((List<PhysicsInstance>) value.getWriteDataSourceByReplicaType()).stream().map(i -> i.getName()).collect(Collectors.joining(","));
        String READ_DS = (value.getReadDataSourceByReplica()).stream().map(i -> i.getName()).collect(Collectors.joining(","));
        String WL = Optional.ofNullable(value.getDefaultWriteLoadBalanceStrategy()).map(i -> i.getClass().getName()).orElse(null);
        String RL = Optional.ofNullable(value.getDefaultReadLoadBalanceStrategy()).map(i -> i.getClass().getName()).orElse(null);
        String AVAILABLE = Boolean.toString(((List<PhysicsInstance>) value.getWriteDataSourceByReplicaType()).stream().anyMatch(PhysicsInstance::isAlive));
        resultSetBuilder.addObjectRowPayload(Arrays.asList(NAME, SWITCH_TYPE, MAX_REQUEST_COUNT, TYPE, WRITE_DS, READ_DS, WL, RL, AVAILABLE));
    }
    return resultSetBuilder.build();
}
Also used : MycatdbCommand(io.mycat.commands.MycatdbCommand) io.mycat(io.mycat) CSVRecord(org.apache.commons.csv.CSVRecord) JdbcDataSource(io.mycat.datasource.jdbc.datasource.JdbcDataSource) CSVFormat(org.apache.commons.csv.CSVFormat) HeartbeatFlow(io.mycat.replica.heartbeat.HeartbeatFlow) Duration(java.time.Duration) MySQLErrorCode(io.mycat.beans.mysql.MySQLErrorCode) JsonUtil(io.mycat.util.JsonUtil) MySqlHintStatement(com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement) io.mycat.config(io.mycat.config) Timestamp(java.sql.Timestamp) Reader(java.io.Reader) Future(io.vertx.core.Future) Collectors(java.util.stream.Collectors) ArrayBindable(org.apache.calcite.runtime.ArrayBindable) MycatSQLLogMonitor(io.mycat.monitor.MycatSQLLogMonitor) io.mycat.sqlhandler(io.mycat.sqlhandler) NormalTable(io.mycat.calcite.table.NormalTable) Nullable(org.jetbrains.annotations.Nullable) ReplicaSelector(io.mycat.replica.ReplicaSelector) UpdateSQLHandler(io.mycat.sqlhandler.dml.UpdateSQLHandler) Stream(java.util.stream.Stream) ReplicaSelectorManager(io.mycat.replica.ReplicaSelectorManager) DrdsRunnerHelper(io.mycat.calcite.DrdsRunnerHelper) PhysicsInstance(io.mycat.replica.PhysicsInstance) NotNull(org.jetbrains.annotations.NotNull) ShardingTable(io.mycat.calcite.table.ShardingTable) VertxExecuter(io.mycat.vertx.VertxExecuter) SqlEntry(io.mycat.monitor.SqlEntry) java.util(java.util) ResultSetBuilder(io.mycat.beans.mycat.ResultSetBuilder) SQLIdentifierExpr(com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr) LocalDateTime(java.time.LocalDateTime) XaLog(cn.mycat.vertx.xa.XaLog) Supplier(java.util.function.Supplier) Iterators(com.google.common.collect.Iterators) SqlResultSetService(io.mycat.commands.SqlResultSetService) InterruptThreadHint(io.mycat.hint.InterruptThreadHint) MycatSQLExprTableSourceUtil(io.mycat.util.MycatSQLExprTableSourceUtil) KillThreadHint(io.mycat.hint.KillThreadHint) Schedulers(io.reactivex.rxjava3.schedulers.Schedulers) JDBCType(java.sql.JDBCType) PrepareExecutor(io.mycat.calcite.PrepareExecutor) SchemaHandler(io.mycat.calcite.table.SchemaHandler) MySqlInsertStatement(com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement) ImmutableList(com.google.common.collect.ImmutableList) DatasourceStatus(io.mycat.replica.heartbeat.DatasourceStatus) Observable(io.reactivex.rxjava3.core.Observable) JdbcConnectionManager(io.mycat.datasource.jdbc.datasource.JdbcConnectionManager) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) RowBaseIterator(io.mycat.api.collector.RowBaseIterator) StreamSupport(java.util.stream.StreamSupport) GlobalTable(io.mycat.calcite.table.GlobalTable) SQLVariantRefExpr(com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr) SQLUtils(com.alibaba.druid.sql.SQLUtils) Flowable(io.reactivex.rxjava3.core.Flowable) PromiseInternal(io.vertx.core.impl.future.PromiseInternal) io.mycat.hint(io.mycat.hint) VertxUpdateExecuter(io.mycat.vertx.VertxUpdateExecuter) StringWriter(java.io.StringWriter) SQLInsertStatement(com.alibaba.druid.sql.ast.statement.SQLInsertStatement) ExecutorProvider(io.mycat.calcite.ExecutorProvider) IOException(java.io.IOException) QuoteMode(org.apache.commons.csv.QuoteMode) SQLCommentHint(com.alibaba.druid.sql.ast.SQLCommentHint) SqlRecorderRuntime(io.mycat.exporter.SqlRecorderRuntime) VertxUtil(io.mycat.util.VertxUtil) ReplicaSwitchType(io.mycat.replica.ReplicaSwitchType) SQLCharExpr(com.alibaba.druid.sql.ast.expr.SQLCharExpr) MycatInsertRel(io.mycat.calcite.physical.MycatInsertRel) io.mycat.calcite.spm(io.mycat.calcite.spm) NameMap(io.mycat.util.NameMap) MysqlPayloadObject(io.mycat.api.collector.MysqlPayloadObject) JdbcUtils(com.alibaba.druid.util.JdbcUtils) CodeExecuterContext(io.mycat.calcite.CodeExecuterContext) HeartBeatStatus(io.mycat.replica.heartbeat.HeartBeatStatus) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) UnmodifiableIterator(com.google.common.collect.UnmodifiableIterator) FileReader(java.io.FileReader) SQLExprTableSource(com.alibaba.druid.sql.ast.statement.SQLExprTableSource) StorageManager(io.mycat.sqlhandler.config.StorageManager) ResultSetBuilder(io.mycat.beans.mycat.ResultSetBuilder) ReplicaSelector(io.mycat.replica.ReplicaSelector) ReplicaSwitchType(io.mycat.replica.ReplicaSwitchType) ImmutableList(com.google.common.collect.ImmutableList) InterruptThreadHint(io.mycat.hint.InterruptThreadHint) KillThreadHint(io.mycat.hint.KillThreadHint) io.mycat.hint(io.mycat.hint) SQLCommentHint(com.alibaba.druid.sql.ast.SQLCommentHint)

Aggregations

ImmutableList (com.google.common.collect.ImmutableList)2 PhysicsInstance (io.mycat.replica.PhysicsInstance)2 ReplicaSelector (io.mycat.replica.ReplicaSelector)2 ReplicaSelectorManager (io.mycat.replica.ReplicaSelectorManager)2 java.util (java.util)2 Collectors (java.util.stream.Collectors)2 XaLog (cn.mycat.vertx.xa.XaLog)1 SQLUtils (com.alibaba.druid.sql.SQLUtils)1 SQLCommentHint (com.alibaba.druid.sql.ast.SQLCommentHint)1 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)1 SQLCharExpr (com.alibaba.druid.sql.ast.expr.SQLCharExpr)1 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)1 SQLVariantRefExpr (com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr)1 SQLExprTableSource (com.alibaba.druid.sql.ast.statement.SQLExprTableSource)1 SQLInsertStatement (com.alibaba.druid.sql.ast.statement.SQLInsertStatement)1 MySqlHintStatement (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlHintStatement)1 MySqlInsertStatement (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlInsertStatement)1 JdbcUtils (com.alibaba.druid.util.JdbcUtils)1 Iterators (com.google.common.collect.Iterators)1 UnmodifiableIterator (com.google.common.collect.UnmodifiableIterator)1