You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/08/31 11:05:13 UTC

[shardingsphere] branch master updated: Refactor registry center node listeners

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

panjuan 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 cbc908a  Refactor registry center node listeners
     new f90bdbd  Merge pull request #7185 from menghaoranss/issue7108-2
cbc908a is described below

commit cbc908a289fbb9f1560311478fb53f68c69b4209
Author: menghaoranss <lo...@163.com>
AuthorDate: Mon Aug 31 19:00:51 2020 +0800

    Refactor registry center node listeners
---
 .../core/facade/listener/GovernanceListenerManager.java  |  2 +-
 .../governance/core/registry/RegistryCenterNode.java     |  9 +++++++--
 .../listener/DataSourceStateChangedListener.java         | 16 ++++++++--------
 .../core/registry/listener/RegistryListenerManager.java  |  6 ++++--
 .../governance/core/registry/RegistryCenterNodeTest.java |  2 +-
 .../listener/DataSourceStateChangedListenerTest.java     |  5 +++--
 .../registry/listener/RegistryListenerManagerTest.java   |  4 +++-
 7 files changed, 27 insertions(+), 17 deletions(-)

diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/listener/GovernanceListenerManager.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/listener/GovernanceListenerManager.java
index 639ff88..cee3349 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/listener/GovernanceListenerManager.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-facade/src/main/java/org/apache/shardingsphere/governance/core/facade/listener/GovernanceListenerManager.java
@@ -38,7 +38,7 @@ public final class GovernanceListenerManager {
     
     public GovernanceListenerManager(final RegistryRepository registryRepository, final ConfigurationRepository configurationRepository, final Collection<String> schemaNames) {
         configurationListenerManager = new ConfigurationListenerManager(configurationRepository, schemaNames);
-        registryListenerManager = new RegistryListenerManager(registryRepository);
+        registryListenerManager = new RegistryListenerManager(registryRepository, schemaNames);
         metaDataListenerManager = new MetaDataListenerManager(configurationRepository, schemaNames);
     }
     
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
index 6fa1130..fe1889d 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNode.java
@@ -23,6 +23,9 @@ import org.apache.shardingsphere.governance.core.registry.schema.GovernanceSchem
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * Registry center node.
@@ -82,8 +85,10 @@ public final class RegistryCenterNode {
      * @param dataSourceNodeFullPath data source node full path
      * @return governance sharding schema
      */
-    public GovernanceSchema getGovernanceShardingSchema(final String dataSourceNodeFullPath) {
-        return new GovernanceSchema(dataSourceNodeFullPath.replace(getDataSourcesNodeFullRootPath() + '/', ""));
+    public Optional<GovernanceSchema> getGovernanceShardingSchema(final String dataSourceNodeFullPath) {
+        Pattern pattern = Pattern.compile(getDataSourcesNodeFullRootPath() + "/" + "(\\w+)/(\\w+)$", Pattern.CASE_INSENSITIVE);
+        Matcher matcher = pattern.matcher(dataSourceNodeFullPath);
+        return matcher.find() ? Optional.of(new GovernanceSchema(matcher.group(1), matcher.group(2))) : Optional.empty();
     }
     
     /**
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListener.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListener.java
index ca2c929..a84da32 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListener.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListener.java
@@ -27,7 +27,7 @@ import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.ChangedType;
 
-import java.util.Collections;
+import java.util.Collection;
 import java.util.Optional;
 
 /**
@@ -37,18 +37,18 @@ public final class DataSourceStateChangedListener extends PostGovernanceReposito
     
     private final RegistryCenterNode registryCenterNode;
     
-    public DataSourceStateChangedListener(final RegistryRepository registryRepository) {
-        super(registryRepository, Collections.singleton(new RegistryCenterNode().getDataSourcesNodeFullRootPath()));
+    public DataSourceStateChangedListener(final RegistryRepository registryRepository, final Collection<String> schemaNames) {
+        super(registryRepository, new RegistryCenterNode().getAllDataSourcesSchemaPaths(schemaNames));
         registryCenterNode = new RegistryCenterNode();
     }
     
     @Override
     protected Optional<GovernanceEvent> createGovernanceEvent(final DataChangedEvent event) {
-        return Optional.of(new DisabledStateChangedEvent(getShardingSchema(event.getKey()), isDataSourceDisabled(event)));
-    }
-    
-    private GovernanceSchema getShardingSchema(final String dataSourceNodeFullPath) {
-        return registryCenterNode.getGovernanceShardingSchema(dataSourceNodeFullPath);
+        Optional<GovernanceSchema> governanceSchema = registryCenterNode.getGovernanceShardingSchema(event.getKey());
+        if (governanceSchema.isPresent()) {
+            return Optional.of(new DisabledStateChangedEvent(governanceSchema.get(), isDataSourceDisabled(event)));
+        }
+        return Optional.empty();
     }
     
     private boolean isDataSourceDisabled(final DataChangedEvent event) {
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManager.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManager.java
index 4da8d19..2e2c985 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManager.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/main/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManager.java
@@ -20,6 +20,8 @@ package org.apache.shardingsphere.governance.core.registry.listener;
 import org.apache.shardingsphere.governance.repository.api.RegistryRepository;
 import org.apache.shardingsphere.governance.repository.api.listener.DataChangedEvent.ChangedType;
 
+import java.util.Collection;
+
 /**
  * Registry listener manager.
  */
@@ -29,9 +31,9 @@ public final class RegistryListenerManager {
     
     private final DataSourceStateChangedListener dataSourceStateChangedListener;
     
-    public RegistryListenerManager(final RegistryRepository registryRepository) {
+    public RegistryListenerManager(final RegistryRepository registryRepository, final Collection<String> schemaNames) {
         instanceStateChangedListener = new InstanceStateChangedListener(registryRepository);
-        dataSourceStateChangedListener = new DataSourceStateChangedListener(registryRepository);
+        dataSourceStateChangedListener = new DataSourceStateChangedListener(registryRepository, schemaNames);
     }
     
     /**
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
index 1928378..6e3747f 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/RegistryCenterNodeTest.java
@@ -42,7 +42,7 @@ public final class RegistryCenterNodeTest {
     
     @Test
     public void assertGetGovernanceShardingSchema() {
-        assertThat(registryCenterNode.getGovernanceShardingSchema("/registry/datasources/master_slave_db.slave_ds_0").getSchemaName(), is("master_slave_db"));
+        assertThat(registryCenterNode.getGovernanceShardingSchema("/registry/datasources/master_slave_db/slave_ds_0").get().getSchemaName(), is("master_slave_db"));
     }
     
     @Test
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListenerTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListenerTest.java
index 23a1356..727cc55 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListenerTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/DataSourceStateChangedListenerTest.java
@@ -29,6 +29,7 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Arrays;
 import java.util.Optional;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -45,13 +46,13 @@ public final class DataSourceStateChangedListenerTest {
     
     @Before
     public void setUp() {
-        dataSourceStateChangedListener = new DataSourceStateChangedListener(registryRepository);
+        dataSourceStateChangedListener = new DataSourceStateChangedListener(registryRepository, Arrays.asList("sharding_db", "masterslave_db", "encrypt_db"));
     }
     
     @Test
     public void assertCreateGovernanceEvent() {
         Optional<GovernanceEvent> actual = dataSourceStateChangedListener.createGovernanceEvent(
-                new DataChangedEvent("/registry/datasources/master_slave_db.slave_ds_0", "disabled", ChangedType.UPDATED));
+                new DataChangedEvent("/registry/datasources/master_slave_db/slave_ds_0", "disabled", ChangedType.UPDATED));
         assertTrue(actual.isPresent());
         assertThat(((DisabledStateChangedEvent) actual.get()).getGovernanceSchema().getSchemaName(), is(new GovernanceSchema("master_slave_db", "slave_ds_0").getSchemaName()));
     }
diff --git a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManagerTest.java b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManagerTest.java
index d926b17..a43cacc 100644
--- a/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManagerTest.java
+++ b/shardingsphere-governance/shardingsphere-governance-core/shardingsphere-governance-core-registry/src/test/java/org/apache/shardingsphere/governance/core/registry/listener/RegistryListenerManagerTest.java
@@ -25,6 +25,8 @@ import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
+import java.util.Arrays;
+
 import static org.mockito.Mockito.verify;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -41,7 +43,7 @@ public final class RegistryListenerManagerTest {
     
     @Test
     public void assertInitListeners() {
-        RegistryListenerManager actual = new RegistryListenerManager(registryRepository);
+        RegistryListenerManager actual = new RegistryListenerManager(registryRepository, Arrays.asList("sharding_db", "masterslave_db", "encrypt_db"));
         FieldUtil.setField(actual, "instanceStateChangedListener", instanceStateChangedListener);
         FieldUtil.setField(actual, "dataSourceStateChangedListener", dataSourceStateChangedListener);
         actual.initListeners();