You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2024/12/01 09:44:27 UTC
(shardingsphere) branch master updated: Refactor ShardingSphereDatabase.create() (#33863)
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 7a8f0ad8049 Refactor ShardingSphereDatabase.create() (#33863)
7a8f0ad8049 is described below
commit 7a8f0ad8049fbd07c5a6d074b575089a4c2c1cc9
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sun Dec 1 17:44:22 2024 +0800
Refactor ShardingSphereDatabase.create() (#33863)
* Refactor ShardingSphereDatabase.create()
* Refactor ShardingSphereDatabase.create()
* Refactor ShardingSphereDatabase.create()
---
.../metadata/database/ShardingSphereDatabase.java | 23 ++++++++++++++++++++++
.../schema/SchemaMetaDataPersistService.java | 9 +++------
.../factory/InternalMetaDataFactoryTest.java | 4 ++--
.../schema/SchemaMetaDataPersistServiceTest.java | 8 ++++----
.../mode/metadata/manager/StorageUnitManager.java | 19 +++++++++---------
5 files changed, 41 insertions(+), 22 deletions(-)
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
index 204042b884d..2a62a04aed4 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/ShardingSphereDatabase.java
@@ -122,6 +122,29 @@ public final class ShardingSphereDatabase {
return create(name, protocolType, new LinkedList<>(), SystemSchemaBuilder.build(name, protocolType, props), resourceMetaData);
}
+ /**
+ * Create database.
+ *
+ * @param name database name
+ * @param protocolType database protocol type
+ * @param databaseConfig database configuration
+ * @param computeNodeInstanceContext compute node instance context
+ * @param schemas schemas
+ * @return database
+ */
+ public static ShardingSphereDatabase create(final String name, final DatabaseType protocolType, final DatabaseConfiguration databaseConfig,
+ final ComputeNodeInstanceContext computeNodeInstanceContext, final Collection<ShardingSphereSchema> schemas) {
+ ResourceMetaData resourceMetaData = createResourceMetaData(databaseConfig.getDataSources(), databaseConfig.getStorageUnits());
+ Collection<ShardingSphereRule> rules = DatabaseRulesBuilder.build(name, protocolType, databaseConfig, computeNodeInstanceContext, resourceMetaData);
+ return create(name, protocolType, rules, schemas, resourceMetaData);
+ }
+
+ private static ShardingSphereDatabase create(final String name, final DatabaseType protocolType, final Collection<ShardingSphereRule> rules,
+ final Collection<ShardingSphereSchema> schemas, final ResourceMetaData resourceMetaData) {
+ RuleMetaData ruleMetaData = new RuleMetaData(rules);
+ return new ShardingSphereDatabase(name, protocolType, resourceMetaData, ruleMetaData, schemas);
+ }
+
/**
* Create database.
*
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistService.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistService.java
index b4fa2340d9b..3c49e1d4941 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistService.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistService.java
@@ -27,8 +27,6 @@ import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.util.Collection;
import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -114,9 +112,8 @@ public final class SchemaMetaDataPersistService {
* @param databaseName database name
* @return schemas
*/
- public Map<String, ShardingSphereSchema> load(final String databaseName) {
- Collection<String> schemaNames = repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataSchemasPath(databaseName));
- return schemaNames.stream().collect(Collectors.toMap(String::toLowerCase, each -> new ShardingSphereSchema(each, tableMetaDataPersistService.load(databaseName, each),
- viewMetaDataPersistService.load(databaseName, each)), (a, b) -> b, () -> new LinkedHashMap<>(schemaNames.size(), 1F)));
+ public Collection<ShardingSphereSchema> load(final String databaseName) {
+ return repository.getChildrenKeys(DatabaseMetaDataNode.getMetaDataSchemasPath(databaseName)).stream()
+ .map(each -> new ShardingSphereSchema(each, tableMetaDataPersistService.load(databaseName, each), viewMetaDataPersistService.load(databaseName, each))).collect(Collectors.toList());
}
}
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
index 51a59eb30df..c9da6c0e2c0 100644
--- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactoryTest.java
@@ -44,7 +44,7 @@ class InternalMetaDataFactoryTest {
@Test
void assertCreateWithDatabaseName() {
MetaDataPersistService persistService = mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
- when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap());
+ when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyList());
ShardingSphereDatabase database = InternalMetaDataFactory.create(
"foo_db", persistService, mock(DatabaseConfiguration.class), new ConfigurationProperties(new Properties()), mock(ComputeNodeInstanceContext.class));
assertThat(database.getName(), is("foo_db"));
@@ -67,7 +67,7 @@ class InternalMetaDataFactoryTest {
@Test
void assertCreateWithDatabasesWithStorageUnits() {
MetaDataPersistService persistService = mock(MetaDataPersistService.class, RETURNS_DEEP_STUBS);
- when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyMap());
+ when(persistService.getDatabaseMetaDataFacade().getSchema().load("foo_db")).thenReturn(Collections.emptyList());
DatabaseConfiguration databaseConfig = mock(DatabaseConfiguration.class);
StorageUnit storageUnit = mock(StorageUnit.class);
when(storageUnit.getDataSource()).thenReturn(new MockedDataSource());
diff --git a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
index 06767521251..472747bf2f5 100644
--- a/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
+++ b/kernel/metadata/core/src/test/java/org/apache/shardingsphere/metadata/persist/service/metadata/schema/SchemaMetaDataPersistServiceTest.java
@@ -31,8 +31,8 @@ import org.mockito.Mock;
import org.mockito.internal.configuration.plugins.Plugins;
import org.mockito.junit.jupiter.MockitoExtension;
+import java.util.Collection;
import java.util.Collections;
-import java.util.Map;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -110,10 +110,10 @@ class SchemaMetaDataPersistServiceTest {
ShardingSphereView view = mock(ShardingSphereView.class);
when(view.getName()).thenReturn("foo_view");
when(viewMetaDataPersistService.load("foo_db", "foo_schema")).thenReturn(Collections.singleton(view));
- Map<String, ShardingSphereSchema> actual = persistService.load("foo_db");
+ Collection<ShardingSphereSchema> actual = persistService.load("foo_db");
assertThat(actual.size(), is(1));
- assertThat(actual.get("foo_schema").getTable("foo_tbl"), is(table));
- assertThat(actual.get("foo_schema").getView("foo_view"), is(view));
+ assertThat(actual.iterator().next().getTable("foo_tbl"), is(table));
+ assertThat(actual.iterator().next().getView("foo_view"), is(view));
}
@Test
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
index 2e32f865d7a..7ff9a0d176a 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
@@ -30,10 +30,11 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import java.sql.SQLException;
+import java.util.Collection;
import java.util.Collections;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.Collectors;
/**
* Storage unit manager.
@@ -110,20 +111,18 @@ public final class StorageUnitManager {
MetaDataContexts reloadMetaDataContexts = MetaDataContextsFactory.createBySwitchResource(databaseName, true,
switchingResource, metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
metaDataContexts.set(reloadMetaDataContexts);
- metaDataContexts.get().getMetaData().getDatabases().putAll(buildShardingSphereDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
+ metaDataContexts.get().getMetaData().getDatabases().putAll(buildDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
switchingResource.closeStaleDataSources();
}
- private Map<String, ShardingSphereDatabase> buildShardingSphereDatabase(final ShardingSphereDatabase originalDatabase) {
- return Collections.singletonMap(originalDatabase.getName().toLowerCase(), new ShardingSphereDatabase(originalDatabase.getName(),
- originalDatabase.getProtocolType(), originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(), buildSchemas(originalDatabase)));
+ private Map<String, ShardingSphereDatabase> buildDatabase(final ShardingSphereDatabase originalDatabase) {
+ return Collections.singletonMap(originalDatabase.getName().toLowerCase(), new ShardingSphereDatabase(
+ originalDatabase.getName(), originalDatabase.getProtocolType(), originalDatabase.getResourceMetaData(), originalDatabase.getRuleMetaData(), buildSchemas(originalDatabase)));
}
- private Map<String, ShardingSphereSchema> buildSchemas(final ShardingSphereDatabase originalDatabase) {
- Map<String, ShardingSphereSchema> result = new LinkedHashMap<>(originalDatabase.getAllSchemas().size(), 1F);
- originalDatabase.getAllSchemas().forEach(each -> result.put(each.getName().toLowerCase(),
- new ShardingSphereSchema(each.getName(), each.getAllTables(), metaDataPersistService.getDatabaseMetaDataFacade().getView().load(originalDatabase.getName(), each.getName()))));
- return result;
+ private Collection<ShardingSphereSchema> buildSchemas(final ShardingSphereDatabase originalDatabase) {
+ return originalDatabase.getAllSchemas().stream().map(each -> new ShardingSphereSchema(
+ each.getName(), each.getAllTables(), metaDataPersistService.getDatabaseMetaDataFacade().getView().load(originalDatabase.getName(), each.getName()))).collect(Collectors.toList());
}
@SneakyThrows(Exception.class)