This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang 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 d7b3e6e72a7 Add 
DatabaseDiscoveryProviderAlgorithm.getMinEnabledReplicas (#23889)
d7b3e6e72a7 is described below

commit d7b3e6e72a7a77bec907f4d050846a50a4d6ca48
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Feb 1 13:31:26 2023 +0800

    Add DatabaseDiscoveryProviderAlgorithm.getMinEnabledReplicas (#23889)
    
    * Add YamlStorageNodeDataSource
    
    * Merge StorageNodeStatus and DataSourceState
    
    * Refactor DatabaseDiscoveryEngine
    
    * Refactor DatabaseDiscoveryEngine
    
    * Add DatabaseDiscoveryProviderAlgorithm.getMinEnabledReplicas
---
 .../dbdiscovery/spi/DatabaseDiscoveryProviderAlgorithm.java      | 8 ++++++++
 .../dbdiscovery/algorithm/DatabaseDiscoveryEngine.java           | 7 ++-----
 .../fixture/CoreDatabaseDiscoveryProviderAlgorithmFixture.java   | 6 ++++++
 .../DistSQLDatabaseDiscoveryProviderAlgorithmFixture.java        | 6 ++++++
 .../mysql/type/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java   | 9 +++++++++
 ...MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm.java | 9 +++++++++
 ...GaussNormalReplicationDatabaseDiscoveryProviderAlgorithm.java | 9 +++++++++
 7 files changed, 49 insertions(+), 5 deletions(-)

diff --git 
a/features/db-discovery/api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryProviderAlgorithm.java
 
b/features/db-discovery/api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryProviderAlgorithm.java
index ac384b5d54e..4ba87734a69 100644
--- 
a/features/db-discovery/api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryProviderAlgorithm.java
+++ 
b/features/db-discovery/api/src/main/java/org/apache/shardingsphere/dbdiscovery/spi/DatabaseDiscoveryProviderAlgorithm.java
@@ -22,6 +22,7 @@ import 
org.apache.shardingsphere.infra.algorithm.ShardingSphereAlgorithm;
 import javax.sql.DataSource;
 import java.sql.SQLException;
 import java.util.Collection;
+import java.util.Optional;
 
 /**
  * Database discovery provider algorithm.
@@ -53,4 +54,11 @@ public interface DatabaseDiscoveryProviderAlgorithm extends 
ShardingSphereAlgori
      * @throws SQLException SQL exception
      */
     ReplicaDataSourceStatus loadReplicaStatus(DataSource replicaDataSource) 
throws SQLException;
+    
+    /**
+     * Get min enabled replicas.
+     * 
+     * @return min enabled replicas
+     */
+    Optional<Integer> getMinEnabledReplicas();
 }
diff --git 
a/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
 
b/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
index 726a7587d34..6cbe6ef5010 100644
--- 
a/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
+++ 
b/features/db-discovery/core/src/main/java/org/apache/shardingsphere/dbdiscovery/algorithm/DatabaseDiscoveryEngine.java
@@ -17,10 +17,8 @@
 
 package org.apache.shardingsphere.dbdiscovery.algorithm;
 
-import com.google.common.base.Strings;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
-import 
org.apache.shardingsphere.dbdiscovery.mysql.type.MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm;
 import 
org.apache.shardingsphere.dbdiscovery.spi.DatabaseDiscoveryProviderAlgorithm;
 import org.apache.shardingsphere.dbdiscovery.spi.ReplicaDataSourceStatus;
 import org.apache.shardingsphere.infra.datasource.state.DataSourceState;
@@ -109,12 +107,11 @@ public final class DatabaseDiscoveryEngine {
                 eventBusContext.post(new DataSourceDisabledEvent(databaseName, 
groupName, entry.getKey(), replicaStorageNode));
                 continue;
             }
-            if 
(Strings.isNullOrEmpty(databaseDiscoveryProviderAlgorithm.getProps().getProperty("min-enabled-replicas")))
 {
+            if 
(!databaseDiscoveryProviderAlgorithm.getMinEnabledReplicas().isPresent()) {
                 eventBusContext.post(new DataSourceDisabledEvent(databaseName, 
groupName, entry.getKey(), replicaStorageNode));
                 continue;
             }
-            if (!(databaseDiscoveryProviderAlgorithm instanceof 
MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm)
-                    || enabledReplicasCount > 
Integer.parseInt(databaseDiscoveryProviderAlgorithm.getProps().getProperty("min-enabled-replicas",
 "0"))) {
+            if (enabledReplicasCount > 
databaseDiscoveryProviderAlgorithm.getMinEnabledReplicas().get()) {
                 enabledReplicasCount -= 
disabledDataSourceNames.contains(entry.getKey()) ? 0 : 1;
                 eventBusContext.post(new DataSourceDisabledEvent(databaseName, 
groupName, entry.getKey(), replicaStorageNode));
             }
diff --git 
a/features/db-discovery/core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreDatabaseDiscoveryProviderAlgorithmFixture.java
 
b/features/db-discovery/core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreDatabaseDiscoveryProviderAlgorithmFixture.java
index d03fc796b45..938a44959f7 100644
--- 
a/features/db-discovery/core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreDatabaseDiscoveryProviderAlgorithmFixture.java
+++ 
b/features/db-discovery/core/src/test/java/org/apache/shardingsphere/dbdiscovery/fixture/CoreDatabaseDiscoveryProviderAlgorithmFixture.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.dbdiscovery.spi.ReplicaDataSourceStatus;
 
 import javax.sql.DataSource;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Properties;
 
 @Getter
@@ -49,6 +50,11 @@ public final class 
CoreDatabaseDiscoveryProviderAlgorithmFixture implements Data
         return new ReplicaDataSourceStatus(true, 0L);
     }
     
+    @Override
+    public Optional<Integer> getMinEnabledReplicas() {
+        return Optional.empty();
+    }
+    
     @Override
     public String getType() {
         return "CORE.FIXTURE";
diff --git 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLDatabaseDiscoveryProviderAlgorithmFixture.java
 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLDatabaseDiscoveryProviderAlgorithmFixture.java
index 86baff529e1..f47e2d7e8be 100644
--- 
a/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLDatabaseDiscoveryProviderAlgorithmFixture.java
+++ 
b/features/db-discovery/distsql/handler/src/test/java/org/apache/shardingsphere/dbdiscovery/distsql/handler/fixture/DistSQLDatabaseDiscoveryProviderAlgorithmFixture.java
@@ -23,6 +23,7 @@ import 
org.apache.shardingsphere.dbdiscovery.spi.ReplicaDataSourceStatus;
 
 import javax.sql.DataSource;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Properties;
 
 @Getter
@@ -49,6 +50,11 @@ public final class 
DistSQLDatabaseDiscoveryProviderAlgorithmFixture implements D
         return new ReplicaDataSourceStatus(true, 0L);
     }
     
+    @Override
+    public Optional<Integer> getMinEnabledReplicas() {
+        return Optional.empty();
+    }
+    
     @Override
     public String getType() {
         return "DISTSQL.FIXTURE";
diff --git 
a/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
 
b/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
index d36dfab242d..e2a65d64d2f 100644
--- 
a/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
+++ 
b/features/db-discovery/provider/mysql/src/main/java/org/apache/shardingsphere/dbdiscovery/mysql/type/MGRMySQLDatabaseDiscoveryProviderAlgorithm.java
@@ -38,6 +38,7 @@ import java.sql.Statement;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -63,9 +64,12 @@ public final class 
MGRMySQLDatabaseDiscoveryProviderAlgorithm implements Databas
     
     private Properties props;
     
+    private int minEnabledReplicas;
+    
     @Override
     public void init(final Properties props) {
         this.props = props;
+        minEnabledReplicas = 
Integer.parseInt(props.getProperty("min-enabled-replicas", "0"));
     }
     
     @Override
@@ -164,6 +168,11 @@ public final class 
MGRMySQLDatabaseDiscoveryProviderAlgorithm implements Databas
         }
     }
     
+    @Override
+    public Optional<Integer> getMinEnabledReplicas() {
+        return Optional.of(minEnabledReplicas);
+    }
+    
     @Override
     public String getType() {
         return "MySQL.MGR";
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 e0392edc455..12970f65c30 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
@@ -33,6 +33,7 @@ import java.sql.Statement;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
+import java.util.Optional;
 import java.util.Properties;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -52,11 +53,14 @@ public final class 
MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm impl
     @Getter
     private Properties props;
     
+    private int minEnabledReplicas;
+    
     private long delayMillisecondsThreshold;
     
     @Override
     public void init(final Properties props) {
         this.props = props;
+        minEnabledReplicas = 
Integer.parseInt(props.getProperty("min-enabled-replicas", "0"));
         delayMillisecondsThreshold = 
Long.parseLong(props.getProperty("delay-milliseconds-threshold", "0"));
     }
     
@@ -144,6 +148,11 @@ public final class 
MySQLNormalReplicationDatabaseDiscoveryProviderAlgorithm impl
         }
     }
     
