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 2a47ef4a53d Add test cases on ClusterMetaDataManagerPersistService
(#32858)
2a47ef4a53d is described below
commit 2a47ef4a53d8ed0f1ce92dd3ccedd481548a546e
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Sep 14 12:56:15 2024 +0800
Add test cases on ClusterMetaDataManagerPersistService (#32858)
---
.../schema/pojo/AlterSchemaMetaDataPOJO.java | 2 +-
.../ClusterMetaDataManagerPersistService.java | 76 +++++++++----------
.../ClusterMetaDataManagerPersistServiceTest.java | 88 ++++++++++++++++++++++
3 files changed, 127 insertions(+), 39 deletions(-)
diff --git
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaMetaDataPOJO.java
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaMetaDataPOJO.java
index cd5a8d2c74d..b63a5d3c19c 100644
---
a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaMetaDataPOJO.java
+++
b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/pojo/AlterSchemaMetaDataPOJO.java
@@ -26,7 +26,7 @@ import java.util.Collection;
import java.util.LinkedList;
/**
- * alter schema metadata pojo.
+ * Alter schema metadata pojo.
*/
@RequiredArgsConstructor
@Getter
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
index 535ae03a9af..3098922420f 100644
---
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistService.java
@@ -161,6 +161,27 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
return
toBeDroppedResourceNames.stream().filter(propsMap::containsKey).collect(Collectors.toList());
}
+ private void afterStorageUnitsAltered(final String databaseName, final
MetaDataContexts originalMetaDataContexts, final MetaDataContexts
reloadMetaDataContexts) {
+
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
schema) -> metaDataPersistService.getDatabaseMetaDataService()
+
.persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
schemaName, schema));
+ // TODO confirm
+
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
+ .ifPresent(optional ->
optional.getSchemaData().forEach((schemaName, schemaData) ->
metaDataPersistService.getShardingSphereDataPersistService()
+ .persist(databaseName, schemaName, schemaData,
originalMetaDataContexts.getMetaData().getDatabases())));
+ metaDataPersistService.persistReloadDatabaseByAlter(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
+ }
+
+ private void afterStorageUnitsDropped(final String databaseName, final
MetaDataContexts originalMetaDataContexts, final MetaDataContexts
reloadMetaDataContexts) {
+
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
schema) -> metaDataPersistService.getDatabaseMetaDataService()
+
.persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
schemaName, schema));
+
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
+ .ifPresent(optional ->
optional.getSchemaData().forEach((schemaName, schemaData) ->
metaDataPersistService.getShardingSphereDataPersistService()
+ .persist(databaseName, schemaName, schemaData,
originalMetaDataContexts.getMetaData().getDatabases())));
+ metaDataPersistService.persistReloadDatabaseByDrop(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
+ }
+
@Override
public void alterSingleRuleConfiguration(final String databaseName, final
Collection<RuleConfiguration> ruleConfigs) {
ruleConfigs.removeIf(each ->
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
@@ -171,12 +192,18 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
@Override
public void alterRuleConfiguration(final String databaseName, final
RuleConfiguration toBeAlteredRuleConfig) {
MetaDataContexts originalMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
- if (null != toBeAlteredRuleConfig) {
- Collection<MetaDataVersion> metaDataVersions =
metaDataPersistService.getDatabaseRulePersistService()
- .persistConfigurations(databaseName,
Collections.singleton(toBeAlteredRuleConfig));
-
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
- afterRuleConfigurationAltered(databaseName,
originalMetaDataContexts);
+ if (null == toBeAlteredRuleConfig) {
+ return;
}
+ Collection<MetaDataVersion> metaDataVersions =
metaDataPersistService.getDatabaseRulePersistService().persistConfigurations(databaseName,
Collections.singleton(toBeAlteredRuleConfig));
+
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
+ afterRuleConfigurationAltered(databaseName, originalMetaDataContexts);
+ }
+
+ private void afterRuleConfigurationAltered(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
+ MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
+ metaDataPersistService.persistReloadDatabaseByAlter(
+ databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
@Override
@@ -193,6 +220,12 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
afterRuleConfigurationDropped(databaseName, originalMetaDataContexts);
}
+ private void afterRuleConfigurationDropped(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
+ MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
+ metaDataPersistService.persistReloadDatabaseByDrop(
+ databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
+ }
+
@Override
public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
metaDataPersistService.getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
@@ -213,37 +246,4 @@ public final class ClusterMetaDataManagerPersistService
implements MetaDataManag
public void dropTables(final String databaseName, final String schemaName,
final Collection<String> tableNames) {
tableNames.forEach(each ->
metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService().delete(databaseName,
schemaName, each));
}
-
- private void afterStorageUnitsAltered(final String databaseName, final
MetaDataContexts originalMetaDataContexts, final MetaDataContexts
reloadMetaDataContexts) {
-
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
schema) -> metaDataPersistService.getDatabaseMetaDataService()
-
.persistByAlterConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
schemaName, schema));
- // TODO confirm
-
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
- .ifPresent(optional ->
optional.getSchemaData().forEach((schemaName, schemaData) ->
metaDataPersistService.getShardingSphereDataPersistService()
- .persist(databaseName, schemaName, schemaData,
originalMetaDataContexts.getMetaData().getDatabases())));
- metaDataPersistService.persistReloadDatabaseByAlter(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
-
- private void afterStorageUnitsDropped(final String databaseName, final
MetaDataContexts originalMetaDataContexts, final MetaDataContexts
reloadMetaDataContexts) {
-
reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getSchemas().forEach((schemaName,
schema) -> metaDataPersistService.getDatabaseMetaDataService()
-
.persistByDropConfiguration(reloadMetaDataContexts.getMetaData().getDatabase(databaseName).getName(),
schemaName, schema));
-
Optional.ofNullable(reloadMetaDataContexts.getStatistics().getDatabaseData().get(databaseName))
- .ifPresent(optional ->
optional.getSchemaData().forEach((schemaName, schemaData) ->
metaDataPersistService.getShardingSphereDataPersistService()
- .persist(databaseName, schemaName, schemaData,
originalMetaDataContexts.getMetaData().getDatabases())));
- metaDataPersistService.persistReloadDatabaseByDrop(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
-
- private void afterRuleConfigurationAltered(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
- MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
- metaDataPersistService.persistReloadDatabaseByAlter(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
-
- private void afterRuleConfigurationDropped(final String databaseName,
final MetaDataContexts originalMetaDataContexts) {
- MetaDataContexts reloadMetaDataContexts =
metaDataContextManager.getMetaDataContexts().get();
- metaDataPersistService.persistReloadDatabaseByDrop(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
-
originalMetaDataContexts.getMetaData().getDatabase(databaseName));
- }
}
diff --git
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistServiceTest.java
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistServiceTest.java
index 2a9fdd6931e..cb45774742b 100644
---
a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistServiceTest.java
+++
b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/ClusterMetaDataManagerPersistServiceTest.java
@@ -18,12 +18,17 @@
package org.apache.shardingsphere.mode.manager.cluster.persist;
import lombok.SneakyThrows;
+import org.apache.groovy.util.Maps;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
+import
org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereTable;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContextManager;
import
org.apache.shardingsphere.mode.persist.service.ListenerAssistedPersistService;
import org.apache.shardingsphere.mode.spi.PersistRepository;
+import org.apache.shardingsphere.single.config.SingleRuleConfiguration;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -32,9 +37,16 @@ import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Properties;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.MatcherAssert.assertThat;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -117,4 +129,80 @@ class ClusterMetaDataManagerPersistServiceTest {
metaDataManagerPersistService.dropSchema("foo_db",
Collections.singleton("foo_schema"));
verify(metaDataPersistService.getDatabaseMetaDataService()).dropSchema("foo_db",
"foo_schema");
}
+
+ @Test
+ void assertAlterSchemaMetaData() {
+ metaDataManagerPersistService.alterSchemaMetaData(new
AlterSchemaMetaDataPOJO("foo_db", "foo_schema",
Collections.singleton("foo_ds")));
+
verify(metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService()).persist("foo_db",
"foo_schema", Collections.emptyMap());
+
verify(metaDataPersistService.getDatabaseMetaDataService().getViewMetaDataPersistService()).persist("foo_db",
"foo_schema", Collections.emptyMap());
+ }
+
+ @Test
+ void assertAlterSingleRuleConfiguration() {
+ Collection<RuleConfiguration> ruleConfigs = new
LinkedList<>(Arrays.asList(new SingleRuleConfiguration(),
mock(RuleConfiguration.class)));
+
when(metaDataPersistService.getDatabaseRulePersistService().persistConfigurations("foo_db",
ruleConfigs)).thenReturn(Collections.emptyList());
+ metaDataManagerPersistService.alterSingleRuleConfiguration("foo_db",
ruleConfigs);
+ assertThat(ruleConfigs.size(), is(1));
+
verify(metaDataPersistService.getMetaDataVersionPersistService()).switchActiveVersion(Collections.emptyList());
+ }
+
+ @Test
+ void assertAlterNullRuleConfiguration() {
+ metaDataManagerPersistService.alterRuleConfiguration("foo_db", null);
+ verify(metaDataPersistService.getDatabaseRulePersistService(),
times(0)).persistConfigurations(eq("foo_db"), any());
+ }
+
+ @Test
+ void assertAlterRuleConfiguration() {
+ RuleConfiguration ruleConfig = new SingleRuleConfiguration();
+ metaDataManagerPersistService.alterRuleConfiguration("foo_db",
ruleConfig);
+
verify(metaDataPersistService.getDatabaseRulePersistService()).persistConfigurations("foo_db",
Collections.singleton(ruleConfig));
+ }
+
+ @Test
+ void assertRemoveNullRuleConfigurationItem() {
+ metaDataManagerPersistService.removeRuleConfigurationItem("foo_db",
null);
+ verify(metaDataPersistService.getDatabaseRulePersistService(),
times(0)).deleteConfigurations(eq("foo_db"), any());
+ }
+
+ @Test
+ void assertRemoveRuleConfigurationItem() {
+ RuleConfiguration ruleConfig = new SingleRuleConfiguration();
+ metaDataManagerPersistService.removeRuleConfigurationItem("foo_db",
ruleConfig);
+
verify(metaDataPersistService.getDatabaseRulePersistService()).deleteConfigurations("foo_db",
Collections.singleton(ruleConfig));
+ }
+
+ @Test
+ void assertRemoveRuleConfiguration() {
+ metaDataManagerPersistService.removeRuleConfiguration("foo_db",
"fixtureRule");
+
verify(metaDataPersistService.getDatabaseRulePersistService()).delete("foo_db",
"fixtureRule");
+ }
+
+ @Test
+ void assertAlterGlobalRuleConfiguration() {
+ RuleConfiguration ruleConfig = new SingleRuleConfiguration();
+ metaDataManagerPersistService.alterGlobalRuleConfiguration(ruleConfig);
+
verify(metaDataPersistService.getGlobalRuleService()).persist(Collections.singleton(ruleConfig));
+ }
+
+ @Test
+ void assertAlterProperties() {
+ Properties props = new Properties();
+ metaDataManagerPersistService.alterProperties(props);
+ verify(metaDataPersistService.getPropsService()).persist(props);
+ }
+
+ @Test
+ void assertCreateTable() {
+ ShardingSphereTable table = mock(ShardingSphereTable.class);
+ when(table.getName()).thenReturn("foo_tbl");
+ metaDataManagerPersistService.createTable("foo_db", "foo_schema",
table, "foo_ds");
+
verify(metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService()).persist("foo_db",
"foo_schema", Maps.of("foo_tbl", table));
+ }
+
+ @Test
+ void assertDropTables() {
+ metaDataManagerPersistService.dropTables("foo_db", "foo_schema",
Collections.singleton("foo_tbl"));
+
verify(metaDataPersistService.getDatabaseMetaDataService().getTableMetaDataPersistService()).delete("foo_db",
"foo_schema", "foo_tbl");
+ }
}