You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/01/31 07:44:35 UTC
[shardingsphere] branch master updated: Refactor MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm (#23862)
This is an automated email from the ASF dual-hosted git repository.
zhaojinchao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 0e238587479 Refactor MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm (#23862)
0e238587479 is described below
commit 0e238587479463324975a5442be4e5b71840ee90
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Jan 31 15:44:27 2023 +0800
Refactor MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm (#23862)
* Remove useless ProxyContext.getRules()
* Refactor MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm
---
...licationDatabaseDiscoveryProviderAlgorithm.java | 28 ++++++++++++----------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm.java b/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
index d561182baf3..e0392edc455 100644
--- a/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
+++ b/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
@@ -17,7 +17,6 @@
package org.apache.shardingsphere.dbdiscovery.mysql.type;
-import com.google.common.base.Strings;
import lombok.Getter;
import org.apache.shardingsphere.dbdiscovery.mysql.exception.replica.DuplicatePrimaryDataSourceException;
import org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryProviderAlgorithm;
@@ -37,11 +36,11 @@ import java.util.LinkedList;
import java.util.Properties;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
+import java.util.stream.Collectors;
/**
* Normal replication database discovery provider algorithm for MySQL.
*/
-@Getter
public final class MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm implements DatabaseDiscoveryProviderAlgorithm {
private static final String SHOW_SLAVE_STATUS = "SHOW SLAVE STATUS";
@@ -50,32 +49,36 @@ public final class MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm impl
private static final String SHOW_VARIABLES_READ_ONLY = "SHOW VARIABLES LIKE 'read_only'";
+ @Getter
private Properties props;
+ private long delayMillisecondsThreshold;
+
@Override
public void init(final Properties props) {
this.props = props;
+ delayMillisecondsThreshold = Long.parseLong(props.getProperty("delay-milliseconds-threshold", "0"));
}
@Override
public void checkEnvironment(final String databaseName, final Collection<DataSource> dataSources) {
ExecutorService executorService = ExecutorEngine.createExecutorEngineWithCPUAndResources(dataSources.size()).getExecutorServiceManager().getExecutorService();
- Collection<CompletableFuture<Boolean>> completableFutures = new LinkedList<>();
- for (DataSource dataSource : dataSources) {
- completableFutures.add(supplyAsyncCheckEnvironment(dataSource, executorService));
- }
+ checkPrimaryDataSource(databaseName, dataSources.stream().map(each -> asyncCheckEnvironment(executorService, each)).collect(Collectors.toList()));
+ }
+
+ private void checkPrimaryDataSource(final String databaseName, final Collection<CompletableFuture<Boolean>> completableFutures) {
CompletableFuture.allOf(completableFutures.toArray(new CompletableFuture[0]));
Iterator<CompletableFuture<Boolean>> primaryInstancesFuture = completableFutures.stream().iterator();
- int primaryCount = 0;
+ int primaryInstanceCount = 0;
while (primaryInstancesFuture.hasNext()) {
if (primaryInstancesFuture.next().join()) {
- primaryCount++;
+ primaryInstanceCount++;
}
}
- ShardingSpherePreconditions.checkState(1 == primaryCount, () -> new DuplicatePrimaryDataSourceException(databaseName));
+ ShardingSpherePreconditions.checkState(1 == primaryInstanceCount, () -> new DuplicatePrimaryDataSourceException(databaseName));
}
- private CompletableFuture<Boolean> supplyAsyncCheckEnvironment(final DataSource dataSource, final ExecutorService executorService) {
+ private CompletableFuture<Boolean> asyncCheckEnvironment(final ExecutorService executorService, final DataSource dataSource) {
return CompletableFuture.supplyAsync(() -> {
try {
return isPrimaryInstance(dataSource);
@@ -122,12 +125,11 @@ public final class MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm impl
try (
Connection connection = replicaDataSource.getConnection();
Statement statement = connection.createStatement()) {
- String delayMillisecondsThreshold = getProps().getProperty("delay-milliseconds-threshold");
- if (Strings.isNullOrEmpty(delayMillisecondsThreshold)) {
+ if (0L == delayMillisecondsThreshold) {
return new ReplicaDataSourceStatus(true, 0L);
}
long replicationDelayMilliseconds = queryReplicationDelayMilliseconds(statement);
- boolean isDelay = replicationDelayMilliseconds >= Long.parseLong(delayMillisecondsThreshold);
+ boolean isDelay = replicationDelayMilliseconds >= delayMillisecondsThreshold;
return new ReplicaDataSourceStatus(!isDelay, replicationDelayMilliseconds);
}
}