+    @Override
+    public Optional<Integer> getMinEnabledReplicas() {
+        return Optional.of(minEnabledReplicas);
+    }
+    
     @Override
     public String getType() {
         return "MySQL.NORMAL_REPLICATION";
diff --git 
a/features/db-discovery/provider/opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
 
b/features/db-discovery/provider/opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
index b6c96c7b9f6..355d08a5fdd 100644
--- 
a/features/db-discovery/provider/opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
+++ 
b/features/db-discovery/provider/opengauss/src/main/java/org/apache/shardingsphere/dbdiscovery/opengauss/OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm.java
@@ -27,6 +27,7 @@ import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
+import java.util.Optional;
 import java.util.Properties;
 
 /**
@@ -39,9 +40,12 @@ public final class 
OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm
     
     private Properties props;
     
+    private int minEnabledReplicas;
+    
     @Override
     public void init(final Properties props) {
         this.props = props;
+        minEnabledReplicas = 
Integer.parseInt(props.getProperty("min-enabled-replicas", "0"));
     }
     
     @Override
@@ -73,6 +77,11 @@ public final class 
OpenGaussNormalReplicationDatabaseDiscoveryProviderAlgorithm
         }
     }
     
+    @Override
+    public Optional<Integer> getMinEnabledReplicas() {
+        return Optional.of(minEnabledReplicas);
+    }
+    
     @Override
     public String getType() {
         return "openGauss.NORMAL_REPLICATION";

Reply via email to