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");
+ }
+}