This is an automated email from the ASF dual-hosted git repository.
yx9o 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 f37cff49963 Add spi MetaDataManagerPersistService to instead of
ModeContextManager (#31361)
f37cff49963 is described below
commit f37cff49963fe4cb7d4bfaee327530083e66169b
Author: Haoran Meng <[email protected]>
AuthorDate: Thu May 23 13:30:02 2024 +0800
Add spi MetaDataManagerPersistService to instead of ModeContextManager
(#31361)
---
.../mode/manager/ContextManager.java | 2 +-
.../service/MetaDataManagerPersistService.java | 152 ++++++++++
...a => MetaDataManagerPersistServiceBuilder.java} | 25 +-
.../mode/service/PersistServiceFacade.java | 8 +-
...taDataManagerPersistServiceBuilderFixture.java} | 30 +-
.../mode/manager/ContextManagerTest.java | 4 +-
...de.service.MetaDataManagerPersistServiceBuilder | 18 ++
.../ClusterMetaDataManagerPersistService.java | 158 ++++++++++
...usterMetaDataManagerPersistServiceBuilder.java} | 26 +-
...de.service.MetaDataManagerPersistServiceBuilder | 18 ++
.../StandaloneMetaDataManagerPersistService.java | 322 +++++++++++++++++++++
...aloneMetaDataManagerPersistServiceBuilder.java} | 29 +-
...de.service.MetaDataManagerPersistServiceBuilder | 18 ++
.../ProxyDatabaseConnectionManagerTest.java | 5 +-
.../backend/connector/ProxySQLExecutorTest.java | 5 +-
.../DatabaseAdminQueryBackendHandlerTest.java | 5 +-
.../ral/QueryableRALBackendHandlerTest.java | 5 +-
.../FrontDatabaseProtocolTypeFactoryTest.java | 5 +-
.../frontend/state/impl/OKProxyStateTest.java | 5 +-
.../PostgreSQLCommandExecuteEngineTest.java | 5 +-
20 files changed, 781 insertions(+), 64 deletions(-)
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 698651fa6c4..78905598a88 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
@@ -84,7 +84,7 @@ public final class ContextManager implements AutoCloseable {
resourceMetaDataContextManager = new
ResourceMetaDataContextManager(this.metaDataContexts);
executorEngine =
ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
stateContext = new StateContext();
- persistServiceFacade = new
PersistServiceFacade(metaDataContexts.getPersistService().getRepository());
+ persistServiceFacade = new
PersistServiceFacade(metaDataContexts.getPersistService().getRepository(),
computeNodeInstanceContext.getModeConfiguration(), this);
}
/**
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistService.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistService.java
new file mode 100644
index 00000000000..8b1d9a91ae3
--- /dev/null
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistService.java
@@ -0,0 +1,152 @@
+/*
+ * 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.mode.service;
+
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * Meta data manager persist service.
+ */
+public interface MetaDataManagerPersistService {
+
+ /**
+ * Create database.
+ *
+ * @param databaseName database name
+ */
+ void createDatabase(String databaseName);
+
+ /**
+ * Drop database.
+ *
+ * @param databaseName database name
+ */
+ void dropDatabase(String databaseName);
+
+ /**
+ * Create schema.
+ *
+ * @param databaseName database name
+ * @param schemaName schema name
+ */
+ void createSchema(String databaseName, String schemaName);
+
+ /**
+ * Alter schema.
+ *
+ * @param alterSchemaPOJO alter schema pojo
+ */
+ void alterSchema(AlterSchemaPOJO alterSchemaPOJO);
+
+ /**
+ * Drop schema.
+ *
+ * @param databaseName database name
+ * @param schemaNames schema names
+ */
+ void dropSchema(String databaseName, Collection<String> schemaNames);
+
+ /**
+ * Alter schema metadata.
+ *
+ * @param alterSchemaMetaDataPOJO alter schema metadata pojo
+ */
+ void alterSchemaMetaData(AlterSchemaMetaDataPOJO alterSchemaMetaDataPOJO);
+
+ /**
+ * Register storage units.
+ *
+ * @param databaseName database name
+ * @param toBeRegisteredProps to be registered storage unit properties
+ * @throws SQLException SQL exception
+ */
+ void registerStorageUnits(String databaseName, Map<String,
DataSourcePoolProperties> toBeRegisteredProps) throws SQLException;
+
+ /**
+ * Alter storage units.
+ *
+ * @param databaseName database name
+ * @param toBeUpdatedProps to be updated storage unit properties
+ * @throws SQLException SQL exception
+ */
+ void alterStorageUnits(String databaseName, Map<String,
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException;
+
+ /**
+ * Unregister storage units.
+ * @param databaseName database name
+ * @param toBeDroppedStorageUnitNames to be dropped storage unit names
+ * @throws SQLException SQL exception
+ */
+ void unregisterStorageUnits(String databaseName, Collection<String>
toBeDroppedStorageUnitNames) throws SQLException;
+
+ /**
+ * Alter single rule configuration.
+ *
+ * @param databaseName database name
+ * @param ruleConfigs rule configs
+ */
+ void alterSingleRuleConfiguration(String databaseName,
Collection<RuleConfiguration> ruleConfigs);
+
+ /**
+ * Alter rule configuration.
+ *
+ * @param databaseName database name
+ * @param toBeAlteredRuleConfig to be altered rule config
+ * @return meta data versions
+ */
+ Collection<MetaDataVersion> alterRuleConfiguration(String databaseName,
RuleConfiguration toBeAlteredRuleConfig);
+
+ /**
+ * Remove rule configuration item.
+ *
+ * @param databaseName database name
+ * @param toBeRemovedRuleConfig to be removed rule config
+ */
+ void removeRuleConfigurationItem(String databaseName, RuleConfiguration
toBeRemovedRuleConfig);
+
+ /**
+ * Remove rule configuration.
+ *
+ * @param databaseName database name
+ * @param ruleName rule name
+ */
+ void removeRuleConfiguration(String databaseName, String ruleName);
+
+ /**
+ * Alter global rule configuration.
+ *
+ * @param globalRuleConfig global rule config
+ */
+ void alterGlobalRuleConfiguration(RuleConfiguration globalRuleConfig);
+
+ /**
+ * Alter properties.
+ *
+ * @param props pros
+ */
+ void alterProperties(Properties props);
+}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistServiceBuilder.java
similarity index 59%
copy from
mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
copy to
mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistServiceBuilder.java
index e6642d5c1c5..9fe6bc5b63b 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/MetaDataManagerPersistServiceBuilder.java
@@ -17,22 +17,19 @@
package org.apache.shardingsphere.mode.service;
-import lombok.Getter;
-import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.state.StatePersistService;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPI;
+import org.apache.shardingsphere.mode.manager.ContextManager;
/**
- * Persist service facade.
+ * Meta data manager persist service builder.
*/
-@Getter
-public final class PersistServiceFacade {
+public interface MetaDataManagerPersistServiceBuilder extends TypedSPI {
- private final ComputeNodePersistService computeNodePersistService;
-
- private final StatePersistService statePersistService;
-
- public PersistServiceFacade(final PersistRepository repository) {
- computeNodePersistService = new ComputeNodePersistService(repository);
- statePersistService = new StatePersistService(repository);
- }
+ /**
+ * Build meta data manager persist service.
+ *
+ * @param contextManager context manager
+ * @return meta data manager persist service
+ */
+ MetaDataManagerPersistService build(ContextManager contextManager);
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
index e6642d5c1c5..de646661a22 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++
b/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
@@ -18,6 +18,9 @@
package org.apache.shardingsphere.mode.service;
import lombok.Getter;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
+import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
+import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.spi.PersistRepository;
import org.apache.shardingsphere.mode.state.StatePersistService;
@@ -31,8 +34,11 @@ public final class PersistServiceFacade {
private final StatePersistService statePersistService;
- public PersistServiceFacade(final PersistRepository repository) {
+ private final MetaDataManagerPersistService metaDataManagerPersistService;
+
+ public PersistServiceFacade(final PersistRepository repository, final
ModeConfiguration modeConfiguration, final ContextManager contextManager) {
computeNodePersistService = new ComputeNodePersistService(repository);
statePersistService = new StatePersistService(repository);
+ metaDataManagerPersistService =
TypedSPILoader.getService(MetaDataManagerPersistServiceBuilder.class,
modeConfiguration.getType()).build(contextManager);
}
}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/MetaDataManagerPersistServiceBuilderFixture.java
similarity index 55%
copy from
mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
copy to
mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/MetaDataManagerPersistServiceBuilderFixture.java
index e6642d5c1c5..691a9e620d2 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++
b/mode/core/src/test/java/org/apache/shardingsphere/mode/fixture/MetaDataManagerPersistServiceBuilderFixture.java
@@ -15,24 +15,26 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.service;
+package org.apache.shardingsphere.mode.fixture;
-import lombok.Getter;
-import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.state.StatePersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.service.MetaDataManagerPersistService;
+import
org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder;
-/**
- * Persist service facade.
- */
-@Getter
-public final class PersistServiceFacade {
+public final class MetaDataManagerPersistServiceBuilderFixture implements
MetaDataManagerPersistServiceBuilder {
- private final ComputeNodePersistService computeNodePersistService;
+ @Override
+ public MetaDataManagerPersistService build(final ContextManager
contextManager) {
+ return null;
+ }
- private final StatePersistService statePersistService;
+ @Override
+ public Object getType() {
+ return "foo_type";
+ }
- public PersistServiceFacade(final PersistRepository repository) {
- computeNodePersistService = new ComputeNodePersistService(repository);
- statePersistService = new StatePersistService(repository);
+ @Override
+ public boolean isDefault() {
+ return true;
}
}
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 e2bcdd6f86d..b0e80fe3341 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
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.mode.manager;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -26,7 +27,6 @@ import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePo
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
-import org.apache.shardingsphere.infra.instance.mode.ModeContextManager;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import
org.apache.shardingsphere.infra.metadata.database.resource.ResourceMetaData;
import
org.apache.shardingsphere.infra.metadata.database.resource.node.StorageNode;
@@ -88,7 +88,7 @@ class ContextManagerTest {
when(metaDataContexts.getMetaData().getDatabase("foo_db").containsSchema("foo_schema")).thenReturn(true);
when(metaDataContexts.getMetaData().getDatabases().values()).thenReturn(Collections.singleton(database));
ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
-
when(computeNodeInstanceContext.getModeContextManager()).thenReturn(mock(ModeContextManager.class));
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
contextManager = new ContextManager(metaDataContexts,
computeNodeInstanceContext);
}
diff --git
a/mode/core/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
b/mode/core/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
new file mode 100644
index 00000000000..02002f9acbe
--- /dev/null
+++
b/mode/core/src/test/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.mode.fixture.MetaDataManagerPersistServiceBuilderFixture
diff --git
a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
new file mode 100644
index 00000000000..eaddbaa3870
--- /dev/null
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistService.java
@@ -0,0 +1,158 @@
+/*
+ * 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.mode.manager.cluster.service;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+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.model.ShardingSphereView;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
+import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * Cluster meta data manager persist service.
+ */
+@RequiredArgsConstructor
+public final class ClusterMetaDataManagerPersistService implements
MetaDataManagerPersistService {
+
+ private final ContextManager contextManager;
+
+ @Override
+ public void createDatabase(final String databaseName) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
+ }
+
+ @Override
+ public void dropDatabase(final String databaseName) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
+ }
+
+ @Override
+ public void createSchema(final String databaseName, final String
schemaName) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addSchema(databaseName,
schemaName);
+ }
+
+ @Override
+ public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
+ String databaseName = alterSchemaPOJO.getDatabaseName();
+ String schemaName = alterSchemaPOJO.getSchemaName();
+ ShardingSphereSchema schema =
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
+ DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ databaseMetaDataService.persistByAlterConfiguration(databaseName,
alterSchemaPOJO.getRenameSchemaName(), schema);
+
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
alterSchemaPOJO.getRenameSchemaName(), schema.getViews());
+ databaseMetaDataService.dropSchema(databaseName, schemaName);
+ }
+
+ @Override
+ public void dropSchema(final String databaseName, final Collection<String>
schemaNames) {
+ DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+ schemaNames.forEach(each ->
databaseMetaDataService.dropSchema(databaseName, each));
+ }
+
+ @Override
+ public void alterSchemaMetaData(final AlterSchemaMetaDataPOJO
alterSchemaMetaDataPOJO) {
+ String databaseName = alterSchemaMetaDataPOJO.getDatabaseName();
+ String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
+ Map<String, ShardingSphereTable> tables =
alterSchemaMetaDataPOJO.getAlteredTables().stream().collect(Collectors.toMap(ShardingSphereTable::getName,
table -> table));
+ Map<String, ShardingSphereView> views =
alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName,
view -> view));
+ DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName,
schemaName, tables);
+
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
schemaName, views);
+ alterSchemaMetaDataPOJO.getDroppedTables().forEach(each ->
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName,
schemaName, each));
+ alterSchemaMetaDataPOJO.getDroppedViews().forEach(each ->
databaseMetaDataService.getViewMetaDataPersistService().delete(databaseName,
schemaName, each));
+ }
+
+ @Override
+ public void registerStorageUnits(final String databaseName, final
Map<String, DataSourcePoolProperties> toBeRegisteredProps) {
+
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().persistConfigurations(databaseName,
toBeRegisteredProps);
+ }
+
+ @Override
+ public void alterStorageUnits(final String databaseName, final Map<String,
DataSourcePoolProperties> toBeUpdatedProps) {
+ DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>>
dataSourceService =
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
toBeUpdatedProps));
+ }
+
+ @Override
+ public void unregisterStorageUnits(final String databaseName, final
Collection<String> toBeDroppedStorageUnitNames) {
+
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().deleteConfigurations(databaseName,
+
getToBeDroppedDataSourcePoolProperties(contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService().load(databaseName),
toBeDroppedStorageUnitNames));
+ }
+
+ private Map<String, DataSourcePoolProperties>
getToBeDroppedDataSourcePoolProperties(final Map<String,
DataSourcePoolProperties> propsMap, final Collection<String>
toBeDroppedResourceNames) {
+ Map<String, DataSourcePoolProperties> result = new
LinkedHashMap<>(toBeDroppedResourceNames.size(), 1F);
+ for (String each : toBeDroppedResourceNames) {
+ if (propsMap.containsKey(each)) {
+ result.put(each, propsMap.get(each));
+ }
+ }
+ return result;
+ }
+
+ @Override
+ public void alterSingleRuleConfiguration(final String databaseName, final
Collection<RuleConfiguration> ruleConfigs) {
+ ruleConfigs.removeIf(each ->
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService()
+
.switchActiveVersion(contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persistConfigurations(databaseName,
ruleConfigs));
+ }
+
+ @Override
+ public Collection<MetaDataVersion> alterRuleConfiguration(final String
databaseName, final RuleConfiguration toBeAlteredRuleConfig) {
+ if (null != toBeAlteredRuleConfig) {
+ return
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().persistConfigurations(databaseName,
Collections.singleton(toBeAlteredRuleConfig));
+ }
+ return Collections.emptyList();
+ }
+
+ @Override
+ public void removeRuleConfigurationItem(final String databaseName, final
RuleConfiguration toBeRemovedRuleConfig) {
+ if (null != toBeRemovedRuleConfig) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
Collections.singleton(toBeRemovedRuleConfig));
+ }
+ }
+
+ @Override
+ public void removeRuleConfiguration(final String databaseName, final
String ruleName) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
ruleName);
+ }
+
+ @Override
+ public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
+
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
+ }
+
+ @Override
+ public void alterProperties(final Properties props) {
+
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
+ }
+}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistServiceBuilder.java
similarity index 54%
copy from
mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
copy to
mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistServiceBuilder.java
index e6642d5c1c5..1f5eb8a41d2 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++
b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/service/ClusterMetaDataManagerPersistServiceBuilder.java
@@ -15,24 +15,24 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.service;
+package org.apache.shardingsphere.mode.manager.cluster.service;
-import lombok.Getter;
-import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.state.StatePersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.service.MetaDataManagerPersistService;
+import
org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder;
/**
- * Persist service facade.
+ * Cluster meta data manager persist service builder.
*/
-@Getter
-public final class PersistServiceFacade {
+public final class ClusterMetaDataManagerPersistServiceBuilder implements
MetaDataManagerPersistServiceBuilder {
- private final ComputeNodePersistService computeNodePersistService;
-
- private final StatePersistService statePersistService;
+ @Override
+ public MetaDataManagerPersistService build(final ContextManager
contextManager) {
+ return new ClusterMetaDataManagerPersistService(contextManager);
+ }
- public PersistServiceFacade(final PersistRepository repository) {
- computeNodePersistService = new ComputeNodePersistService(repository);
- statePersistService = new StatePersistService(repository);
+ @Override
+ public Object getType() {
+ return "Cluster";
}
}
diff --git
a/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
new file mode 100644
index 00000000000..9e31a2d93c2
--- /dev/null
+++
b/mode/type/cluster/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.mode.manager.cluster.service.ClusterMetaDataManagerPersistServiceBuilder
diff --git
a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
new file mode 100644
index 00000000000..dbe5b0d5d18
--- /dev/null
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistService.java
@@ -0,0 +1,322 @@
+/*
+ * 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.mode.manager.standalone.service;
+
+import com.google.common.base.Strings;
+import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
+import
org.apache.shardingsphere.infra.connection.refresher.util.TableRefreshUtils;
+import
org.apache.shardingsphere.infra.datasource.pool.props.domain.DataSourcePoolProperties;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+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.model.ShardingSphereView;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaMetaDataPOJO;
+import
org.apache.shardingsphere.infra.metadata.database.schema.pojo.AlterSchemaPOJO;
+import org.apache.shardingsphere.infra.metadata.version.MetaDataVersion;
+import
org.apache.shardingsphere.infra.rule.attribute.datanode.MutableDataNodeRuleAttribute;
+import org.apache.shardingsphere.infra.rule.scope.GlobalRule;
+import
org.apache.shardingsphere.infra.rule.scope.GlobalRule.GlobalRuleChangedType;
+import
org.apache.shardingsphere.infra.spi.type.ordered.cache.OrderedServicesCache;
+import
org.apache.shardingsphere.metadata.persist.service.config.database.DatabaseBasedPersistService;
+import
org.apache.shardingsphere.metadata.persist.service.database.DatabaseMetaDataPersistService;
+import org.apache.shardingsphere.mode.event.DataChangedEvent;
+import org.apache.shardingsphere.mode.event.DataChangedEvent.Type;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.manager.switcher.ResourceSwitchManager;
+import org.apache.shardingsphere.mode.manager.switcher.SwitchingResource;
+import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import
org.apache.shardingsphere.mode.metadata.builder.RuleConfigurationEventBuilder;
+import org.apache.shardingsphere.mode.service.MetaDataManagerPersistService;
+import org.apache.shardingsphere.single.api.config.SingleRuleConfiguration;
+
+import java.sql.SQLException;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.stream.Collectors;
+
+/**
+ * Standalone meta data manager persist service.
+ */
+public final class StandaloneMetaDataManagerPersistService implements
MetaDataManagerPersistService {
+
+ private final RuleConfigurationEventBuilder ruleConfigurationEventBuilder
= new RuleConfigurationEventBuilder();
+
+ private final ContextManager contextManager;
+
+ public StandaloneMetaDataManagerPersistService(final ContextManager
contextManager) {
+ this.contextManager = contextManager;
+ }
+
+ @Override
+ public void createDatabase(final String databaseName) {
+
contextManager.getResourceMetaDataContextManager().addDatabase(databaseName);
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().addDatabase(databaseName);
+ clearServiceCache();
+ }
+
+ @Override
+ public void dropDatabase(final String databaseName) {
+
contextManager.getResourceMetaDataContextManager().dropDatabase(databaseName);
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().dropDatabase(databaseName);
+ clearServiceCache();
+ }
+
+ @Override
+ public void createSchema(final String databaseName, final String
schemaName) {
+ ShardingSphereSchema schema = new ShardingSphereSchema();
+ ShardingSphereMetaData metaData =
contextManager.getMetaDataContexts().getMetaData();
+ ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+ database.addSchema(schemaName, schema);
+ metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService().persistByAlterConfiguration(databaseName,
schemaName, schema);
+ }
+
+ @Override
+ public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
+ ShardingSphereMetaData metaData =
contextManager.getMetaDataContexts().getMetaData();
+ ShardingSphereDatabase database =
metaData.getDatabase(alterSchemaPOJO.getDatabaseName());
+ putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(),
alterSchemaPOJO.getRenameSchemaName(),
alterSchemaPOJO.getLogicDataSourceName());
+ removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
+ metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+ DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+
databaseMetaDataService.persistByAlterConfiguration(alterSchemaPOJO.getDatabaseName(),
alterSchemaPOJO.getRenameSchemaName(),
database.getSchema(alterSchemaPOJO.getRenameSchemaName()));
+
databaseMetaDataService.getViewMetaDataPersistService().persist(alterSchemaPOJO.getDatabaseName(),
alterSchemaPOJO.getRenameSchemaName(),
+
database.getSchema(alterSchemaPOJO.getRenameSchemaName()).getViews());
+ databaseMetaDataService.dropSchema(alterSchemaPOJO.getDatabaseName(),
alterSchemaPOJO.getSchemaName());
+ }
+
+ private void putSchemaMetaData(final ShardingSphereDatabase database,
final String schemaName, final String renameSchemaName, final String
logicDataSourceName) {
+ ShardingSphereSchema schema = database.getSchema(schemaName);
+ database.addSchema(renameSchemaName, schema);
+ addDataNode(database, logicDataSourceName, schemaName,
schema.getAllTableNames());
+ }
+
+ private void addDataNode(final ShardingSphereDatabase database, final
String logicDataSourceName, final String schemaName, final Collection<String>
tobeAddedTableNames) {
+ tobeAddedTableNames.forEach(each -> {
+ if (!Strings.isNullOrEmpty(logicDataSourceName) &&
TableRefreshUtils.isSingleTable(each, database)) {
+
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule
-> rule.put(logicDataSourceName, schemaName, each));
+ }
+ });
+ }
+
+ private void addDataNode(final ShardingSphereDatabase database, final
String logicDataSourceName, final String schemaName, final Map<String,
ShardingSphereTable> toBeAddedTables,
+ final Map<String, ShardingSphereView>
toBeAddedViews) {
+ addTablesToDataNode(database, schemaName, logicDataSourceName,
toBeAddedTables);
+ addViewsToDataNode(database, schemaName, logicDataSourceName,
toBeAddedTables, toBeAddedViews);
+ }
+
+ private void addTablesToDataNode(final ShardingSphereDatabase database,
final String schemaName, final String logicDataSourceName, final Map<String,
ShardingSphereTable> toBeAddedTables) {
+ for (Entry<String, ShardingSphereTable> entry :
toBeAddedTables.entrySet()) {
+ if (!Strings.isNullOrEmpty(logicDataSourceName) &&
TableRefreshUtils.isSingleTable(entry.getKey(), database)) {
+
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(rule
-> rule.put(logicDataSourceName, schemaName, entry.getKey()));
+ }
+ database.getSchema(schemaName).putTable(entry.getKey(),
entry.getValue());
+ }
+ }
+
+ private void addViewsToDataNode(final ShardingSphereDatabase database,
final String schemaName, final String logicDataSourceName,
+ final Map<String, ShardingSphereTable>
toBeAddedTables, final Map<String, ShardingSphereView> toBeAddedViews) {
+ for (Entry<String, ShardingSphereView> entry :
toBeAddedViews.entrySet()) {
+ if (!Strings.isNullOrEmpty(logicDataSourceName) &&
TableRefreshUtils.isSingleTable(entry.getKey(), database)) {
+
database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each
-> each.put(logicDataSourceName, schemaName, entry.getKey()));
+ }
+ database.getSchema(schemaName).putTable(entry.getKey(),
toBeAddedTables.get(entry.getKey().toLowerCase()));
+ database.getSchema(schemaName).putView(entry.getKey(),
entry.getValue());
+ }
+ }
+
+ private void removeSchemaMetaData(final ShardingSphereDatabase database,
final String schemaName) {
+ ShardingSphereSchema schema = new
ShardingSphereSchema(database.getSchema(schemaName).getTables(),
database.getSchema(schemaName).getViews());
+ database.dropSchema(schemaName);
+
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
Collections.singletonList(schemaName), schema.getAllTableNames());
+ }
+
+ private void removeDataNode(final Collection<MutableDataNodeRuleAttribute>
ruleAttributes, final Collection<String> schemaNames, final Collection<String>
tobeRemovedTables) {
+ tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule ->
rule.remove(schemaNames, each)));
+ }
+
+ private void removeDataNode(final ShardingSphereDatabase database, final
String schemaName, final Collection<String> tobeRemovedTables, final
Collection<String> tobeRemovedViews) {
+ removeTablesToDataNode(database, schemaName, tobeRemovedTables);
+ removeViewsToDataNode(database, schemaName, tobeRemovedTables,
tobeRemovedViews);
+ }
+
+ private void removeDataNode(final Collection<MutableDataNodeRuleAttribute>
ruleAttributes, final String schemaName, final Collection<String>
tobeRemovedTables) {
+ tobeRemovedTables.forEach(each -> ruleAttributes.forEach(rule ->
rule.remove(schemaName, each)));
+ }
+
+ private void removeTablesToDataNode(final ShardingSphereDatabase database,
final String schemaName, final Collection<String> toBeDroppedTables) {
+
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
schemaName, toBeDroppedTables);
+ toBeDroppedTables.forEach(each ->
database.getSchema(schemaName).removeTable(each));
+ }
+
+ private void removeViewsToDataNode(final ShardingSphereDatabase database,
final String schemaName, final Collection<String> toBeDroppedTables, final
Collection<String> toBeDroppedViews) {
+
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
schemaName, toBeDroppedViews);
+ ShardingSphereSchema schema = database.getSchema(schemaName);
+ toBeDroppedTables.forEach(schema::removeTable);
+ toBeDroppedViews.forEach(schema::removeView);
+ }
+
+ @Override
+ public void dropSchema(final String databaseName, final Collection<String>
schemaNames) {
+ Collection<String> tobeRemovedTables = new LinkedHashSet<>();
+ Collection<String> tobeRemovedSchemas = new
LinkedHashSet<>(schemaNames.size(), 1F);
+ ShardingSphereMetaData metaData =
contextManager.getMetaDataContexts().getMetaData();
+ ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+ for (String each : schemaNames) {
+ ShardingSphereSchema schema = new
ShardingSphereSchema(database.getSchema(each).getTables(),
database.getSchema(each).getViews());
+ database.dropSchema(each);
+ Optional.of(schema).ifPresent(optional ->
tobeRemovedTables.addAll(optional.getAllTableNames()));
+ tobeRemovedSchemas.add(each.toLowerCase());
+ }
+
removeDataNode(database.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class),
tobeRemovedSchemas, tobeRemovedTables);
+ metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+ }
+
+ @Override
+ public void alterSchemaMetaData(final AlterSchemaMetaDataPOJO
alterSchemaMetaDataPOJO) {
+ String databaseName = alterSchemaMetaDataPOJO.getDatabaseName();
+ String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
+ ShardingSphereMetaData metaData =
contextManager.getMetaDataContexts().getMetaData();
+ ShardingSphereDatabase database = metaData.getDatabase(databaseName);
+ Map<String, ShardingSphereTable> tables =
alterSchemaMetaDataPOJO.getAlteredTables().stream().collect(Collectors.toMap(ShardingSphereTable::getName,
table -> table));
+ Map<String, ShardingSphereView> views =
alterSchemaMetaDataPOJO.getAlteredViews().stream().collect(Collectors.toMap(ShardingSphereView::getName,
view -> view));
+ addDataNode(database,
alterSchemaMetaDataPOJO.getLogicDataSourceName(), schemaName, tables, views);
+ removeDataNode(database, schemaName,
alterSchemaMetaDataPOJO.getDroppedTables(),
alterSchemaMetaDataPOJO.getDroppedViews());
+ metaData.getGlobalRuleMetaData().getRules().forEach(each ->
((GlobalRule) each).refresh(metaData.getDatabases(),
GlobalRuleChangedType.SCHEMA_CHANGED));
+ DatabaseMetaDataPersistService databaseMetaDataService =
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService();
+
databaseMetaDataService.getTableMetaDataPersistService().persist(databaseName,
schemaName, tables);
+
databaseMetaDataService.getViewMetaDataPersistService().persist(databaseName,
schemaName, views);
+ alterSchemaMetaDataPOJO.getDroppedTables().forEach(each ->
databaseMetaDataService.getTableMetaDataPersistService().delete(databaseName,
schemaName, each));
+ alterSchemaMetaDataPOJO.getDroppedViews().forEach(each ->
databaseMetaDataService.getViewMetaDataPersistService().delete(databaseName,
schemaName, each));
+ }
+
+ @Override
+ public void registerStorageUnits(final String databaseName, final
Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
+ SwitchingResource switchingResource =
+ new
ResourceSwitchManager().registerStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
toBeRegisteredProps);
+
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName,
false, switchingResource, null));
+
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+ .forEach(each -> ((GlobalRule)
each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
GlobalRuleChangedType.DATABASE_CHANGED));
+
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchemas()
+ .forEach((schemaName, schema) ->
contextManager.getMetaDataContexts().getPersistService().getDatabaseMetaDataService()
+
.persistByAlterConfiguration(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
schemaName, schema));
+ DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>>
dataSourceService =
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
toBeRegisteredProps));
+ clearServiceCache();
+ }
+
+ @Override
+ public void alterStorageUnits(final String databaseName, final Map<String,
DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
+ SwitchingResource switchingResource =
+ new
ResourceSwitchManager().alterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
toBeUpdatedProps);
+
contextManager.getMetaDataContexts().getMetaData().getDatabases().putAll(contextManager.getConfigurationContextManager().createChangedDatabases(databaseName,
true, switchingResource, null));
+
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+ .forEach(each -> ((GlobalRule)
each).refresh(contextManager.getMetaDataContexts().getMetaData().getDatabases(),
GlobalRuleChangedType.DATABASE_CHANGED));
+ DatabaseBasedPersistService<Map<String, DataSourcePoolProperties>>
dataSourceService =
contextManager.getMetaDataContexts().getPersistService().getDataSourceUnitService();
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(dataSourceService.persistConfigurations(databaseName,
toBeUpdatedProps));
+ switchingResource.closeStaleDataSources();
+ clearServiceCache();
+ }
+
+ @Override
+ public void unregisterStorageUnits(final String databaseName, final
Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
+ SwitchingResource switchingResource =
+ new
ResourceSwitchManager().unregisterStorageUnit(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getResourceMetaData(),
toBeDroppedStorageUnitNames);
+ contextManager.getMetaDataContexts().getMetaData().getDatabases()
+
.putAll(contextManager.getConfigurationContextManager().renewDatabase(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
switchingResource));
+ MetaDataContexts reloadMetaDataContexts =
contextManager.getConfigurationContextManager().createMetaDataContexts(databaseName,
false, switchingResource, null);
+
contextManager.getConfigurationContextManager().alterSchemaMetaData(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
+
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName),
true);
+ contextManager.deletedSchemaNames(databaseName,
reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
+ contextManager.renewMetaDataContexts(reloadMetaDataContexts);
+ switchingResource.closeStaleDataSources();
+ clearServiceCache();
+ }
+
+ @Override
+ public void alterSingleRuleConfiguration(final String databaseName, final
Collection<RuleConfiguration> ruleConfigs) {
+ ruleConfigs.removeIf(each ->
!each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
+ Collection<MetaDataVersion> metaDataVersions =
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+
.persistConfigurations(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
ruleConfigs);
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
+
contextManager.getConfigurationContextManager().alterRuleConfiguration(databaseName,
ruleConfigs.iterator().next());
+ clearServiceCache();
+ }
+
+ @Override
+ public Collection<MetaDataVersion> alterRuleConfiguration(final String
databaseName, final RuleConfiguration toBeAlteredRuleConfig) {
+ if (null != toBeAlteredRuleConfig) {
+ Collection<MetaDataVersion> metaDataVersions =
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService()
+
.persistConfigurations(contextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(),
Collections.singletonList(toBeAlteredRuleConfig));
+
contextManager.getMetaDataContexts().getPersistService().getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
+ sendDatabaseRuleChangedEvent(databaseName, metaDataVersions);
+ clearServiceCache();
+ }
+ return Collections.emptyList();
+ }
+
+ private void sendDatabaseRuleChangedEvent(final String databaseName, final
Collection<MetaDataVersion> metaDataVersions) {
+ for (MetaDataVersion each : metaDataVersions) {
+ sendDatabaseRuleChangedEvent(databaseName, each);
+ }
+ }
+
+ private void sendDatabaseRuleChangedEvent(final String databaseName, final
MetaDataVersion metaDataVersion) {
+ ruleConfigurationEventBuilder.build(databaseName, new
DataChangedEvent(metaDataVersion.getActiveVersionNodePath(),
metaDataVersion.getNextActiveVersion(), Type.UPDATED))
+ .ifPresent(optional ->
contextManager.getComputeNodeInstanceContext().getEventBusContext().post(optional));
+ }
+
+ @Override
+ public void removeRuleConfigurationItem(final String databaseName, final
RuleConfiguration toBeRemovedRuleConfig) {
+ if (null != toBeRemovedRuleConfig) {
+ sendDatabaseRuleChangedEvent(databaseName,
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().deleteConfigurations(databaseName,
Collections.singleton(toBeRemovedRuleConfig)));
+ clearServiceCache();
+ }
+ }
+
+ @Override
+ public void removeRuleConfiguration(final String databaseName, final
String ruleName) {
+
contextManager.getMetaDataContexts().getPersistService().getDatabaseRulePersistService().delete(databaseName,
ruleName);
+ clearServiceCache();
+ }
+
+ @Override
+ public void alterGlobalRuleConfiguration(final RuleConfiguration
toBeAlteredRuleConfig) {
+
contextManager.getConfigurationContextManager().alterGlobalRuleConfiguration(toBeAlteredRuleConfig);
+
contextManager.getMetaDataContexts().getPersistService().getGlobalRuleService().persist(Collections.singleton(toBeAlteredRuleConfig));
+ clearServiceCache();
+ }
+
+ @Override
+ public void alterProperties(final Properties props) {
+ contextManager.getConfigurationContextManager().alterProperties(props);
+
contextManager.getMetaDataContexts().getPersistService().getPropsService().persist(props);
+ clearServiceCache();
+ }
+
+ private void clearServiceCache() {
+ OrderedServicesCache.clearCache();
+ }
+}
diff --git
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistServiceBuilder.java
similarity index 51%
copy from
mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
copy to
mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistServiceBuilder.java
index e6642d5c1c5..c60f8658c39 100644
---
a/mode/core/src/main/java/org/apache/shardingsphere/mode/service/PersistServiceFacade.java
+++
b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/service/StandaloneMetaDataManagerPersistServiceBuilder.java
@@ -15,24 +15,29 @@
* limitations under the License.
*/
-package org.apache.shardingsphere.mode.service;
+package org.apache.shardingsphere.mode.manager.standalone.service;
-import lombok.Getter;
-import org.apache.shardingsphere.mode.spi.PersistRepository;
-import org.apache.shardingsphere.mode.state.StatePersistService;
+import org.apache.shardingsphere.mode.manager.ContextManager;
+import org.apache.shardingsphere.mode.service.MetaDataManagerPersistService;
+import
org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder;
/**
- * Persist service facade.
+ * Standalone meta data manager persist service builder.
*/
-@Getter
-public final class PersistServiceFacade {
+public final class StandaloneMetaDataManagerPersistServiceBuilder implements
MetaDataManagerPersistServiceBuilder {
- private final ComputeNodePersistService computeNodePersistService;
+ @Override
+ public MetaDataManagerPersistService build(final ContextManager
contextManager) {
+ return new StandaloneMetaDataManagerPersistService(contextManager);
+ }
- private final StatePersistService statePersistService;
+ @Override
+ public Object getType() {
+ return "Standalone";
+ }
- public PersistServiceFacade(final PersistRepository repository) {
- computeNodePersistService = new ComputeNodePersistService(repository);
- statePersistService = new StatePersistService(repository);
+ @Override
+ public boolean isDefault() {
+ return true;
}
}
diff --git
a/mode/type/standalone/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
b/mode/type/standalone/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
new file mode 100644
index 00000000000..3dbb1a3829c
--- /dev/null
+++
b/mode/type/standalone/core/src/main/resources/META-INF/services/org.apache.shardingsphere.mode.service.MetaDataManagerPersistServiceBuilder
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+org.apache.shardingsphere.mode.manager.standalone.service.StandaloneMetaDataManagerPersistServiceBuilder
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
index 61e7fb1bda9..d646d28e20d 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxyDatabaseConnectionManagerTest.java
@@ -19,6 +19,7 @@ package org.apache.shardingsphere.proxy.backend.connector;
import com.google.common.collect.Multimap;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -123,7 +124,9 @@ class ProxyDatabaseConnectionManagerTest {
TransactionRule transactionRule = mock(TransactionRule.class);
when(transactionRule.getDefaultType()).thenReturn(TransactionType.LOCAL);
when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singletonList(transactionRule)));
- return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
computeNodeInstanceContext);
}
@AfterEach
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
index 423f570e372..ff1aca87b97 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/connector/ProxySQLExecutorTest.java
@@ -23,6 +23,7 @@ import
org.apache.shardingsphere.infra.binder.context.statement.ddl.CursorStatem
import
org.apache.shardingsphere.infra.binder.context.statement.ddl.TruncateStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.InsertStatementContext;
import
org.apache.shardingsphere.infra.binder.context.statement.dml.SelectStatementContext;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
@@ -108,7 +109,9 @@ class ProxySQLExecutorTest {
when(metaData.getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)).thenReturn(0);
when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Arrays.asList(mock(SQLFederationRule.class), transactionRule)));
- ContextManager contextManager = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ ContextManager contextManager = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
computeNodeInstanceContext);
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
index 4ed563005ff..8be713fff81 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/admin/DatabaseAdminQueryBackendHandlerTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.backend.handler.admin;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
@@ -114,6 +115,8 @@ class DatabaseAdminQueryBackendHandlerTest {
when(ProxyContext.getInstance().getContextManager().getDatabase("foo_db")).thenReturn(database);
ShardingSphereMetaData metaData = new
ShardingSphereMetaData(Collections.singletonMap("foo_db", database),
mock(ResourceMetaData.class),
mock(RuleMetaData.class), new ConfigurationProperties(new
Properties()));
- return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
computeNodeInstanceContext);
}
}
diff --git
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
index 97794e2bd02..be67ceb1868 100644
---
a/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
+++
b/proxy/backend/core/src/test/java/org/apache/shardingsphere/proxy/backend/handler/distsql/ral/QueryableRALBackendHandlerTest.java
@@ -20,6 +20,7 @@ package
org.apache.shardingsphere.proxy.backend.handler.distsql.ral;
import
org.apache.shardingsphere.distsql.statement.ral.queryable.QueryableRALStatement;
import
org.apache.shardingsphere.distsql.statement.ral.queryable.export.ExportDatabaseConfigurationStatement;
import
org.apache.shardingsphere.distsql.statement.ral.queryable.show.ShowTableMetaDataStatement;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.NoDatabaseSelectedException;
import
org.apache.shardingsphere.infra.exception.dialect.exception.syntax.database.UnknownDatabaseException;
@@ -71,7 +72,9 @@ class QueryableRALBackendHandlerTest {
MetaDataContexts metaDataContexts = new
MetaDataContexts(mock(MetaDataPersistService.class), metaData);
ConnectionSession connectionSession = mock(ConnectionSession.class,
RETURNS_DEEP_STUBS);
when(connectionSession.getDatabaseName()).thenReturn("unknown");
- ContextManager contextManager = new ContextManager(metaDataContexts,
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ ContextManager contextManager = new ContextManager(metaDataContexts,
computeNodeInstanceContext);
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
assertThrows(UnknownDatabaseException.class, () -> new
DistSQLQueryBackendHandler(mock(ExportDatabaseConfigurationStatement.class),
connectionSession).execute());
}
diff --git
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index beedf6cce0d..f022bfb3bb8 100644
---
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -17,6 +17,7 @@
package org.apache.shardingsphere.proxy.frontend.protocol;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -96,6 +97,8 @@ class FrontDatabaseProtocolTypeFactoryTest {
when(metaDataPersistService.getShardingSphereDataPersistService()).thenReturn(shardingSphereDataPersistService);
MetaDataContexts metaDataContexts = new
MetaDataContexts(metaDataPersistService,
new ShardingSphereMetaData(databases,
mock(ResourceMetaData.class), mock(RuleMetaData.class), new
ConfigurationProperties(props)));
- return new ContextManager(metaDataContexts,
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ return new ContextManager(metaDataContexts,
computeNodeInstanceContext);
}
}
diff --git
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
index da08b4ad95b..0b8b9d494a8 100644
---
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
+++
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/state/impl/OKProxyStateTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.proxy.frontend.state.impl;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.embedded.EmbeddedChannel;
import lombok.SneakyThrows;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.core.DefaultDatabase;
import org.apache.shardingsphere.infra.database.core.type.DatabaseType;
@@ -93,7 +94,9 @@ class OKProxyStateTest {
TransactionRule transactionRule = mock(TransactionRule.class);
when(transactionRule.getDefaultType()).thenReturn(TransactionType.XA);
when(metaData.getGlobalRuleMetaData()).thenReturn(new
RuleMetaData(Collections.singletonList(transactionRule)));
- return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ return new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), metaData),
computeNodeInstanceContext);
}
@SuppressWarnings({"unchecked", "SameParameterValue"})
diff --git
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
index 0774a7a9101..9fe5c6bf8d7 100644
---
a/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
+++
b/proxy/frontend/type/postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/command/PostgreSQLCommandExecuteEngineTest.java
@@ -22,6 +22,7 @@ import io.netty.channel.ChannelHandlerContext;
import
org.apache.shardingsphere.db.protocol.postgresql.packet.PostgreSQLPacket;
import
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLCommandCompletePacket;
import
org.apache.shardingsphere.db.protocol.postgresql.packet.generic.PostgreSQLReadyForQueryPacket;
+import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.metadata.persist.MetaDataPersistService;
@@ -119,7 +120,9 @@ class PostgreSQLCommandExecuteEngineTest {
PostgreSQLPacket packet = mock(PostgreSQLPacket.class);
when(queryCommandExecutor.getQueryRowPacket()).thenReturn(packet);
PostgreSQLCommandExecuteEngine commandExecuteEngine = new
PostgreSQLCommandExecuteEngine();
- ContextManager contextManager = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), new
ShardingSphereMetaData()), mock(ComputeNodeInstanceContext.class));
+ ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
+
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
+ ContextManager contextManager = new ContextManager(new
MetaDataContexts(mock(MetaDataPersistService.class), new
ShardingSphereMetaData()), computeNodeInstanceContext);
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
commandExecuteEngine.writeQueryData(channelHandlerContext,
databaseConnectionManager, queryCommandExecutor, 0);
verify(resourceLock).doAwait(channelHandlerContext);