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 ce3bb93  Add SchemaMetaDataRegistrySubscriber (#11373)
ce3bb93 is described below

commit ce3bb936316af7b09d426aebaeba05df889c32cd
Author: Liang Zhang <[email protected]>
AuthorDate: Sun Jul 18 19:47:56 2021 +0800

    Add SchemaMetaDataRegistrySubscriber (#11373)
---
 .../governance/core/registry/RegistryCenter.java   |  6 +-
 ...vice.java => SchemaMetaDataPersistService.java} | 51 +++------------
 .../SchemaMetaDataRegistrySubscriber.java          | 69 ++++++++++++++++++++
 ....java => SchemaMetaDataPersistServiceTest.java} | 61 ++++--------------
 .../SchemaMetaDataRegistrySubscriberTest.java      | 73 ++++++++++++++++++++++
 5 files changed, 165 insertions(+), 95 deletions(-)

diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
index 0334d8b..53308d5 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/RegistryCenter.java
@@ -24,7 +24,7 @@ import 
org.apache.shardingsphere.governance.core.registry.cache.subscriber.Scali
 import 
org.apache.shardingsphere.governance.core.registry.config.subscriber.DataSourceRegistrySubscriber;
 import 
org.apache.shardingsphere.governance.core.registry.config.subscriber.GlobalRuleRegistrySubscriber;
 import 
org.apache.shardingsphere.governance.core.registry.config.subscriber.SchemaRuleRegistrySubscriber;
-import 
org.apache.shardingsphere.governance.core.registry.metadata.service.SchemaRegistryService;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.service.SchemaMetaDataPersistService;
 import 
org.apache.shardingsphere.governance.core.registry.process.subscriber.ProcessRegistrySubscriber;
 import 
org.apache.shardingsphere.governance.core.registry.state.service.DataSourceStatusRegistryService;
 import 
