You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2023/06/03 01:58:47 UTC
[shardingsphere] branch master updated: Fix sonar issues on Provide multiple methods instead of using boolean value to determine which action to take (#26021)
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 8bd1c9018a6 Fix sonar issues on Provide multiple methods instead of using boolean value to determine which action to take (#26021)
8bd1c9018a6 is described below
commit 8bd1c9018a65fdc482280314977d1c2bda4d9472
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Sat Jun 3 09:58:38 2023 +0800
Fix sonar issues on Provide multiple methods instead of using boolean value to determine which action to take (#26021)
---
.../rule/ReadwriteSplittingDataSourceRule.java | 22 ++++---
.../rule/ReadwriteSplittingRule.java | 6 +-
...dardReadwriteSplittingDataSourceRouterTest.java | 2 +-
.../filter/DisabledReadDataSourcesFilterTest.java | 14 ++--
.../infra/instance/ComputeNodeInstance.java | 6 +-
.../infra/state/instance/InstanceStateContext.java | 20 +++---
.../infra/state/InstanceStateContextTest.java | 12 ++--
.../shardingsphere/metadata/MetaDataFactory.java | 75 ----------------------
.../metadata/NewMetaDataFactory.java | 75 ----------------------
.../mode/manager/ContextManager.java | 22 +++++--
.../mode/metadata/MetaDataContextsFactory.java | 69 ++++++--------------
.../mode/metadata/NewMetaDataContextsFactory.java | 67 ++++++-------------
.../statement/type/MySQLDDLStatementVisitor.java | 60 +++++++++--------
13 files changed, 137 insertions(+), 313 deletions(-)
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
index ddd6baf4e98..0cee8049a20 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingDataSourceRule.java
@@ -65,16 +65,20 @@ public final class ReadwriteSplittingDataSourceRule {
}
/**
- * Update disabled data source names.
+ * Enable data source.
*
- * @param dataSourceName data source name
- * @param isDisabled is disabled
+ * @param dataSourceName data source name to be enabled.
*/
- public void updateDisabledDataSourceNames(final String dataSourceName, final boolean isDisabled) {
- if (isDisabled) {
- disabledDataSourceNames.add(dataSourceName);
- } else {
- disabledDataSourceNames.remove(dataSourceName);
- }
+ public void enableDataSource(final String dataSourceName) {
+ disabledDataSourceNames.remove(dataSourceName);
+ }
+
+ /**
+ * Disable data source.
+ *
+ * @param dataSourceName data source name to be disabled.
+ */
+ public void disableDataSource(final String dataSourceName) {
+ disabledDataSourceNames.add(dataSourceName);
}
}
diff --git a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
index 5cbb39a35d5..bb294161191 100644
--- a/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
+++ b/features/readwrite-splitting/core/src/main/java/org/apache/shardingsphere/readwritesplitting/rule/ReadwriteSplittingRule.java
@@ -161,7 +161,11 @@ public final class ReadwriteSplittingRule implements DatabaseRule, DataSourceCon
QualifiedDatabase qualifiedDatabase = dataSourceEvent.getQualifiedDatabase();
ReadwriteSplittingDataSourceRule dataSourceRule = dataSourceRules.get(qualifiedDatabase.getGroupName());
Preconditions.checkNotNull(dataSourceRule, "Can not find readwrite-splitting data source rule in database `%s`", qualifiedDatabase.getDatabaseName());
- dataSourceRule.updateDisabledDataSourceNames(dataSourceEvent.getQualifiedDatabase().getDataSourceName(), DataSourceState.DISABLED == dataSourceEvent.getDataSource().getStatus());
+ if (DataSourceState.DISABLED == dataSourceEvent.getDataSource().getStatus()) {
+ dataSourceRule.disableDataSource(dataSourceEvent.getQualifiedDatabase().getDataSourceName());
+ } else {
+ dataSourceRule.enableDataSource(dataSourceEvent.getQualifiedDatabase().getDataSourceName());
+ }
}
@Override
diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/StandardReadwriteSplittingDataSourceRouterTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/StandardReadwriteSplittingDataSourceRouterTest.java
index 82b7c5e9120..51c9756bcd1 100644
--- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/StandardReadwriteSplittingDataSourceRouterTest.java
+++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/StandardReadwriteSplittingDataSourceRouterTest.java
@@ -47,7 +47,7 @@ class StandardReadwriteSplittingDataSourceRouterTest {
@Test
void assertRouteWithFilter() {
- rule.updateDisabledDataSourceNames("read_ds_0", true);
+ rule.disableDataSource("read_ds_0");
assertThat(new StandardReadwriteSplittingDataSourceRouter().route(rule), is("read_ds_1"));
}
}
diff --git a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/filter/DisabledReadDataSourcesFilterTest.java b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/filter/DisabledReadDataSourcesFilterTest.java
index c19122dd819..96e487d8e75 100644
--- a/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/filter/DisabledReadDataSourcesFilterTest.java
+++ b/features/readwrite-splitting/core/src/test/java/org/apache/shardingsphere/readwritesplitting/route/standard/filter/DisabledReadDataSourcesFilterTest.java
@@ -48,26 +48,26 @@ class DisabledReadDataSourcesFilterTest {
@Test
void assertGetReadDataSourceNamesWithDisabledDataSourceNames() {
- rule.updateDisabledDataSourceNames("read_ds_0", true);
+ rule.disableDataSource("read_ds_0");
assertThat(new DisabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
}
@Test
- void assertUpdateDisabledDataSourceNamesForDisabled() {
- rule.updateDisabledDataSourceNames("read_ds_0", true);
+ void assertDisableDataSource() {
+ rule.disableDataSource("read_ds_0");
assertThat(new DisabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
}
@Test
- void assertUpdateDisabledDataSourceNamesForEnabled() {
- rule.updateDisabledDataSourceNames("read_ds_0", true);
- rule.updateDisabledDataSourceNames("read_ds_0", false);
+ void assertEnableDataSource() {
+ rule.disableDataSource("read_ds_0");
+ rule.enableDataSource("read_ds_0");
assertThat(new DisabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Arrays.asList("read_ds_0", "read_ds_1")));
}
@Test
void assertGetEnabledReplicaDataSources() {
- rule.updateDisabledDataSourceNames("read_ds_0", true);
+ rule.disableDataSource("read_ds_0");
assertThat(new DisabledReadDataSourcesFilter().filter(rule, Arrays.asList("read_ds_0", "read_ds_1")), is(Collections.singletonList("read_ds_1")));
}
}
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
index 24817cedc67..bb59e5d4f11 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/instance/ComputeNodeInstance.java
@@ -63,7 +63,11 @@ public final class ComputeNodeInstance {
* @param status status
*/
public void switchState(final String status) {
- state.switchState(InstanceState.CIRCUIT_BREAK, InstanceState.CIRCUIT_BREAK.name().equals(status));
+ if (InstanceState.CIRCUIT_BREAK.name().equals(status)) {
+ state.switchToValidState(InstanceState.CIRCUIT_BREAK);
+ } else {
+ state.switchToInvalidState(InstanceState.CIRCUIT_BREAK);
+ }
}
/**
diff --git a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/instance/InstanceStateContext.java b/infra/common/src/main/java/org/apache/shardingsphere/infra/state/instance/InstanceStateContext.java
index 6b53f54e147..aeeb832c298 100644
--- a/infra/common/src/main/java/org/apache/shardingsphere/infra/state/instance/InstanceStateContext.java
+++ b/infra/common/src/main/java/org/apache/shardingsphere/infra/state/instance/InstanceStateContext.java
@@ -33,15 +33,19 @@ public final class InstanceStateContext {
* Switch state.
*
* @param state state
- * @param on true if state is valid, false if not
*/
- public void switchState(final InstanceState state, final boolean on) {
- if (on) {
- currentState.push(state);
- } else {
- if (getCurrentState() == state) {
- recoverState();
- }
+ public void switchToValidState(final InstanceState state) {
+ currentState.push(state);
+ }
+
+ /**
+ * Switch state.
+ *
+ * @param state state
+ */
+ public void switchToInvalidState(final InstanceState state) {
+ if (getCurrentState() == state) {
+ recoverState();
}
}
diff --git a/infra/common/src/test/java/org/apache/shardingsphere/infra/state/InstanceStateContextTest.java b/infra/common/src/test/java/org/apache/shardingsphere/infra/state/InstanceStateContextTest.java
index 9e841043fbf..15350297f53 100644
--- a/infra/common/src/test/java/org/apache/shardingsphere/infra/state/InstanceStateContextTest.java
+++ b/infra/common/src/test/java/org/apache/shardingsphere/infra/state/InstanceStateContextTest.java
@@ -30,23 +30,23 @@ class InstanceStateContextTest {
@Test
void assertSwitchStateWithCircuitBreakOn() {
- instanceStateContext.switchState(InstanceState.CIRCUIT_BREAK, true);
+ instanceStateContext.switchToValidState(InstanceState.CIRCUIT_BREAK);
assertThat(instanceStateContext.getCurrentState(), is(InstanceState.CIRCUIT_BREAK));
- instanceStateContext.switchState(InstanceState.CIRCUIT_BREAK, false);
+ instanceStateContext.switchToInvalidState(InstanceState.CIRCUIT_BREAK);
}
@Test
void assertSwitchStateWithCircuitBreakOff() {
- instanceStateContext.switchState(InstanceState.CIRCUIT_BREAK, false);
+ instanceStateContext.switchToInvalidState(InstanceState.CIRCUIT_BREAK);
assertThat(instanceStateContext.getCurrentState(), is(InstanceState.OK));
}
@Test
void assertSwitchStateWithMultiState() {
- instanceStateContext.switchState(InstanceState.CIRCUIT_BREAK, true);
- instanceStateContext.switchState(InstanceState.LOCK, true);
+ instanceStateContext.switchToValidState(InstanceState.CIRCUIT_BREAK);
+ instanceStateContext.switchToValidState(InstanceState.LOCK);
assertThat(instanceStateContext.getCurrentState(), is(InstanceState.LOCK));
- instanceStateContext.switchState(InstanceState.LOCK, false);
+ instanceStateContext.switchToInvalidState(InstanceState.LOCK);
assertThat(instanceStateContext.getCurrentState(), is(InstanceState.CIRCUIT_BREAK));
}
}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
deleted file mode 100644
index 6d160ac5cb5..00000000000
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/MetaDataFactory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.metadata;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.instance.InstanceContext;
-import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
-import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
-
-import java.sql.SQLException;
-import java.util.Map;
-
-/**
- * Meta data factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class MetaDataFactory {
-
- /**
- * Create database meta data for governance center.
- *
- * @param databaseName database name
- * @param internalLoadMetaData internal load meta data
- * @param persistService meta data persist service
- * @param databaseConfig database configuration
- * @param props configuration properties
- * @param instanceContext instance context
- * @return database meta data
- * @throws SQLException sql exception
- */
- public static ShardingSphereDatabase create(final String databaseName, final boolean internalLoadMetaData, final MetaDataBasedPersistService persistService,
- final DatabaseConfiguration databaseConfig, final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ? InternalMetaDataFactory.create(databaseName, persistService, databaseConfig, props, instanceContext)
- : ExternalMetaDataFactory.create(databaseName, databaseConfig, props, instanceContext);
- }
-
- /**
- * Create database meta data for governance center.
- *
- * @param internalLoadMetaData internal load meta data
- * @param persistService meta data persist service
- * @param databaseConfigMap database configuration
- * @param props configuration properties
- * @param instanceContext instance context
- * @return database meta data
- * @throws SQLException sql exception
- */
- public static Map<String, ShardingSphereDatabase> create(final boolean internalLoadMetaData, final MetaDataPersistService persistService,
- final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
- final InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ? InternalMetaDataFactory.create(persistService, databaseConfigMap, props, instanceContext)
- : ExternalMetaDataFactory.create(databaseConfigMap, props, instanceContext);
- }
-}
diff --git a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/NewMetaDataFactory.java b/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/NewMetaDataFactory.java
deleted file mode 100644
index e7e39830398..00000000000
--- a/kernel/metadata/core/src/main/java/org/apache/shardingsphere/metadata/NewMetaDataFactory.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * 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.metadata;
-
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.infra.config.database.DatabaseConfiguration;
-import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
-import org.apache.shardingsphere.infra.instance.InstanceContext;
-import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
-import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.factory.NewInternalMetaDataFactory;
-import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
-
-import java.sql.SQLException;
-import java.util.Map;
-
-/**
- * TODO replace the old implementation after meta data refactor completed
- * New meta data factory.
- */
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public final class NewMetaDataFactory {
-
- /**
- * Create database meta data for governance center.
- *
- * @param databaseName database name
- * @param internalLoadMetaData internal load meta data
- * @param persistService meta data persist service
- * @param databaseConfig database configuration
- * @param props configuration properties
- * @param instanceContext instance context
- * @return database meta data
- * @throws SQLException sql exception
- */
- public static ShardingSphereDatabase create(final String databaseName, final boolean internalLoadMetaData, final NewMetaDataPersistService persistService,
- final DatabaseConfiguration databaseConfig, final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ? NewInternalMetaDataFactory.create(databaseName, persistService, databaseConfig, props, instanceContext)
- : ExternalMetaDataFactory.create(databaseName, databaseConfig, props, instanceContext);
- }
-
- /**
- * Create database meta data for governance center.
- *
- * @param internalLoadMetaData internal load meta data
- * @param persistService meta data persist service
- * @param databaseConfigMap database configuration
- * @param props configuration properties
- * @param instanceContext instance context
- * @return database meta data
- * @throws SQLException sql exception
- */
- public static Map<String, ShardingSphereDatabase> create(final boolean internalLoadMetaData, final NewMetaDataPersistService persistService,
- final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
- final InstanceContext instanceContext) throws SQLException {
- return internalLoadMetaData ? NewInternalMetaDataFactory.create(persistService, databaseConfigMap, props, instanceContext)
- : ExternalMetaDataFactory.create(databaseConfigMap, 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 d8268a65c3c..a940cf3b15a 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
@@ -51,7 +51,8 @@ import org.apache.shardingsphere.infra.state.cluster.ClusterState;
import org.apache.shardingsphere.infra.state.cluster.ClusterStateContext;
import org.apache.shardingsphere.infra.yaml.data.pojo.YamlShardingSphereRowData;
import org.apache.shardingsphere.infra.yaml.data.swapper.YamlShardingSphereRowDataSwapper;
-import org.apache.shardingsphere.metadata.MetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
import org.apache.shardingsphere.metadata.persist.MetaDataBasedPersistService;
import org.apache.shardingsphere.mode.manager.switcher.ResourceSwitchManager;
import org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
@@ -372,6 +373,10 @@ public final class ContextManager implements AutoCloseable {
return newMetaDataContexts(new ShardingSphereMetaData(changedDatabases, changedGlobalMetaData, props));
}
+ private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData metaData) {
+ return new MetaDataContexts(metaDataContexts.get().getPersistService(), metaData);
+ }
+
/**
* Create changed databases.
*
@@ -382,8 +387,8 @@ public final class ContextManager implements AutoCloseable {
* @return ShardingSphere databases
* @throws SQLException SQL exception
*/
- public synchronized Map<String, ShardingSphereDatabase> createChangedDatabases(final String databaseName, final boolean internalLoadMetaData, final SwitchingResource switchingResource,
- final Collection<RuleConfiguration> ruleConfigs) throws SQLException {
+ public synchronized Map<String, ShardingSphereDatabase> createChangedDatabases(final String databaseName, final boolean internalLoadMetaData,
+ final SwitchingResource switchingResource, final Collection<RuleConfiguration> ruleConfigs) throws SQLException {
if (null != switchingResource && !switchingResource.getNewDataSources().isEmpty()) {
metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources().putAll(switchingResource.getNewDataSources());
}
@@ -392,16 +397,19 @@ public final class ContextManager implements AutoCloseable {
: ruleConfigs;
DatabaseConfiguration toBeCreatedDatabaseConfig =
new DataSourceProvidedDatabaseConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData().getDataSources(), toBeCreatedRuleConfigs);
- ShardingSphereDatabase changedDatabase = MetaDataFactory.create(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(),
- internalLoadMetaData, metaDataContexts.get().getPersistService(), toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(), instanceContext);
+ ShardingSphereDatabase changedDatabase = createChangedDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName(), internalLoadMetaData,
+ metaDataContexts.get().getPersistService(), toBeCreatedDatabaseConfig, metaDataContexts.get().getMetaData().getProps(), instanceContext);
Map<String, ShardingSphereDatabase> result = new LinkedHashMap<>(metaDataContexts.get().getMetaData().getDatabases());
changedDatabase.getSchemas().putAll(newShardingSphereSchemas(changedDatabase));
result.put(databaseName.toLowerCase(), changedDatabase);
return result;
}
- private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData metaData) {
- return new MetaDataContexts(metaDataContexts.get().getPersistService(), metaData);
+ private ShardingSphereDatabase createChangedDatabase(final String databaseName, final boolean internalLoadMetaData, final MetaDataBasedPersistService persistService,
+ final DatabaseConfiguration databaseConfig, final ConfigurationProperties props, final InstanceContext instanceContext) throws SQLException {
+ return internalLoadMetaData
+ ? InternalMetaDataFactory.create(databaseName, persistService, databaseConfig, props, instanceContext)
+ : ExternalMetaDataFactory.create(databaseName, databaseConfig, props, instanceContext);
}
private Map<String, ShardingSphereSchema> newShardingSphereSchemas(final ShardingSphereDatabase database) {
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
index 34e72b0ba15..51d51bfbc6d 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextsFactory.java
@@ -33,10 +33,11 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.metadata.MetaDataFactory;
-import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
+import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.InternalMetaDataFactory;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
+import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
import javax.sql.DataSource;
import java.sql.SQLException;
@@ -46,7 +47,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Properties;
import java.util.stream.Collectors;
/**
@@ -80,37 +80,29 @@ public final class MetaDataContextsFactory {
*/
public static MetaDataContexts create(final MetaDataPersistService persistService, final ContextManagerBuilderParameter param,
final InstanceContext instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws SQLException {
- boolean databaseMetaDataExisted = databaseMetaDataExisted(persistService);
- Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = getDatabaseConfigurations(databaseMetaDataExisted,
- getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService);
+ boolean isDatabaseMetaDataExisted = !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
+ Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = isDatabaseMetaDataExisted
+ ? createEffectiveDatabaseConfigurations(getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService)
+ : param.getDatabaseConfigs();
checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, param.isForce());
- Collection<RuleConfiguration> globalRuleConfigs = getGlobalRuleConfigs(databaseMetaDataExisted, persistService, param.getGlobalRuleConfigs());
- ConfigurationProperties props = getConfigurationProperties(databaseMetaDataExisted, persistService, param.getProps());
- Map<String, ShardingSphereDatabase> databases = getDatabases(databaseMetaDataExisted, persistService, effectiveDatabaseConfigs, props, instanceContext);
+ Collection<RuleConfiguration> globalRuleConfigs = isDatabaseMetaDataExisted ? persistService.getGlobalRuleService().load() : param.getGlobalRuleConfigs();
+ ConfigurationProperties props = isDatabaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(param.getProps());
+ Map<String, ShardingSphereDatabase> databases = isDatabaseMetaDataExisted
+ ? InternalMetaDataFactory.create(persistService, effectiveDatabaseConfigs, props, instanceContext)
+ : ExternalMetaDataFactory.create(effectiveDatabaseConfigs, props, instanceContext);
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props));
MetaDataContexts result = new MetaDataContexts(persistService, new ShardingSphereMetaData(databases, globalMetaData, props));
- persistDatabaseConfigurations(databaseMetaDataExisted, param, result);
- persistMetaData(databaseMetaDataExisted, result);
+ if (!isDatabaseMetaDataExisted) {
+ persistDatabaseConfigurations(result, param);
+ persistMetaData(result);
+ }
return result;
}
- private static boolean databaseMetaDataExisted(final MetaDataPersistService persistService) {
- return !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
- }
-
private static Collection<String> getDatabaseNames(final InstanceContext instanceContext, final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) {
return instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
}
- private static ConfigurationProperties getConfigurationProperties(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService, final Properties props) {
- return databaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(props);
- }
-
- private static Map<String, DatabaseConfiguration> getDatabaseConfigurations(final boolean databaseMetaDataExisted, final Collection<String> databaseNames,
- final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) {
- return databaseMetaDataExisted ? createEffectiveDatabaseConfigurations(databaseNames, databaseConfigs, persistService) : databaseConfigs;
- }
-
private static Map<String, DatabaseConfiguration> createEffectiveDatabaseConfigurations(final Collection<String> databaseNames,
final Map<String, DatabaseConfiguration> databaseConfigs, final MetaDataPersistService persistService) {
return databaseNames.stream().collect(
@@ -145,23 +137,6 @@ public final class MetaDataContextsFactory {
return result;
}
- private static Collection<RuleConfiguration> getGlobalRuleConfigs(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService,
- final Collection<RuleConfiguration> globalRuleConfigs) {
- return databaseMetaDataExisted ? persistService.getGlobalRuleService().load() : globalRuleConfigs;
- }
-
- private static Map<String, ShardingSphereDatabase> getDatabases(final boolean databaseMetaDataExisted, final MetaDataPersistService persistService,
- final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
- final InstanceContext instanceContext) throws SQLException {
- return MetaDataFactory.create(databaseMetaDataExisted, persistService, databaseConfigMap, props, instanceContext);
- }
-
- private static void persistDatabaseConfigurations(final boolean databaseMetaDataExisted, final ContextManagerBuilderParameter param, final MetaDataContexts metadataContexts) {
- if (!databaseMetaDataExisted) {
- persistDatabaseConfigurations(metadataContexts, param);
- }
- }
-
private static void persistDatabaseConfigurations(final MetaDataContexts metadataContexts, final ContextManagerBuilderParameter param) {
metadataContexts.getPersistService().persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(), param.getProps());
for (Entry<String, ? extends DatabaseConfiguration> entry : param.getDatabaseConfigs().entrySet()) {
@@ -172,12 +147,10 @@ public final class MetaDataContextsFactory {
}
}
- private static void persistMetaData(final boolean databaseMetaDataExisted, final MetaDataContexts metaDataContexts) {
- if (!databaseMetaDataExisted) {
- metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
- .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
- metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
- .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
- }
+ private static void persistMetaData(final MetaDataContexts metaDataContexts) {
+ metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
+ .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
+ metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
+ .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
}
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
index 82e8bf99b6a..72f9d93c970 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/NewMetaDataContextsFactory.java
@@ -33,7 +33,8 @@ import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.rule.ShardingSphereRuleMetaData;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
-import org.apache.shardingsphere.metadata.NewMetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.ExternalMetaDataFactory;
+import org.apache.shardingsphere.metadata.factory.NewInternalMetaDataFactory;
import org.apache.shardingsphere.metadata.persist.NewMetaDataPersistService;
import org.apache.shardingsphere.mode.event.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -46,7 +47,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
-import java.util.Properties;
import java.util.stream.Collectors;
/**
@@ -81,38 +81,30 @@ public final class NewMetaDataContextsFactory {
*/
public static MetaDataContexts create(final NewMetaDataPersistService persistService, final ContextManagerBuilderParameter param,
final InstanceContext instanceContext, final Map<String, StorageNodeDataSource> storageNodes) throws SQLException {
- boolean databaseMetaDataExisted = databaseMetaDataExisted(persistService);
- Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = getDatabaseConfigurations(databaseMetaDataExisted,
- getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService);
+ boolean isDatabaseMetaDataExisted = !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
+ Map<String, DatabaseConfiguration> effectiveDatabaseConfigs = isDatabaseMetaDataExisted
+ ? createEffectiveDatabaseConfigurations(getDatabaseNames(instanceContext, param.getDatabaseConfigs(), persistService), param.getDatabaseConfigs(), persistService)
+ : param.getDatabaseConfigs();
checkDataSourceStates(effectiveDatabaseConfigs, storageNodes, param.isForce());
- Collection<RuleConfiguration> globalRuleConfigs = getGlobalRuleConfigs(databaseMetaDataExisted, persistService, param.getGlobalRuleConfigs());
- ConfigurationProperties props = getConfigurationProperties(databaseMetaDataExisted, persistService, param.getProps());
- Map<String, ShardingSphereDatabase> databases = getDatabases(databaseMetaDataExisted, persistService, effectiveDatabaseConfigs, props, instanceContext);
+ Collection<RuleConfiguration> globalRuleConfigs = isDatabaseMetaDataExisted ? persistService.getGlobalRuleService().load() : param.getGlobalRuleConfigs();
+ ConfigurationProperties props = isDatabaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(param.getProps());
+ Map<String, ShardingSphereDatabase> databases = isDatabaseMetaDataExisted
+ ? NewInternalMetaDataFactory.create(persistService, effectiveDatabaseConfigs, props, instanceContext)
+ : ExternalMetaDataFactory.create(effectiveDatabaseConfigs, props, instanceContext);
ShardingSphereRuleMetaData globalMetaData = new ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, databases, props));
MetaDataContexts result = new MetaDataContexts(persistService, new ShardingSphereMetaData(databases, globalMetaData, props));
- persistDatabaseConfigurations(databaseMetaDataExisted, param, result);
- persistMetaData(databaseMetaDataExisted, result);
+ if (!isDatabaseMetaDataExisted) {
+ persistDatabaseConfigurations(result, param);
+ persistMetaData(result);
+ }
return result;
}
- private static boolean databaseMetaDataExisted(final NewMetaDataPersistService persistService) {
- return !persistService.getDatabaseMetaDataService().loadAllDatabaseNames().isEmpty();
- }
-
private static Collection<String> getDatabaseNames(final InstanceContext instanceContext,
final Map<String, DatabaseConfiguration> databaseConfigs, final NewMetaDataPersistService persistService) {
return instanceContext.getInstance().getMetaData() instanceof JDBCInstanceMetaData ? databaseConfigs.keySet() : persistService.getDatabaseMetaDataService().loadAllDatabaseNames();
}
- private static ConfigurationProperties getConfigurationProperties(final boolean databaseMetaDataExisted, final NewMetaDataPersistService persistService, final Properties props) {
- return databaseMetaDataExisted ? new ConfigurationProperties(persistService.getPropsService().load()) : new ConfigurationProperties(props);
- }
-
- private static Map<String, DatabaseConfiguration> getDatabaseConfigurations(final boolean databaseMetaDataExisted, final Collection<String> databaseNames,
- final Map<String, DatabaseConfiguration> databaseConfigs, final NewMetaDataPersistService persistService) {
- return databaseMetaDataExisted ? createEffectiveDatabaseConfigurations(databaseNames, databaseConfigs, persistService) : databaseConfigs;
- }
-
private static Map<String, DatabaseConfiguration> createEffectiveDatabaseConfigurations(final Collection<String> databaseNames,
final Map<String, DatabaseConfiguration> databaseConfigs, final NewMetaDataPersistService persistService) {
return databaseNames.stream().collect(
@@ -147,23 +139,6 @@ public final class NewMetaDataContextsFactory {
return result;
}
- private static Collection<RuleConfiguration> getGlobalRuleConfigs(final boolean databaseMetaDataExisted, final NewMetaDataPersistService persistService,
- final Collection<RuleConfiguration> globalRuleConfigs) {
- return databaseMetaDataExisted ? persistService.getGlobalRuleService().load() : globalRuleConfigs;
- }
-
- private static Map<String, ShardingSphereDatabase> getDatabases(final boolean databaseMetaDataExisted, final NewMetaDataPersistService persistService,
- final Map<String, DatabaseConfiguration> databaseConfigMap, final ConfigurationProperties props,
- final InstanceContext instanceContext) throws SQLException {
- return NewMetaDataFactory.create(databaseMetaDataExisted, persistService, databaseConfigMap, props, instanceContext);
- }
-
- private static void persistDatabaseConfigurations(final boolean databaseMetaDataExisted, final ContextManagerBuilderParameter param, final MetaDataContexts metadataContexts) {
- if (!databaseMetaDataExisted) {
- persistDatabaseConfigurations(metadataContexts, param);
- }
- }
-
private static void persistDatabaseConfigurations(final MetaDataContexts metadataContexts, final ContextManagerBuilderParameter param) {
metadataContexts.getPersistService().persistGlobalRuleConfiguration(param.getGlobalRuleConfigs(), param.getProps());
for (Entry<String, ? extends DatabaseConfiguration> entry : param.getDatabaseConfigs().entrySet()) {
@@ -174,12 +149,10 @@ public final class NewMetaDataContextsFactory {
}
}
- private static void persistMetaData(final boolean databaseMetaDataExisted, final MetaDataContexts metaDataContexts) {
- if (!databaseMetaDataExisted) {
- metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
- .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
- metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
- .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
- }
+ private static void persistMetaData(final MetaDataContexts metaDataContexts) {
+ metaDataContexts.getMetaData().getDatabases().values().forEach(each -> each.getSchemas()
+ .forEach((schemaName, schema) -> metaDataContexts.getPersistService().getDatabaseMetaDataService().persist(each.getName(), schemaName, schema)));
+ metaDataContexts.getShardingSphereData().getDatabaseData().forEach((databaseName, databaseData) -> databaseData.getSchemaData().forEach((schemaName, schemaData) -> metaDataContexts
+ .getPersistService().getShardingSphereDataPersistService().persist(databaseName, schemaName, schemaData, metaDataContexts.getMetaData().getDatabases())));
}
}
diff --git a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
index 388490e2f0e..69a5aa44383 100644
--- a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
+++ b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDDLStatementVisitor.java
@@ -287,35 +287,39 @@ public final class MySQLDDLStatementVisitor extends MySQLStatementVisitor implem
return result;
}
for (AlterDefinitionSegment each : ((CollectionValue<AlterDefinitionSegment>) visit(ctx.alterTableActions().alterCommandList().alterList())).getValue()) {
- if (each instanceof AddColumnDefinitionSegment) {
- result.getAddColumnDefinitions().add((AddColumnDefinitionSegment) each);
- } else if (each instanceof ModifyColumnDefinitionSegment) {
- result.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) each);
- } else if (each instanceof ChangeColumnDefinitionSegment) {
- result.getChangeColumnDefinitions().add((ChangeColumnDefinitionSegment) each);
- } else if (each instanceof DropColumnDefinitionSegment) {
- result.getDropColumnDefinitions().add((DropColumnDefinitionSegment) each);
- } else if (each instanceof AddConstraintDefinitionSegment) {
- result.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) each);
- } else if (each instanceof DropConstraintDefinitionSegment) {
- result.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) each);
- } else if (each instanceof RenameTableDefinitionSegment) {
- result.setRenameTable(((RenameTableDefinitionSegment) each).getRenameTable());
- } else if (each instanceof ConvertTableDefinitionSegment) {
- result.setConvertTableDefinition((ConvertTableDefinitionSegment) each);
- } else if (each instanceof DropIndexDefinitionSegment) {
- result.getDropIndexDefinitions().add((DropIndexDefinitionSegment) each);
- } else if (each instanceof RenameIndexDefinitionSegment) {
- result.getRenameIndexDefinitions().add((RenameIndexDefinitionSegment) each);
- } else if (each instanceof RenameColumnSegment) {
- result.getRenameColumnDefinitions().add((RenameColumnSegment) each);
- } else if (each instanceof AlgorithmTypeSegment) {
- result.setAlgorithmSegment((AlgorithmTypeSegment) each);
- } else if (each instanceof LockTableSegment) {
- result.setLockTableSegment((LockTableSegment) each);
- }
+ setAlterDefinition(result, each);
+ }
+ return result;
+ }
+
+ private void setAlterDefinition(final MySQLAlterTableStatement alterTableStatement, final AlterDefinitionSegment alterDefinitionSegment) {
+ if (alterDefinitionSegment instanceof AddColumnDefinitionSegment) {
+ alterTableStatement.getAddColumnDefinitions().add((AddColumnDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof ModifyColumnDefinitionSegment) {
+ alterTableStatement.getModifyColumnDefinitions().add((ModifyColumnDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof ChangeColumnDefinitionSegment) {
+ alterTableStatement.getChangeColumnDefinitions().add((ChangeColumnDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof DropColumnDefinitionSegment) {
+ alterTableStatement.getDropColumnDefinitions().add((DropColumnDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof AddConstraintDefinitionSegment) {
+ alterTableStatement.getAddConstraintDefinitions().add((AddConstraintDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof DropConstraintDefinitionSegment) {
+ alterTableStatement.getDropConstraintDefinitions().add((DropConstraintDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof RenameTableDefinitionSegment) {
+ alterTableStatement.setRenameTable(((RenameTableDefinitionSegment) alterDefinitionSegment).getRenameTable());
+ } else if (alterDefinitionSegment instanceof ConvertTableDefinitionSegment) {
+ alterTableStatement.setConvertTableDefinition((ConvertTableDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof DropIndexDefinitionSegment) {
+ alterTableStatement.getDropIndexDefinitions().add((DropIndexDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof RenameIndexDefinitionSegment) {
+ alterTableStatement.getRenameIndexDefinitions().add((RenameIndexDefinitionSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof RenameColumnSegment) {
+ alterTableStatement.getRenameColumnDefinitions().add((RenameColumnSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof AlgorithmTypeSegment) {
+ alterTableStatement.setAlgorithmSegment((AlgorithmTypeSegment) alterDefinitionSegment);
+ } else if (alterDefinitionSegment instanceof LockTableSegment) {
+ alterTableStatement.setLockTableSegment((LockTableSegment) alterDefinitionSegment);
}
- return result;
}
private ColumnDefinitionSegment generateColumnDefinitionSegment(final ColumnSegment column, final FieldDefinitionContext ctx) {