You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2023/06/28 12:15:31 UTC
[shardingsphere] branch master updated: Add system schema table enabled configuration (#26666)
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 99105f41f5b Add system schema table enabled configuration (#26666)
99105f41f5b is described below
commit 99105f41f5b39af8f4f67dd21fb83ef72283269c
Author: ZhangCheng <ch...@apache.org>
AuthorDate: Wed Jun 28 20:15:24 2023 +0800
Add system schema table enabled configuration (#26666)
* Add system schema table enabled configuration
* Add system schema table enabled configuration
* Add system schema table enabled configuration
* Add system schema table enabled configuration
* Add system schema table enabled configuration
* fix
* fix
* fix
---
.../WhereClauseShardingConditionEngineTest.java | 4 +-
.../TemporaryConfigurationPropertyKey.java | 7 ++-
.../infra/metadata/ShardingSphereMetaData.java | 7 ++-
.../metadata/database/ShardingSphereDatabase.java | 7 ++-
.../builder/KernelSupportedSystemTables.java | 73 ++++++++++++++++++++++
.../schema/builder/SystemSchemaBuilder.java | 21 +++++--
.../infra/metadata/ShardingSphereMetaDataTest.java | 7 ++-
.../schema/builder/SystemSchemaBuilderTest.java | 15 +++--
.../builder/global/GlobalRulesBuilderTest.java | 3 +-
.../metadata/factory/ExternalMetaDataFactory.java | 7 ++-
.../metadata/factory/InternalMetaDataFactory.java | 2 +-
.../factory/NewInternalMetaDataFactory.java | 2 +-
.../mode/manager/ContextManager.java | 2 +-
.../mode/manager/ContextManagerTest.java | 4 +-
.../cluster/ClusterModeContextManagerTest.java | 2 +-
.../YamlDatabaseConfigurationImportExecutor.java | 2 +-
.../queryable/ShowDistVariablesExecutorTest.java | 2 +-
17 files changed, 134 insertions(+), 33 deletions(-)
diff --git a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
index 3a8f12698b8..81a1c3a493a 100644
--- a/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
+++ b/features/sharding/core/src/test/java/org/apache/shardingsphere/sharding/route/engine/condition/engine/WhereClauseShardingConditionEngineTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.sharding.route.engine.condition.engine;
import org.apache.groovy.util.Maps;
import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
import org.apache.shardingsphere.infra.binder.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.DatabaseTypeEngine;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.sharding.route.engine.condition.ShardingCondition;
@@ -44,6 +45,7 @@ import org.mockito.junit.jupiter.MockitoExtension;
import java.util.Collections;
import java.util.List;
import java.util.Optional;
+import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -73,7 +75,7 @@ class WhereClauseShardingConditionEngineTest {
@BeforeEach
void setUp() {
shardingConditionEngine = new WhereClauseShardingConditionEngine(
- ShardingSphereDatabase.create("test_db", DatabaseTypeEngine.getDatabaseType("MySQL")), shardingRule, mock(TimestampServiceRule.class));
+ ShardingSphereDatabase.create("test_db", DatabaseTypeEngine.getDatabaseType("MySQL"), new ConfigurationProperties(new Properties())), shardingRule, mock(TimestampServiceRule.class));
when(sqlStatementContext.getWhereSegments()).thenReturn(Collections.singleton(whereSegment));
when(sqlStatementContext.getTablesContext()).thenReturn(tablesContext);
when(tablesContext.findTableNamesByColumnSegment(anyCollection(), any())).thenReturn(Maps.of("foo_sharding_col", "table_1"));
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java
index 16527b71ef7..587931e9d09 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/config/props/temporary/TemporaryConfigurationPropertyKey.java
@@ -35,7 +35,12 @@ public enum TemporaryConfigurationPropertyKey implements TypedPropertyKey {
/**
* Proxy meta data collector enabled.
*/
- PROXY_META_DATA_COLLECTOR_ENABLED("proxy-meta-data-collector-enabled", String.valueOf(Boolean.TRUE), boolean.class, true);
+ PROXY_META_DATA_COLLECTOR_ENABLED("proxy-meta-data-collector-enabled", String.valueOf(Boolean.TRUE), boolean.class, true),
+
+ /**
+ * System schema metadata enabled.
+ */
+ SYSTEM_SCHEMA_METADATA_ENABLED("system-schema-metadata-enabled", String.valueOf(Boolean.TRUE), boolean.class, true);
private final String key;
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
index 26d8f0bcffa..3a9c22a5357 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaData.java
@@ -61,12 +61,13 @@ public final class ShardingSphereMetaData {
/**
* Add database.
- *
+ *
* @param databaseName database name
* @param protocolType protocol database type
+ * @param props configuration properties
*/
- public void addDatabase(final String databaseName, final DatabaseType protocolType) {
- ShardingSphereDatabase database = ShardingSphereDatabase.create(databaseName, protocolType);
+ public void addDatabase(final String databaseName, final DatabaseType protocolType, final ConfigurationProperties props) {
+ ShardingSphereDatabase database = ShardingSphereDatabase.create(databaseName, protocolType, props);
putDatabase(database);
globalRuleMetaData.findRules(ResourceHeldRule.class).forEach(each -> each.addResource(database));
}
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 0cd0869d263..98e79284586 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
@@ -88,7 +88,7 @@ public final class ShardingSphereDatabase {
Map<String, ShardingSphereSchema> schemas = new ConcurrentHashMap<>(GenericSchemaBuilder
.build(new GenericSchemaBuilderMaterial(protocolType, storageTypes, DataSourceStateManager.getInstance().getEnabledDataSourceMap(name, databaseConfig.getDataSources()), databaseRules,
props, DatabaseTypeEngine.getDefaultSchemaName(protocolType, name))));
- SystemSchemaBuilder.build(name, protocolType).forEach(schemas::putIfAbsent);
+ SystemSchemaBuilder.build(name, protocolType, props).forEach(schemas::putIfAbsent);
return create(name, protocolType, databaseConfig, databaseRules, schemas);
}
@@ -97,11 +97,12 @@ public final class ShardingSphereDatabase {
*
* @param name system database name
* @param protocolType protocol database type
+ * @param props configuration properties
* @return system database meta data
*/
- public static ShardingSphereDatabase create(final String name, final DatabaseType protocolType) {
+ public static ShardingSphereDatabase create(final String name, final DatabaseType protocolType, final ConfigurationProperties props) {
DatabaseConfiguration databaseConfig = new DataSourceProvidedDatabaseConfiguration(new LinkedHashMap<>(), new LinkedList<>());
- return create(name, protocolType, databaseConfig, new LinkedList<>(), SystemSchemaBuilder.build(name, protocolType));
+ return create(name, protocolType, databaseConfig, new LinkedList<>(), SystemSchemaBuilder.build(name, protocolType, props));
}
/**
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/KernelSupportedSystemTables.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/KernelSupportedSystemTables.java
new file mode 100644
index 00000000000..d242fd71832
--- /dev/null
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/KernelSupportedSystemTables.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.infra.metadata.database.schema.builder;
+
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+/**
+ * Kernel supported system tables.
+ */
+@RequiredArgsConstructor
+@Getter
+public enum KernelSupportedSystemTables {
+
+ MYSQL_SHARDING_SPHERE("MySQL", "shardingsphere", new HashSet<>(Arrays.asList("sharding_table_statistics", "cluster_information"))),
+
+ POSTGRESQL_PG_CATALOG("PostgreSQL", "pg_catalog", new HashSet<>(Arrays.asList("pg_class", "pg_namespace"))),
+
+ POSTGRESQL_SHARDING_SPHERE("PostgreSQL", "shardingsphere", new HashSet<>(Arrays.asList("sharding_table_statistics", "cluster_information"))),
+
+ OPEN_GAUSS_SHARDING_SPHERE("openGauss", "shardingsphere", new HashSet<>(Arrays.asList("sharding_table_statistics", "cluster_information")));
+
+ private static final Map<String, KernelSupportedSystemTables> SCHEMA_NAME_TO_TABLES = new HashMap<>(values().length, 1F);
+
+ private final String databaseType;
+
+ private final String schema;
+
+ private final Collection<String> tables;
+
+ static {
+ for (KernelSupportedSystemTables each : values()) {
+ SCHEMA_NAME_TO_TABLES.put(each.getDatabaseType() + "." + each.getSchema(), each);
+ }
+ }
+
+ /**
+ * Judge whether current table is kernel supported system table or not.
+ *
+ * @param schema schema
+ * @param tableName table name
+ * @return whether current table is kernel supported system table or not
+ */
+ public static boolean isSupportedSystemTable(final String schema, final String tableName) {
+ for (KernelSupportedSystemTables each : values()) {
+ if (each.getSchema().equals(schema) && each.getTables().contains(tableName)) {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
index 5890034899a..22296ab8c16 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilder.java
@@ -19,6 +19,8 @@ package org.apache.shardingsphere.infra.metadata.database.schema.builder;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
+import org.apache.shardingsphere.infra.config.props.temporary.TemporaryConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.database.type.SchemaSupportedDatabaseType;
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
@@ -33,6 +35,7 @@ import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
+import java.util.Properties;
/**
* System schema builder.
@@ -45,17 +48,24 @@ public final class SystemSchemaBuilder {
*
* @param databaseName database name
* @param databaseType database type
+ * @param props configuration properties
* @return ShardingSphere system schema map
*/
- public static Map<String, ShardingSphereSchema> build(final String databaseName, final DatabaseType databaseType) {
+ public static Map<String, ShardingSphereSchema> build(final String databaseName, final DatabaseType databaseType, final ConfigurationProperties props) {
Map<String, ShardingSphereSchema> result = new LinkedHashMap<>(databaseType.getSystemSchemas().size(), 1F);
+ boolean isSystemSchemaMetaDataEnabled = isSystemSchemaMetaDataEnabled(props.getProps());
YamlTableSwapper swapper = new YamlTableSwapper();
for (String each : getSystemSchemas(databaseName, databaseType)) {
- result.put(each.toLowerCase(), createSchema(getSchemaStreams(each, databaseType), swapper));
+ result.put(each.toLowerCase(), createSchema(each, getSchemaStreams(each, databaseType), swapper, isSystemSchemaMetaDataEnabled));
}
return result;
}
+ private static boolean isSystemSchemaMetaDataEnabled(final Properties props) {
+ TemporaryConfigurationPropertyKey configKey = TemporaryConfigurationPropertyKey.SYSTEM_SCHEMA_METADATA_ENABLED;
+ return Boolean.parseBoolean(props.getOrDefault(configKey.getKey(), configKey.getDefaultValue()).toString());
+ }
+
private static Collection<String> getSystemSchemas(final String originalDatabaseName, final DatabaseType databaseType) {
String databaseName = databaseType instanceof SchemaSupportedDatabaseType ? "postgres" : originalDatabaseName;
return databaseType.getSystemDatabaseSchemaMap().getOrDefault(databaseName, Collections.emptyList());
@@ -70,11 +80,14 @@ public final class SystemSchemaBuilder {
return result;
}
- private static ShardingSphereSchema createSchema(final Collection<InputStream> schemaStreams, final YamlTableSwapper swapper) {
+ private static ShardingSphereSchema createSchema(final String schemaName, final Collection<InputStream> schemaStreams, final YamlTableSwapper swapper,
+ final boolean isSystemSchemaMetadataEnabled) {
Map<String, ShardingSphereTable> tables = new LinkedHashMap<>(schemaStreams.size(), 1F);
for (InputStream each : schemaStreams) {
YamlShardingSphereTable metaData = new Yaml().loadAs(each, YamlShardingSphereTable.class);
- tables.put(metaData.getName(), swapper.swapToObject(metaData));
+ if (isSystemSchemaMetadataEnabled || KernelSupportedSystemTables.isSupportedSystemTable(schemaName, metaData.getName())) {
+ tables.put(metaData.getName(), swapper.swapToObject(metaData));
+ }
}
return new ShardingSphereSchema(tables, Collections.emptyMap());
}
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
index fb5361d3759..d01c920284f 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/ShardingSphereMetaDataTest.java
@@ -60,11 +60,12 @@ class ShardingSphereMetaDataTest {
ResourceHeldRule<?> globalResourceHeldRule = mock(ResourceHeldRule.class);
ShardingSphereDatabase database = mockDatabase(mock(ShardingSphereResourceMetaData.class), new MockedDataSource(), mock(ResourceHeldRule.class));
DatabaseType databaseType = mock(DatabaseType.class);
- when(ShardingSphereDatabase.create("foo_db", databaseType)).thenReturn(database);
+ ConfigurationProperties configProps = new ConfigurationProperties(new Properties());
+ when(ShardingSphereDatabase.create("foo_db", databaseType, configProps)).thenReturn(database);
Map<String, ShardingSphereDatabase> databases = new HashMap<>(Collections.singletonMap("foo_db", database));
ShardingSphereMetaData metaData = new ShardingSphereMetaData(
- databases, new ShardingSphereRuleMetaData(Collections.singleton(globalResourceHeldRule)), new ConfigurationProperties(new Properties()));
- metaData.addDatabase("foo_db", databaseType);
+ databases, new ShardingSphereRuleMetaData(Collections.singleton(globalResourceHeldRule)), configProps);
+ metaData.addDatabase("foo_db", databaseType, configProps);
assertThat(metaData.getDatabases(), is(databases));
verify(globalResourceHeldRule).addResource(database);
}
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderTest.java
index 0a4d5155dcb..30d79d7aafc 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/metadata/database/schema/builder/SystemSchemaBuilderTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.infra.metadata.database.schema.builder;
+import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.OpenGaussDatabaseType;
import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
@@ -24,6 +25,7 @@ import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSp
import org.junit.jupiter.api.Test;
import java.util.Map;
+import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -33,19 +35,20 @@ class SystemSchemaBuilderTest {
@Test
void assertBuildForMySQL() {
- Map<String, ShardingSphereSchema> actualInformationSchema = SystemSchemaBuilder.build("information_schema", new MySQLDatabaseType());
+ ConfigurationProperties configProps = new ConfigurationProperties(new Properties());
+ Map<String, ShardingSphereSchema> actualInformationSchema = SystemSchemaBuilder.build("information_schema", new MySQLDatabaseType(), configProps);
assertThat(actualInformationSchema.size(), is(1));
assertTrue(actualInformationSchema.containsKey("information_schema"));
assertThat(actualInformationSchema.get("information_schema").getTables().size(), is(61));
- Map<String, ShardingSphereSchema> actualMySQLSchema = SystemSchemaBuilder.build("mysql", new MySQLDatabaseType());
+ Map<String, ShardingSphereSchema> actualMySQLSchema = SystemSchemaBuilder.build("mysql", new MySQLDatabaseType(), configProps);
assertThat(actualMySQLSchema.size(), is(1));
assertTrue(actualMySQLSchema.containsKey("mysql"));
assertThat(actualMySQLSchema.get("mysql").getTables().size(), is(31));
- Map<String, ShardingSphereSchema> actualPerformanceSchema = SystemSchemaBuilder.build("performance_schema", new MySQLDatabaseType());
+ Map<String, ShardingSphereSchema> actualPerformanceSchema = SystemSchemaBuilder.build("performance_schema", new MySQLDatabaseType(), configProps);
assertThat(actualPerformanceSchema.size(), is(1));
assertTrue(actualPerformanceSchema.containsKey("performance_schema"));
assertThat(actualPerformanceSchema.get("performance_schema").getTables().size(), is(87));
- Map<String, ShardingSphereSchema> actualSysSchema = SystemSchemaBuilder.build("sys", new MySQLDatabaseType());
+ Map<String, ShardingSphereSchema> actualSysSchema = SystemSchemaBuilder.build("sys", new MySQLDatabaseType(), configProps);
assertThat(actualSysSchema.size(), is(1));
assertTrue(actualSysSchema.containsKey("sys"));
assertThat(actualSysSchema.get("sys").getTables().size(), is(53));
@@ -53,7 +56,7 @@ class SystemSchemaBuilderTest {
@Test
void assertBuildForPostgreSQL() {
- Map<String, ShardingSphereSchema> actual = SystemSchemaBuilder.build("sharding_db", new PostgreSQLDatabaseType());
+ Map<String, ShardingSphereSchema> actual = SystemSchemaBuilder.build("sharding_db", new PostgreSQLDatabaseType(), new ConfigurationProperties(new Properties()));
assertThat(actual.size(), is(3));
assertTrue(actual.containsKey("information_schema"));
assertTrue(actual.containsKey("pg_catalog"));
@@ -65,7 +68,7 @@ class SystemSchemaBuilderTest {
@Test
void assertBuildForOpenGaussSQL() {
- Map<String, ShardingSphereSchema> actual = SystemSchemaBuilder.build("sharding_db", new OpenGaussDatabaseType());
+ Map<String, ShardingSphereSchema> actual = SystemSchemaBuilder.build("sharding_db", new OpenGaussDatabaseType(), new ConfigurationProperties(new Properties()));
assertThat(actual.size(), is(16));
assertTrue(actual.containsKey("pg_catalog"));
assertTrue(actual.containsKey("shardingsphere"));
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
index 1810f55a0b9..855e534f9cc 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/rule/builder/global/GlobalRulesBuilderTest.java
@@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test;
import java.util.Collection;
import java.util.Collections;
+import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -50,6 +51,6 @@ class GlobalRulesBuilderTest {
}
private ShardingSphereDatabase buildDatabase() {
- return ShardingSphereDatabase.create("logic_db", new MySQLDatabaseType());
+ return ShardingSphereDatabase.create("logic_db", new MySQLDatabaseType(), new ConfigurationProperties(new Properties()));
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
index e93c9357bbc..51ada0c94e5 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/ExternalMetaDataFactory.java
@@ -69,7 +69,7 @@ public final class ExternalMetaDataFactory {
DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(databaseConfigMap, props);
Map<String, ShardingSphereDatabase> result = new ConcurrentHashMap<>(databaseConfigMap.size() + protocolType.getSystemDatabaseSchemaMap().size(), 1F);
result.putAll(createGenericDatabases(databaseConfigMap, protocolType, props, instanceContext));
- result.putAll(createSystemDatabases(databaseConfigMap, protocolType));
+ result.putAll(createSystemDatabases(databaseConfigMap, protocolType, props));
return result;
}
@@ -87,11 +87,12 @@ public final class ExternalMetaDataFactory {
return result;
}
- private static Map<String, ShardingSphereDatabase> createSystemDatabases(final Map<String, DatabaseConfiguration> databaseConfigMap, final DatabaseType protocolType) {
+ private static Map<String, ShardingSphereDatabase> createSystemDatabases(final Map<String, DatabaseConfiguration> databaseConfigMap, final DatabaseType protocolType,
+ final ConfigurationProperties props) {
Map<String, ShardingSphereDatabase> result = new HashMap<>(protocolType.getSystemDatabaseSchemaMap().size(), 1F);
for (String each : protocolType.getSystemDatabaseSchemaMap().keySet()) {
if (!databaseConfigMap.containsKey(each) || databaseConfigMap.get(each).getDataSources().isEmpty()) {
- result.put(each.toLowerCase(), ShardingSphereDatabase.create(each, protocolType));
+ result.put(each.toLowerCase(), ShardingSphereDatabase.create(each, protocolType, props));
}
}
return result;
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
index 6cace5b99a9..37c136edeab 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/InternalMetaDataFactory.java
@@ -74,7 +74,7 @@ public final class InternalMetaDataFactory {
for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (entry.getValue().getDataSources().isEmpty()) {
- result.put(databaseName.toLowerCase(), ShardingSphereDatabase.create(databaseName, protocolType));
+ result.put(databaseName.toLowerCase(), ShardingSphereDatabase.create(databaseName, protocolType, props));
} else {
result.put(databaseName.toLowerCase(), create(databaseName, persistService, entry.getValue(), props, instanceContext));
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
index 81ad2e59a6d..7338eede896 100644
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
+++ b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/factory/NewInternalMetaDataFactory.java
@@ -75,7 +75,7 @@ public final class NewInternalMetaDataFactory {
for (Entry<String, DatabaseConfiguration> entry : databaseConfigMap.entrySet()) {
String databaseName = entry.getKey();
if (entry.getValue().getDataSources().isEmpty()) {
- result.put(databaseName.toLowerCase(), ShardingSphereDatabase.create(databaseName, protocolType));
+ result.put(databaseName.toLowerCase(), ShardingSphereDatabase.create(databaseName, protocolType, props));
} else {
result.put(databaseName.toLowerCase(), create(databaseName, persistService, entry.getValue(), props, instanceContext));
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index e9e8bebfa84..6c43aa675f1 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -136,7 +136,7 @@ public final class ContextManager implements AutoCloseable {
return;
}
DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), metaDataContexts.get().getMetaData().getProps());
- metaDataContexts.get().getMetaData().addDatabase(databaseName, protocolType);
+ metaDataContexts.get().getMetaData().addDatabase(databaseName, protocolType, metaDataContexts.get().getMetaData().getProps());
ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
alterMetaDataHeldRule(database);
}
diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
index e777e3aa921..284ad286d46 100644
--- a/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
+++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/manager/ContextManagerTest.java
@@ -121,14 +121,14 @@ class ContextManagerTest {
@Test
void assertAddDatabase() {
contextManager.addDatabase("new_db");
- verify(metaDataContexts.getMetaData()).addDatabase(eq("new_db"), any(DatabaseType.class));
+ verify(metaDataContexts.getMetaData()).addDatabase(eq("new_db"), any(DatabaseType.class), any(ConfigurationProperties.class));
}
@Test
void assertAddExistedDatabase() {
when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
contextManager.addDatabase("foo_db");
- verify(metaDataContexts.getMetaData(), times(0)).addDatabase(eq("foo_db"), any(DatabaseType.class));
+ verify(metaDataContexts.getMetaData(), times(0)).addDatabase(eq("foo_db"), any(DatabaseType.class), any(ConfigurationProperties.class));
}
@Test
diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
index 058df5040d1..68c995b796a 100644
--- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
+++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/ClusterModeContextManagerTest.java
@@ -108,7 +108,7 @@ class ClusterModeContextManagerTest {
@Test
void assertAlterSchema() {
ShardingSphereMetaData shardingSphereMetaData = new ShardingSphereMetaData();
- shardingSphereMetaData.addDatabase("db", new H2DatabaseType());
+ shardingSphereMetaData.addDatabase("db", new H2DatabaseType(), new ConfigurationProperties(new Properties()));
MetaDataContexts metaDataContexts = new MetaDataContexts(
new MetaDataPersistService(new ClusterPersistRepositoryFixture()), shardingSphereMetaData);
ComputeNodeInstance instance = new ComputeNodeInstance(new JDBCInstanceMetaData("42"));
diff --git a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
index 63b48149062..4b6759bdea7 100644
--- a/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
+++ b/proxy/backend/core/src/main/java/org/apache/shardingsphere/proxy/backend/util/YamlDatabaseConfigurationImportExecutor.java
@@ -143,7 +143,7 @@ public final class YamlDatabaseConfigurationImportExecutor {
ContextManager contextManager = ProxyContext.getInstance().getContextManager();
contextManager.getInstanceContext().getModeContextManager().createDatabase(databaseName);
DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), contextManager.getMetaDataContexts().getMetaData().getProps());
- contextManager.getMetaDataContexts().getMetaData().addDatabase(databaseName, protocolType);
+ contextManager.getMetaDataContexts().getMetaData().addDatabase(databaseName, protocolType, contextManager.getMetaDataContexts().getMetaData().getProps());
}
private void addResources(final String databaseName, final Map<String, YamlProxyDataSourceConfiguration> yamlDataSourceMap) {
diff --git a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
index c7e4fa5a746..6aa65eec812 100644
--- a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
+++ b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/queryable/ShowDistVariablesExecutorTest.java
@@ -63,7 +63,7 @@ class ShowDistVariablesExecutorTest {
when(metaData.getGlobalRuleMetaData()).thenReturn(new ShardingSphereRuleMetaData(Collections.singleton(new LoggingRule(new DefaultLoggingRuleConfigurationBuilder().build()))));
ShowDistVariablesExecutor executor = new ShowDistVariablesExecutor();
Collection<LocalDataQueryResultRow> actual = executor.getRows(metaData, connectionSession, mock(ShowDistVariablesStatement.class));
- assertThat(actual.size(), is(20));
+ assertThat(actual.size(), is(21));
LocalDataQueryResultRow row = actual.iterator().next();
assertThat(row.getCell(1), is("agent_plugins_enabled"));
assertThat(row.getCell(2), is("true"));