org.apache.shardingsphere.governance.core.registry.state.service.InstanceStatusRegistryService;
@@ -39,7 +39,7 @@ public final class RegistryCenter {
     
     private final String instanceId;
     
-    private final SchemaRegistryService schemaService;
+    private final SchemaMetaDataPersistService schemaService;
     
     private final DataSourceStatusRegistryService dataSourceStatusService;
     
@@ -49,7 +49,7 @@ public final class RegistryCenter {
     
     public RegistryCenter(final RegistryCenterRepository repository) {
         instanceId = GovernanceInstance.getInstance().getId();
-        schemaService = new SchemaRegistryService(repository);
+        schemaService = new SchemaMetaDataPersistService(repository);
         dataSourceStatusService = new 
DataSourceStatusRegistryService(repository);
         instanceStatusService = new InstanceStatusRegistryService(repository);
         lockService = new LockRegistryService(repository);
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryService.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistService.java
similarity index 62%
rename from 
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryService.java
rename to 
shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistService.java
index aafa9fc..98d4e2c 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryService.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistService.java
@@ -18,33 +18,25 @@
 package org.apache.shardingsphere.governance.core.registry.metadata.service;
 
 import com.google.common.base.Strings;
-import com.google.common.eventbus.Subscribe;
-import org.apache.shardingsphere.infra.config.persist.node.SchemaMetadataNode;
-import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseCreatedSQLNotificationEvent;
-import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseDroppedSQLNotificationEvent;
+import lombok.RequiredArgsConstructor;
 import org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
 import 
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
-import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
+import org.apache.shardingsphere.infra.config.persist.node.SchemaMetadataNode;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
 
 import java.util.Collection;
 import java.util.Optional;
 
 /**
- * Schema registry service.
+ * Schema meta data registry service.
  */
-public final class SchemaRegistryService {
+@RequiredArgsConstructor
+public final class SchemaMetaDataPersistService {
     
     private final RegistryCenterRepository repository;
     
-    public SchemaRegistryService(final RegistryCenterRepository repository) {
-        this.repository = repository;
-        ShardingSphereEventBus.getInstance().register(this);
-    }
-
     /**
      * Persist schema.
      *
@@ -52,7 +44,8 @@ public final class SchemaRegistryService {
      * @param schema schema to be persisted
      */
     public void persist(final String schemaName, final ShardingSphereSchema 
schema) {
-        
repository.persist(SchemaMetadataNode.getMetadataSchemaPath(schemaName), 
YamlEngine.marshal(new SchemaYamlSwapper().swapToYamlConfiguration(schema)));
+        String content = null == schema ? "" : YamlEngine.marshal(new 
SchemaYamlSwapper().swapToYamlConfiguration(schema));
+        
repository.persist(SchemaMetadataNode.getMetadataSchemaPath(schemaName), 
content);
     }
     
     /**
@@ -83,34 +76,4 @@ public final class SchemaRegistryService {
     public Collection<String> loadAllNames() {
         return 
repository.getChildrenKeys(SchemaMetadataNode.getMetadataNodePath());
     }
-    
-    /**
-     * Update when database created.
-     *
-     * @param event database created SQL notification event
-     */
-    @Subscribe
-    public void update(final DatabaseCreatedSQLNotificationEvent event) {
-        
repository.persist(SchemaMetadataNode.getSchemaNamePath(event.getDatabaseName()),
 "");
-    }
-    
-    /**
-     * Update when meta data altered.
-     *
-     * @param event schema altered event
-     */
-    @Subscribe
-    public void update(final SchemaAlteredEvent event) {
-        persist(event.getSchemaName(), event.getSchema());
-    }
-    
-    /**
-     * Update when database dropped.
-     *
-     * @param event database dropped SQL notification event
-     */
-    @Subscribe
-    public void update(final DatabaseDroppedSQLNotificationEvent event) {
-        
repository.delete(SchemaMetadataNode.getSchemaNamePath(event.getDatabaseName()));
-    }
 }
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
new file mode 100644
index 0000000..ecfa773
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/main/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriber.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.metadata.subscriber;
+
+import com.google.common.eventbus.Subscribe;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseCreatedSQLNotificationEvent;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseDroppedSQLNotificationEvent;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.service.SchemaMetaDataPersistService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.eventbus.ShardingSphereEventBus;
+import 
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
+
+/**
+ * Schema meta data registry subscriber.
+ */
+public final class SchemaMetaDataRegistrySubscriber {
+    
+    private final SchemaMetaDataPersistService persistService;
+    
+    public SchemaMetaDataRegistrySubscriber(final RegistryCenterRepository 
repository) {
+        persistService = new SchemaMetaDataPersistService(repository);
+        ShardingSphereEventBus.getInstance().register(this);
+    }
+    
+    /**
+     * Update when database created.
+     *
+     * @param event database created SQL notification event
+     */
+    @Subscribe
+    public void update(final DatabaseCreatedSQLNotificationEvent event) {
+        persistService.persist(event.getDatabaseName(), null);
+    }
+    
+    /**
+     * Update when meta data altered.
+     *
+     * @param event schema altered event
+     */
+    @Subscribe
+    public void update(final SchemaAlteredEvent event) {
+        persistService.persist(event.getSchemaName(), event.getSchema());
+    }
+    
+    /**
+     * Update when database dropped.
+     *
+     * @param event database dropped SQL notification event
+     */
+    @Subscribe
+    public void update(final DatabaseDroppedSQLNotificationEvent event) {
+        persistService.delete(event.getDatabaseName());
+    }
+}
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryServiceTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistServiceTest.java
similarity index 56%
rename from 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryServiceTest.java
rename to 
shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistServiceTest.java
index f9b0be6..b942e8a 100644
--- 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaRegistryServiceTest.java
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/service/SchemaMetaDataPersistServiceTest.java
@@ -18,22 +18,17 @@
 package org.apache.shardingsphere.governance.core.registry.metadata.service;
 
 import lombok.SneakyThrows;
-import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseCreatedSQLNotificationEvent;
-import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseDroppedSQLNotificationEvent;
 import org.apache.shardingsphere.governance.core.yaml.schema.pojo.YamlSchema;
 import 
org.apache.shardingsphere.governance.core.yaml.schema.swapper.SchemaYamlSwapper;
 import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
 import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
-import 
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
 import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
-import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
 
 import java.io.IOException;
-import java.lang.reflect.Field;
 import java.net.URISyntaxException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -53,43 +48,34 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
-public final class SchemaRegistryServiceTest {
+public final class SchemaMetaDataPersistServiceTest {
     
     @Mock
-    private RegistryCenterRepository registryCenterRepository;
-    
-    private SchemaRegistryService schemaRegistryService;
-    
-    @Before
-    public void setUp() throws ReflectiveOperationException {
-        schemaRegistryService = new 
SchemaRegistryService(registryCenterRepository);
-        Field field = 
schemaRegistryService.getClass().getDeclaredField("repository");
-        field.setAccessible(true);
-        field.set(schemaRegistryService, registryCenterRepository);
-    }
+    private RegistryCenterRepository repository;
     
     @Test
     public void assertPersist() {
         ShardingSphereSchema schema = new 
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(), 
YamlSchema.class));
-        schemaRegistryService.persist("foo_db", schema);
-        
verify(registryCenterRepository).persist(eq("/metadata/foo_db/schema"), 
anyString());
+        new SchemaMetaDataPersistService(repository).persist("foo_db", schema);
+        verify(repository).persist(eq("/metadata/foo_db/schema"), anyString());
     }
     
     @Test
     public void assertDelete() {
-        schemaRegistryService.delete("foo_db");
-        verify(registryCenterRepository).delete(eq("/metadata/foo_db"));
+        new SchemaMetaDataPersistService(repository).delete("foo_db");
+        verify(repository).delete("/metadata/foo_db");
     }
     
     @Test
     public void assertLoad() {
-        
when(registryCenterRepository.get("/metadata/foo_db/schema")).thenReturn(readYAML());
-        Optional<ShardingSphereSchema> schemaOptional = 
schemaRegistryService.load("foo_db");
+        SchemaMetaDataPersistService schemaMetaDataPersistService = new 
SchemaMetaDataPersistService(repository);
+        when(repository.get("/metadata/foo_db/schema")).thenReturn(readYAML());
+        Optional<ShardingSphereSchema> schemaOptional = 
schemaMetaDataPersistService.load("foo_db");
         assertTrue(schemaOptional.isPresent());
-        Optional<ShardingSphereSchema> empty = 
schemaRegistryService.load("test");
+        Optional<ShardingSphereSchema> empty = 
schemaMetaDataPersistService.load("test");
         assertThat(empty, is(Optional.empty()));
         ShardingSphereSchema schema = schemaOptional.get();
-        verify(registryCenterRepository).get(eq("/metadata/foo_db/schema"));
+        verify(repository).get(eq("/metadata/foo_db/schema"));
         assertThat(schema.getAllTableNames(), 
is(Collections.singleton("t_order")));
         assertThat(schema.get("t_order").getIndexes().keySet(), 
is(Collections.singleton("primary")));
         assertThat(schema.getAllColumnNames("t_order").size(), is(1));
@@ -98,34 +84,13 @@ public final class SchemaRegistryServiceTest {
     
     @Test
     public void assertLoadAllNames() {
-        
when(registryCenterRepository.getChildrenKeys("/metadata")).thenReturn(Arrays.asList("foo_db",
 "bar_db"));
-        Collection<String> actual = schemaRegistryService.loadAllNames();
+        
when(repository.getChildrenKeys("/metadata")).thenReturn(Arrays.asList("foo_db",
 "bar_db"));
+        Collection<String> actual = new 
SchemaMetaDataPersistService(repository).loadAllNames();
         assertThat(actual.size(), is(2));
         assertThat(actual, hasItems("foo_db"));
         assertThat(actual, hasItems("bar_db"));
     }
     
-    @Test
-    public void assertUpdateWithDatabaseCreatedSQLNotificationEvent() {
-        DatabaseCreatedSQLNotificationEvent event = new 
DatabaseCreatedSQLNotificationEvent("bar_db");
-        schemaRegistryService.update(event);
-        verify(registryCenterRepository).persist("/metadata/bar_db", "");
-    }
-    
-    @Test
-    public void assertUpdateWithMetaDataAlteredEvent() {
-        SchemaAlteredEvent event = new SchemaAlteredEvent("foo_db", new 
SchemaYamlSwapper().swapToObject(YamlEngine.unmarshal(readYAML(), 
YamlSchema.class)));
-        schemaRegistryService.update(event);
-        
verify(registryCenterRepository).persist(eq("/metadata/foo_db/schema"), 
anyString());
-    }
-    
-    @Test
-    public void assertUpdateWithDatabaseDroppedSQLNotificationEvent() {
-        DatabaseDroppedSQLNotificationEvent event = new 
DatabaseDroppedSQLNotificationEvent("foo_db");
-        schemaRegistryService.update(event);
-        verify(registryCenterRepository).delete("/metadata/foo_db");
-    }
-    
     @SneakyThrows({IOException.class, URISyntaxException.class})
     private String readYAML() {
         return 
Files.readAllLines(Paths.get(ClassLoader.getSystemResource("yaml/schema.yaml").toURI()))
diff --git 
a/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
new file mode 100644
index 0000000..d491dff
--- /dev/null
+++ 
b/shardingsphere-governance/shardingsphere-governance-core/src/test/java/org/apache/shardingsphere/governance/core/registry/metadata/subscriber/SchemaMetaDataRegistrySubscriberTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.shardingsphere.governance.core.registry.metadata.subscriber;
+
+import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseCreatedSQLNotificationEvent;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.event.DatabaseDroppedSQLNotificationEvent;
+import 
org.apache.shardingsphere.governance.core.registry.metadata.service.SchemaMetaDataPersistService;
+import 
org.apache.shardingsphere.governance.repository.spi.RegistryCenterRepository;
+import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
+import 
org.apache.shardingsphere.infra.metadata.schema.refresher.event.SchemaAlteredEvent;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.lang.reflect.Field;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class SchemaMetaDataRegistrySubscriberTest {
+    
+    @Mock
+    private SchemaMetaDataPersistService persistService;
+    
+    private SchemaMetaDataRegistrySubscriber schemaMetaDataRegistrySubscriber;
+    
+    @Before
+    public void setUp() throws ReflectiveOperationException {
+        schemaMetaDataRegistrySubscriber = new 
SchemaMetaDataRegistrySubscriber(mock(RegistryCenterRepository.class));
+        Field field = 
schemaMetaDataRegistrySubscriber.getClass().getDeclaredField("persistService");
+        field.setAccessible(true);
+        field.set(schemaMetaDataRegistrySubscriber, persistService);
+    }
+    
+    @Test
+    public void assertUpdateWithDatabaseCreatedSQLNotificationEvent() {
+        DatabaseCreatedSQLNotificationEvent event = new 
DatabaseCreatedSQLNotificationEvent("bar_db");
+        schemaMetaDataRegistrySubscriber.update(event);
+        verify(persistService).persist("bar_db", null);
+    }
+    
+    @Test
+    public void assertUpdateWithMetaDataAlteredEvent() {
+        SchemaAlteredEvent event = new SchemaAlteredEvent("foo_db", 
mock(ShardingSphereSchema.class));
+        schemaMetaDataRegistrySubscriber.update(event);
+        verify(persistService).persist("foo_db", event.getSchema());
+    }
+    
+    @Test
+    public void assertUpdateWithDatabaseDroppedSQLNotificationEvent() {
+        DatabaseDroppedSQLNotificationEvent event = new 
DatabaseDroppedSQLNotificationEvent("foo_db");
+        schemaMetaDataRegistrySubscriber.update(event);
+        verify(persistService).delete("foo_db");
+    }
+}

Reply via email to