You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by zh...@apache.org on 2025/01/14 12:38:25 UTC
(shardingsphere) branch master updated: Refactor MetaDataContexts (#34353)
This is an automated email from the ASF dual-hosted git repository.
zhangliang 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 18e8bd7884c Refactor MetaDataContexts (#34353)
18e8bd7884c is described below
commit 18e8bd7884c927a051be075703e78bf6b8a912f4
Author: Liang Zhang <zh...@apache.org>
AuthorDate: Tue Jan 14 20:38:19 2025 +0800
Refactor MetaDataContexts (#34353)
* Refactor MetaDataContexts
---
.../mode/manager/ContextManager.java | 35 ++++-----------
.../mode/metadata/MetaDataContextManager.java | 26 ++++++-----
.../mode/metadata/MetaDataContexts.java | 51 +++++++++++++++++++---
.../manager/DatabaseRuleConfigurationManager.java | 16 +++----
.../manager/GlobalConfigurationManager.java | 35 +++++++--------
.../mode/metadata/manager/RuleItemManager.java | 17 ++++----
.../metadata/manager/SchemaMetaDataManager.java | 39 ++++++++---------
.../manager/ShardingSphereDatabaseDataManager.java | 45 ++++++++++---------
.../mode/metadata/manager/StorageUnitManager.java | 22 +++++-----
.../mode/manager/ContextManagerTest.java | 7 ---
.../manager/SchemaMetaDataManagerTest.java | 3 +-
.../ClusterMetaDataManagerPersistService.java | 18 ++++----
.../ClusterMetaDataManagerPersistServiceTest.java | 4 +-
.../StandaloneMetaDataManagerPersistService.java | 46 +++++++++----------
...tandaloneMetaDataManagerPersistServiceTest.java | 8 ++--
15 files changed, 190 insertions(+), 182 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 22cbe2a9500..e02a1e7a5ae 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
@@ -44,7 +44,6 @@ import org.apache.shardingsphere.mode.state.ClusterStateContext;
import java.sql.SQLException;
import java.util.Collections;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Context manager.
@@ -53,7 +52,7 @@ import java.util.concurrent.atomic.AtomicReference;
@Slf4j
public final class ContextManager implements AutoCloseable {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final ComputeNodeInstanceContext computeNodeInstanceContext;
@@ -68,9 +67,9 @@ public final class ContextManager implements AutoCloseable {
private final PersistCoordinatorFacade persistCoordinatorFacade;
public ContextManager(final MetaDataContexts metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository repository) {
- this.metaDataContexts = new AtomicReference<>(metaDataContexts);
+ this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
- metaDataContextManager = new MetaDataContextManager(this.metaDataContexts, computeNodeInstanceContext, repository);
+ metaDataContextManager = new MetaDataContextManager(metaDataContexts, computeNodeInstanceContext, repository);
persistServiceFacade = new PersistServiceFacade(repository, computeNodeInstanceContext.getModeConfiguration(), metaDataContextManager);
stateContext = new ClusterStateContext(persistServiceFacade.getStatePersistService().load());
executorEngine = ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
@@ -80,24 +79,6 @@ public final class ContextManager implements AutoCloseable {
persistCoordinatorFacade = new PersistCoordinatorFacade(repository, computeNodeInstanceContext.getModeConfiguration());
}
- /**
- * Get meta data contexts.
- *
- * @return meta data contexts
- */
- public MetaDataContexts getMetaDataContexts() {
- return metaDataContexts.get();
- }
-
- /**
- * Renew meta data contexts.
- *
- * @param metaDataContexts meta data contexts
- */
- public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) {
- this.metaDataContexts.set(metaDataContexts);
- }
-
/**
* Get database.
*
@@ -146,7 +127,7 @@ public final class ContextManager implements AutoCloseable {
private ShardingSphereSchema loadSchema(final ShardingSphereDatabase database, final String schemaName, final String dataSourceName) throws SQLException {
database.reloadRules();
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(Collections.singletonMap(dataSourceName, database.getResourceMetaData().getStorageUnits().get(dataSourceName)),
- database.getRuleMetaData().getRules(), metaDataContexts.get().getMetaData().getProps(), schemaName);
+ database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps(), schemaName);
ShardingSphereSchema result = GenericSchemaBuilder.build(database.getProtocolType(), material).get(schemaName);
persistServiceFacade.getMetaDataPersistService().getDatabaseMetaDataFacade().getView().load(database.getName(), schemaName).forEach(result::putView);
return result;
@@ -161,7 +142,7 @@ public final class ContextManager implements AutoCloseable {
*/
public void reloadTable(final ShardingSphereDatabase database, final String schemaName, final String tableName) {
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(
- database.getResourceMetaData().getStorageUnits(), database.getRuleMetaData().getRules(), metaDataContexts.get().getMetaData().getProps(), schemaName);
+ database.getResourceMetaData().getStorageUnits(), database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps(), schemaName);
try {
persistTable(database, schemaName, tableName, material);
} catch (final SQLException ex) {
@@ -180,7 +161,7 @@ public final class ContextManager implements AutoCloseable {
public void reloadTable(final ShardingSphereDatabase database, final String schemaName, final String dataSourceName, final String tableName) {
StorageUnit storageUnit = database.getResourceMetaData().getStorageUnits().get(dataSourceName);
GenericSchemaBuilderMaterial material = new GenericSchemaBuilderMaterial(
- Collections.singletonMap(dataSourceName, storageUnit), database.getRuleMetaData().getRules(), metaDataContexts.get().getMetaData().getProps(), schemaName);
+ Collections.singletonMap(dataSourceName, storageUnit), database.getRuleMetaData().getRules(), metaDataContexts.getMetaData().getProps(), schemaName);
try {
persistTable(database, schemaName, tableName, material);
} catch (final SQLException ex) {
@@ -199,7 +180,7 @@ public final class ContextManager implements AutoCloseable {
* @return pre-selected database name
*/
public String getPreSelectedDatabaseName() {
- return InstanceType.JDBC == computeNodeInstanceContext.getInstance().getMetaData().getType() ? metaDataContexts.get().getMetaData().getAllDatabases().iterator().next().getName() : null;
+ return InstanceType.JDBC == computeNodeInstanceContext.getInstance().getMetaData().getType() ? metaDataContexts.getMetaData().getAllDatabases().iterator().next().getName() : null;
}
@Override
@@ -208,7 +189,7 @@ public final class ContextManager implements AutoCloseable {
each.onDestroyed(this);
}
executorEngine.close();
- metaDataContexts.get().getMetaData().close();
+ metaDataContexts.getMetaData().close();
persistServiceFacade.close(computeNodeInstanceContext.getInstance());
}
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
index 1440b2044bd..5e486c9e2c7 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContextManager.java
@@ -42,7 +42,6 @@ import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Meta data context manager..
@@ -51,7 +50,7 @@ import java.util.concurrent.atomic.AtomicReference;
@Slf4j
public class MetaDataContextManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final ComputeNodeInstanceContext computeNodeInstanceContext;
@@ -71,7 +70,7 @@ public class MetaDataContextManager {
private final GlobalConfigurationManager globalConfigurationManager;
- public MetaDataContextManager(final AtomicReference<MetaDataContexts> metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository repository) {
+ public MetaDataContextManager(final MetaDataContexts metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext, final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
resourceSwitchManager = new ResourceSwitchManager();
@@ -101,7 +100,8 @@ public class MetaDataContextManager {
* @param metaDataContexts meta data contexts
*/
public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) {
- this.metaDataContexts.set(metaDataContexts);
+ this.metaDataContexts.setMetaData(metaDataContexts.getMetaData());
+ this.metaDataContexts.setStatistics(metaDataContexts.getStatistics());
}
/**
@@ -112,8 +112,9 @@ public class MetaDataContextManager {
public void forceRefreshDatabaseMetaData(final ShardingSphereDatabase database) {
try {
MetaDataContexts reloadedMetaDataContexts = createMetaDataContexts(database);
- metaDataContexts.set(reloadedMetaDataContexts);
- metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+ metaDataContexts.setMetaData(reloadedMetaDataContexts.getMetaData());
+ metaDataContexts.setStatistics(reloadedMetaDataContexts.getStatistics());
+ metaDataContexts.getMetaData().getDatabase(database.getName()).getAllSchemas()
.forEach(each -> {
if (each.isEmpty()) {
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(database.getName(), each.getName());
@@ -134,8 +135,9 @@ public class MetaDataContextManager {
try {
MetaDataContexts reloadedMetaDataContexts = createMetaDataContexts(database);
dropSchemas(database.getName(), reloadedMetaDataContexts.getMetaData().getDatabase(database.getName()), database);
- metaDataContexts.set(reloadedMetaDataContexts);
- metaDataContexts.get().getMetaData().getDatabase(database.getName()).getAllSchemas()
+ metaDataContexts.setMetaData(reloadedMetaDataContexts.getMetaData());
+ metaDataContexts.setStatistics(reloadedMetaDataContexts.getStatistics());
+ metaDataContexts.getMetaData().getDatabase(database.getName()).getAllSchemas()
.forEach(each -> metaDataPersistService.getDatabaseMetaDataFacade().getSchema().alterByRefresh(database.getName(), each));
} catch (final SQLException ex) {
log.error("Refresh table meta data: {} failed", database.getName(), ex);
@@ -147,13 +149,13 @@ public class MetaDataContextManager {
SwitchingResource switchingResource = resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(), dataSourcePoolPropsFromRegCenter);
Collection<RuleConfiguration> ruleConfigs = metaDataPersistService.getDatabaseRulePersistService().load(database.getName());
ShardingSphereDatabase changedDatabase = MetaDataContextsFactory
- .createChangedDatabase(database.getName(), false, switchingResource, ruleConfigs, metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
- metaDataContexts.get().getMetaData().putDatabase(changedDatabase);
+ .createChangedDatabase(database.getName(), false, switchingResource, ruleConfigs, metaDataContexts, metaDataPersistService, computeNodeInstanceContext);
+ metaDataContexts.getMetaData().putDatabase(changedDatabase);
ConfigurationProperties props = new ConfigurationProperties(metaDataPersistService.getPropsService().load());
Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
- RuleMetaData changedGlobalMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, metaDataContexts.get().getMetaData().getAllDatabases(), props));
+ RuleMetaData changedGlobalMetaData = new RuleMetaData(GlobalRulesBuilder.buildRules(globalRuleConfigs, metaDataContexts.getMetaData().getAllDatabases(), props));
ShardingSphereMetaData metaData = new ShardingSphereMetaData(
- metaDataContexts.get().getMetaData().getAllDatabases(), metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), changedGlobalMetaData, props);
+ metaDataContexts.getMetaData().getAllDatabases(), metaDataContexts.getMetaData().getGlobalResourceMetaData(), changedGlobalMetaData, props);
MetaDataContexts result = new MetaDataContexts(metaData, ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
switchingResource.closeStaleDataSources();
return result;
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
index 569d038c170..a16e6b0b053 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/MetaDataContexts.java
@@ -17,19 +17,58 @@
package org.apache.shardingsphere.mode.metadata;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
+import java.util.concurrent.atomic.AtomicReference;
+
/**
* Meta data contexts.
*/
-@RequiredArgsConstructor
-@Getter
public final class MetaDataContexts {
- private final ShardingSphereMetaData metaData;
+ private final AtomicReference<ShardingSphereMetaData> metaData = new AtomicReference<>();
+
+ private final AtomicReference<ShardingSphereStatistics> statistics = new AtomicReference<>();
+
+ public MetaDataContexts(final ShardingSphereMetaData metaData, final ShardingSphereStatistics statistics) {
+ this.metaData.set(metaData);
+ this.statistics.set(statistics);
+ }
+
+ /**
+ * Get ShardingSphere meta data.
+ *
+ * @return got meta data
+ */
+ public ShardingSphereMetaData getMetaData() {
+ return metaData.get();
+ }
+
+ /**
+ * Set ShardingSphere meta data.
+ *
+ * @param metaData meta data
+ */
+ public void setMetaData(final ShardingSphereMetaData metaData) {
+ this.metaData.set(metaData);
+ }
+
+ /**
+ * Get ShardingSphere statistics.
+ *
+ * @return got meta data statistics
+ */
+ public ShardingSphereStatistics getStatistics() {
+ return statistics.get();
+ }
- private final ShardingSphereStatistics statistics;
+ /**
+ * Set ShardingSphere statistics.
+ *
+ * @param statistics statistics
+ */
+ public void setStatistics(final ShardingSphereStatistics statistics) {
+ this.statistics.set(statistics);
+ }
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
index 9f32b360e12..20241cf0dd3 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/DatabaseRuleConfigurationManager.java
@@ -26,16 +26,15 @@ import org.apache.shardingsphere.infra.rule.PartialRuleUpdateSupported;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.database.DatabaseRulesBuilder;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -43,13 +42,13 @@ import java.util.stream.Collectors;
*/
public final class DatabaseRuleConfigurationManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final ComputeNodeInstanceContext computeNodeInstanceContext;
private final MetaDataPersistService metaDataPersistService;
- public DatabaseRuleConfigurationManager(final AtomicReference<MetaDataContexts> metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
+ public DatabaseRuleConfigurationManager(final MetaDataContexts metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
@@ -65,7 +64,7 @@ public final class DatabaseRuleConfigurationManager {
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public synchronized void alterRuleConfiguration(final String databaseName, final RuleConfiguration ruleConfig) throws SQLException {
- ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName);
Collection<ShardingSphereRule> rules = new LinkedList<>(database.getRuleMetaData().getRules());
Optional<ShardingSphereRule> toBeChangedRule = rules.stream().filter(each -> each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -87,7 +86,7 @@ public final class DatabaseRuleConfigurationManager {
*/
@SuppressWarnings({"unchecked", "rawtypes"})
public synchronized void dropRuleConfiguration(final String databaseName, final RuleConfiguration ruleConfig) throws SQLException {
- ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName);
Collection<ShardingSphereRule> rules = new LinkedList<>(database.getRuleMetaData().getRules());
Optional<ShardingSphereRule> toBeChangedRule = rules.stream().filter(each -> each.getConfiguration().getClass().equals(ruleConfig.getClass())).findFirst();
if (toBeChangedRule.isPresent() && toBeChangedRule.get() instanceof PartialRuleUpdateSupported && ((PartialRuleUpdateSupported) toBeChangedRule.get()).partialUpdate(ruleConfig)) {
@@ -104,8 +103,9 @@ public final class DatabaseRuleConfigurationManager {
private void refreshMetadata(final String databaseName, final Collection<RuleConfiguration> ruleConfigurations) throws SQLException {
MetaDataContexts reloadMetaDataContexts = MetaDataContextsFactory.createByAlterRule(databaseName, false,
- ruleConfigurations, metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
- metaDataContexts.set(reloadMetaDataContexts);
+ ruleConfigurations, metaDataContexts, metaDataPersistService, computeNodeInstanceContext);
+ metaDataContexts.setMetaData(reloadMetaDataContexts.getMetaData());
+ metaDataContexts.setStatistics(reloadMetaDataContexts.getStatistics());
}
private Collection<RuleConfiguration> getRuleConfigurations(final Collection<ShardingSphereRule> rules) {
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
index 9d5a1ffd334..08e8de88236 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/GlobalConfigurationManager.java
@@ -29,15 +29,14 @@ import org.apache.shardingsphere.infra.yaml.config.swapper.rule.YamlRuleConfigur
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.ShardingSphereStatisticsFactory;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
-import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import org.apache.shardingsphere.mode.node.tuple.annotation.RepositoryTupleEntity;
+import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Objects;
import java.util.Properties;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Global configuration manager.
@@ -45,11 +44,11 @@ import java.util.concurrent.atomic.AtomicReference;
@Slf4j
public final class GlobalConfigurationManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final MetaDataPersistService metaDataPersistService;
- public GlobalConfigurationManager(final AtomicReference<MetaDataContexts> metaDataContexts, final PersistRepository repository) {
+ public GlobalConfigurationManager(final MetaDataContexts metaDataContexts, final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
metaDataPersistService = new MetaDataPersistService(repository);
}
@@ -64,14 +63,15 @@ public final class GlobalConfigurationManager {
return;
}
closeStaleTransactionRule(ruleConfig);
- Collection<ShardingSphereRule> rules = new LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules());
+ Collection<ShardingSphereRule> rules = new LinkedList<>(metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules());
rules.removeIf(each -> each.getConfiguration().getClass().isAssignableFrom(ruleConfig.getClass()));
- rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig, metaDataContexts.get().getMetaData().getAllDatabases(), metaDataContexts.get().getMetaData().getProps()));
- metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().clear();
- metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
- ShardingSphereMetaData toBeChangedMetaData = new ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(),
- metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), metaDataContexts.get().getMetaData().getProps());
- metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
+ rules.addAll(GlobalRulesBuilder.buildSingleRules(ruleConfig, metaDataContexts.getMetaData().getAllDatabases(), metaDataContexts.getMetaData().getProps()));
+ metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().clear();
+ metaDataContexts.getMetaData().getGlobalRuleMetaData().getRules().addAll(rules);
+ ShardingSphereMetaData toBeChangedMetaData = new ShardingSphereMetaData(metaDataContexts.getMetaData().getAllDatabases(),
+ metaDataContexts.getMetaData().getGlobalResourceMetaData(), metaDataContexts.getMetaData().getGlobalRuleMetaData(), metaDataContexts.getMetaData().getProps());
+ metaDataContexts.setMetaData(toBeChangedMetaData);
+ metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService, toBeChangedMetaData));
}
// Optimize string comparison rule type.
@@ -81,7 +81,7 @@ public final class GlobalConfigurationManager {
if (!"transaction".equals(Objects.requireNonNull(yamlRuleConfig.getClass().getAnnotation(RepositoryTupleEntity.class)).value())) {
return;
}
- metaDataContexts.get().getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class).ifPresent(TransactionRule::close);
+ metaDataContexts.getMetaData().getGlobalRuleMetaData().findSingleRule(TransactionRule.class).ifPresent(TransactionRule::close);
}
/**
@@ -90,12 +90,9 @@ public final class GlobalConfigurationManager {
* @param props properties to be altered
*/
public synchronized void alterProperties(final Properties props) {
- ShardingSphereMetaData toBeChangedMetaData = new ShardingSphereMetaData(metaDataContexts.get().getMetaData().getAllDatabases(),
- metaDataContexts.get().getMetaData().getGlobalResourceMetaData(), metaDataContexts.get().getMetaData().getGlobalRuleMetaData(), new ConfigurationProperties(props));
- metaDataContexts.set(newMetaDataContexts(toBeChangedMetaData));
- }
-
- private MetaDataContexts newMetaDataContexts(final ShardingSphereMetaData metaData) {
- return new MetaDataContexts(metaData, ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData));
+ ShardingSphereMetaData toBeChangedMetaData = new ShardingSphereMetaData(metaDataContexts.getMetaData().getAllDatabases(),
+ metaDataContexts.getMetaData().getGlobalResourceMetaData(), metaDataContexts.getMetaData().getGlobalRuleMetaData(), new ConfigurationProperties(props));
+ metaDataContexts.setMetaData(toBeChangedMetaData);
+ metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService, toBeChangedMetaData));
}
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
index 4811f281365..7c6a5ec3d16 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/RuleItemManager.java
@@ -20,28 +20,27 @@ package org.apache.shardingsphere.mode.metadata.manager;
import com.google.common.base.Preconditions;
import org.apache.shardingsphere.infra.config.rule.RuleConfiguration;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
-import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
-import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import org.apache.shardingsphere.mode.spi.rule.RuleItemConfigurationChangedProcessor;
+import org.apache.shardingsphere.mode.spi.rule.item.alter.AlterRuleItem;
+import org.apache.shardingsphere.mode.spi.rule.item.drop.DropRuleItem;
import java.sql.SQLException;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Rule item manager.
*/
public class RuleItemManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final DatabaseRuleConfigurationManager ruleConfigManager;
private final MetaDataPersistService metaDataPersistService;
- public RuleItemManager(final AtomicReference<MetaDataContexts> metaDataContexts, final PersistRepository repository, final DatabaseRuleConfigurationManager ruleConfigManager) {
+ public RuleItemManager(final MetaDataContexts metaDataContexts, final PersistRepository repository, final DatabaseRuleConfigurationManager ruleConfigManager) {
this.metaDataContexts = metaDataContexts;
this.ruleConfigManager = ruleConfigManager;
metaDataPersistService = new MetaDataPersistService(repository);
@@ -61,7 +60,7 @@ public class RuleItemManager {
String yamlContent = metaDataPersistService.getMetaDataVersionPersistService()
.getVersionPathByActiveVersion(alterRuleItem.getActiveVersionKey(), alterRuleItem.getActiveVersion());
String databaseName = alterRuleItem.getDatabaseName();
- RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
+ RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
synchronized (this) {
processor.changeRuleItemConfiguration(alterRuleItem, currentRuleConfig, processor.swapRuleItemConfiguration(alterRuleItem, yamlContent));
ruleConfigManager.alterRuleConfiguration(databaseName, currentRuleConfig);
@@ -77,9 +76,9 @@ public class RuleItemManager {
@SuppressWarnings({"rawtypes", "unchecked"})
public void dropRuleItem(final DropRuleItem dropRuleItem) throws SQLException {
String databaseName = dropRuleItem.getDatabaseName();
- Preconditions.checkState(metaDataContexts.get().getMetaData().containsDatabase(databaseName), "No database '%s' exists.", databaseName);
+ Preconditions.checkState(metaDataContexts.getMetaData().containsDatabase(databaseName), "No database '%s' exists.", databaseName);
RuleItemConfigurationChangedProcessor processor = TypedSPILoader.getService(RuleItemConfigurationChangedProcessor.class, dropRuleItem.getType());
- RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.get().getMetaData().getDatabase(databaseName));
+ RuleConfiguration currentRuleConfig = processor.findRuleConfiguration(metaDataContexts.getMetaData().getDatabase(databaseName));
synchronized (this) {
processor.dropRuleItemConfiguration(dropRuleItem, currentRuleConfig);
ruleConfigManager.dropRuleConfiguration(databaseName, currentRuleConfig);
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
index 13f349d9df0..55259c61395 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManager.java
@@ -36,18 +36,17 @@ import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import java.util.Collections;
import java.util.Optional;
-import java.util.concurrent.atomic.AtomicReference;
/**
* Resource meta data manager.
*/
public final class SchemaMetaDataManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final MetaDataPersistService metaDataPersistService;
- public SchemaMetaDataManager(final AtomicReference<MetaDataContexts> metaDataContexts, final PersistRepository repository) {
+ public SchemaMetaDataManager(final MetaDataContexts metaDataContexts, final PersistRepository repository) {
this.metaDataContexts = metaDataContexts;
metaDataPersistService = new MetaDataPersistService(repository);
}
@@ -58,13 +57,13 @@ public final class SchemaMetaDataManager {
* @param databaseName to be added database name
*/
public synchronized void addDatabase(final String databaseName) {
- if (metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
+ if (metaDataContexts.getMetaData().containsDatabase(databaseName)) {
return;
}
- DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), metaDataContexts.get().getMetaData().getProps());
- metaDataContexts.get().getMetaData().addDatabase(databaseName, protocolType, metaDataContexts.get().getMetaData().getProps());
- ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
- metaDataContexts.set(new MetaDataContexts(metaData, ShardingSphereStatisticsFactory.create(metaDataPersistService, metaData)));
+ DatabaseType protocolType = DatabaseTypeEngine.getProtocolType(Collections.emptyMap(), metaDataContexts.getMetaData().getProps());
+ metaDataContexts.getMetaData().addDatabase(databaseName, protocolType, metaDataContexts.getMetaData().getProps());
+ metaDataContexts.setMetaData(metaDataContexts.getMetaData());
+ metaDataContexts.setStatistics(ShardingSphereStatisticsFactory.create(metaDataPersistService, metaDataContexts.getMetaData()));
}
/**
@@ -73,10 +72,10 @@ public final class SchemaMetaDataManager {
* @param databaseName to be dropped database name
*/
public synchronized void dropDatabase(final String databaseName) {
- if (!metaDataContexts.get().getMetaData().containsDatabase(databaseName)) {
+ if (!metaDataContexts.getMetaData().containsDatabase(databaseName)) {
return;
}
- metaDataContexts.get().getMetaData().dropDatabase(metaDataContexts.get().getMetaData().getDatabase(databaseName).getName());
+ metaDataContexts.getMetaData().dropDatabase(metaDataContexts.getMetaData().getDatabase(databaseName).getName());
}
/**
@@ -86,7 +85,7 @@ public final class SchemaMetaDataManager {
* @param schemaName to be added schema name
*/
public synchronized void addSchema(final String databaseName, final String schemaName) {
- ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
if (database.containsSchema(schemaName)) {
return;
@@ -102,7 +101,7 @@ public final class SchemaMetaDataManager {
* @param schemaName to be dropped schema name
*/
public synchronized void dropSchema(final String databaseName, final String schemaName) {
- ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
if (!database.containsSchema(schemaName)) {
return;
@@ -120,7 +119,7 @@ public final class SchemaMetaDataManager {
* @param toBeChangedView to be changed view
*/
public synchronized void alterSchema(final String databaseName, final String schemaName, final ShardingSphereTable toBeChangedTable, final ShardingSphereView toBeChangedView) {
- ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
return;
}
@@ -140,7 +139,7 @@ public final class SchemaMetaDataManager {
* @param toBeDeletedViewName to be deleted view name
*/
public synchronized void alterSchema(final String databaseName, final String schemaName, final String toBeDeletedTableName, final String toBeDeletedViewName) {
- ShardingSphereMetaData metaData = metaDataContexts.get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData();
if (!metaData.getDatabase(databaseName).containsSchema(schemaName)) {
return;
}
@@ -152,7 +151,7 @@ public final class SchemaMetaDataManager {
}
private void alterTable(final String databaseName, final String schemaName, final ShardingSphereTable beBoChangedTable) {
- ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName);
if (TableRefreshUtils.isSingleTable(beBoChangedTable.getName(), database)) {
database.reloadRules();
}
@@ -160,7 +159,7 @@ public final class SchemaMetaDataManager {
}
private void alterView(final String databaseName, final String schemaName, final ShardingSphereView beBoChangedView) {
- ShardingSphereDatabase database = metaDataContexts.get().getMetaData().getDatabase(databaseName);
+ ShardingSphereDatabase database = metaDataContexts.getMetaData().getDatabase(databaseName);
if (TableRefreshUtils.isSingleTable(beBoChangedView.getName(), database)) {
database.reloadRules();
}
@@ -168,14 +167,14 @@ public final class SchemaMetaDataManager {
}
private void dropTable(final String databaseName, final String schemaName, final String toBeDeletedTableName) {
- metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
- metaDataContexts.get().getMetaData().getDatabase(databaseName)
+ metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeTable(toBeDeletedTableName);
+ metaDataContexts.getMetaData().getDatabase(databaseName)
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.remove(schemaName, toBeDeletedTableName));
}
private void dropView(final String databaseName, final String schemaName, final String toBeDeletedViewName) {
- metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
- metaDataContexts.get().getMetaData().getDatabase(databaseName)
+ metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).removeView(toBeDeletedViewName);
+ metaDataContexts.getMetaData().getDatabase(databaseName)
.getRuleMetaData().getAttributes(MutableDataNodeRuleAttribute.class).forEach(each -> each.remove(schemaName, toBeDeletedViewName));
}
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
index 773e72b0593..c0c2bb94d48 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/ShardingSphereDatabaseDataManager.java
@@ -28,7 +28,6 @@ import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import java.util.ArrayList;
import java.util.List;
-import java.util.concurrent.atomic.AtomicReference;
/**
* ShardingSphere database data manager.
@@ -36,7 +35,7 @@ import java.util.concurrent.atomic.AtomicReference;
@RequiredArgsConstructor
public final class ShardingSphereDatabaseDataManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
/**
* Add ShardingSphere database data.
@@ -44,10 +43,10 @@ public final class ShardingSphereDatabaseDataManager {
* @param databaseName database name
*/
public synchronized void addShardingSphereDatabaseData(final String databaseName) {
- if (metaDataContexts.get().getStatistics().containsDatabase(databaseName)) {
+ if (metaDataContexts.getStatistics().containsDatabase(databaseName)) {
return;
}
- metaDataContexts.get().getStatistics().putDatabase(databaseName, new ShardingSphereDatabaseData());
+ metaDataContexts.getStatistics().putDatabase(databaseName, new ShardingSphereDatabaseData());
}
/**
@@ -56,10 +55,10 @@ public final class ShardingSphereDatabaseDataManager {
* @param databaseName database name
*/
public synchronized void dropShardingSphereDatabaseData(final String databaseName) {
- if (!metaDataContexts.get().getStatistics().containsDatabase(databaseName)) {
+ if (!metaDataContexts.getStatistics().containsDatabase(databaseName)) {
return;
}
- metaDataContexts.get().getStatistics().dropDatabase(databaseName);
+ metaDataContexts.getStatistics().dropDatabase(databaseName);
}
/**
@@ -69,10 +68,10 @@ public final class ShardingSphereDatabaseDataManager {
* @param schemaName schema name
*/
public synchronized void addShardingSphereSchemaData(final String databaseName, final String schemaName) {
- if (metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
+ if (metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
return;
}
- metaDataContexts.get().getStatistics().getDatabase(databaseName).putSchema(schemaName, new ShardingSphereSchemaData());
+ metaDataContexts.getStatistics().getDatabase(databaseName).putSchema(schemaName, new ShardingSphereSchemaData());
}
/**
@@ -82,7 +81,7 @@ public final class ShardingSphereDatabaseDataManager {
* @param schemaName schema name
*/
public synchronized void dropShardingSphereSchemaData(final String databaseName, final String schemaName) {
- ShardingSphereDatabaseData databaseData = metaDataContexts.get().getStatistics().getDatabase(databaseName);
+ ShardingSphereDatabaseData databaseData = metaDataContexts.getStatistics().getDatabase(databaseName);
if (null == databaseData || !databaseData.containsSchema(schemaName)) {
return;
}
@@ -97,13 +96,13 @@ public final class ShardingSphereDatabaseDataManager {
* @param tableName table name
*/
public synchronized void addShardingSphereTableData(final String databaseName, final String schemaName, final String tableName) {
- if (!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || !metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
+ if (!metaDataContexts.getStatistics().containsDatabase(databaseName) || !metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
return;
}
- if (metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
+ if (metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
return;
}
- metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).putTable(tableName, new ShardingSphereTableData(tableName));
+ metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).putTable(tableName, new ShardingSphereTableData(tableName));
}
/**
@@ -114,10 +113,10 @@ public final class ShardingSphereDatabaseDataManager {
* @param tableName table name
*/
public synchronized void dropShardingSphereTableData(final String databaseName, final String schemaName, final String tableName) {
- if (!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || !metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
+ if (!metaDataContexts.getStatistics().containsDatabase(databaseName) || !metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)) {
return;
}
- metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).removeTable(tableName);
+ metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).removeTable(tableName);
}
/**
@@ -129,16 +128,16 @@ public final class ShardingSphereDatabaseDataManager {
* @param yamlRowData yaml row data
*/
public synchronized void alterShardingSphereRowData(final String databaseName, final String schemaName, final String tableName, final YamlShardingSphereRowData yamlRowData) {
- if (!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || !metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)
- || !metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
+ if (!metaDataContexts.getStatistics().containsDatabase(databaseName) || !metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)
+ || !metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
return;
}
- if (!metaDataContexts.get().getMetaData().containsDatabase(databaseName) || !metaDataContexts.get().getMetaData().getDatabase(databaseName).containsSchema(schemaName)
- || !metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
+ if (!metaDataContexts.getMetaData().containsDatabase(databaseName) || !metaDataContexts.getMetaData().getDatabase(databaseName).containsSchema(schemaName)
+ || !metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
return;
}
- ShardingSphereTableData tableData = metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName);
- List<ShardingSphereColumn> columns = new ArrayList<>(metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getAllColumns());
+ ShardingSphereTableData tableData = metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName);
+ List<ShardingSphereColumn> columns = new ArrayList<>(metaDataContexts.getMetaData().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getAllColumns());
tableData.getRows().add(new YamlShardingSphereRowDataSwapper(columns).swapToObject(yamlRowData));
}
@@ -151,10 +150,10 @@ public final class ShardingSphereDatabaseDataManager {
* @param uniqueKey row uniqueKey
*/
public synchronized void deleteShardingSphereRowData(final String databaseName, final String schemaName, final String tableName, final String uniqueKey) {
- if (!metaDataContexts.get().getStatistics().containsDatabase(databaseName) || !metaDataContexts.get().getStatistics().getDatabase(databaseName).containsSchema(schemaName)
- || !metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
+ if (!metaDataContexts.getStatistics().containsDatabase(databaseName) || !metaDataContexts.getStatistics().getDatabase(databaseName).containsSchema(schemaName)
+ || !metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).containsTable(tableName)) {
return;
}
- metaDataContexts.get().getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getRows().removeIf(each -> uniqueKey.equals(each.getUniqueKey()));
+ metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getRows().removeIf(each -> uniqueKey.equals(each.getUniqueKey()));
}
}
diff --git a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
index 9791b5e0a93..0631aaab6e4 100644
--- a/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
+++ b/mode/core/src/main/java/org/apache/shardingsphere/mode/metadata/manager/StorageUnitManager.java
@@ -24,16 +24,15 @@ import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
import org.apache.shardingsphere.infra.metadata.database.schema.model.ShardingSphereSchema;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
-import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.mode.metadata.MetaDataContextsFactory;
+import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.spi.repository.PersistRepository;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Collections;
import java.util.Map;
-import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/**
@@ -42,7 +41,7 @@ import java.util.stream.Collectors;
@Slf4j
public final class StorageUnitManager {
- private final AtomicReference<MetaDataContexts> metaDataContexts;
+ private final MetaDataContexts metaDataContexts;
private final ComputeNodeInstanceContext computeNodeInstanceContext;
@@ -50,7 +49,7 @@ public final class StorageUnitManager {
private final MetaDataPersistService metaDataPersistService;
- public StorageUnitManager(final AtomicReference<MetaDataContexts> metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
+ public StorageUnitManager(final MetaDataContexts metaDataContexts, final ComputeNodeInstanceContext computeNodeInstanceContext,
final PersistRepository repository, final ResourceSwitchManager resourceSwitchManager) {
this.metaDataContexts = metaDataContexts;
this.computeNodeInstanceContext = computeNodeInstanceContext;
@@ -67,7 +66,7 @@ public final class StorageUnitManager {
public synchronized void registerStorageUnit(final String databaseName, final Map<String, DataSourcePoolProperties> propsMap) {
try {
closeStaleRules(databaseName);
- SwitchingResource switchingResource = resourceSwitchManager.switchByRegisterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap);
+ SwitchingResource switchingResource = resourceSwitchManager.switchByRegisterStorageUnit(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap);
buildNewMetaDataContext(databaseName, switchingResource);
} catch (final SQLException ex) {
log.error("Alter database: {} register storage unit failed", databaseName, ex);
@@ -83,7 +82,7 @@ public final class StorageUnitManager {
public synchronized void alterStorageUnit(final String databaseName, final Map<String, DataSourcePoolProperties> propsMap) {
try {
closeStaleRules(databaseName);
- SwitchingResource switchingResource = resourceSwitchManager.switchByAlterStorageUnit(metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap);
+ SwitchingResource switchingResource = resourceSwitchManager.switchByAlterStorageUnit(metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), propsMap);
buildNewMetaDataContext(databaseName, switchingResource);
} catch (final SQLException ex) {
log.error("Alter database: {} register storage unit failed", databaseName, ex);
@@ -100,7 +99,7 @@ public final class StorageUnitManager {
try {
closeStaleRules(databaseName);
SwitchingResource switchingResource = resourceSwitchManager.switchByUnregisterStorageUnit(
- metaDataContexts.get().getMetaData().getDatabase(databaseName).getResourceMetaData(), Collections.singletonList(storageUnitName));
+ metaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), Collections.singletonList(storageUnitName));
buildNewMetaDataContext(databaseName, switchingResource);
} catch (final SQLException ex) {
log.error("Alter database: {} register storage unit failed", databaseName, ex);
@@ -109,9 +108,10 @@ public final class StorageUnitManager {
private void buildNewMetaDataContext(final String databaseName, final SwitchingResource switchingResource) throws SQLException {
MetaDataContexts reloadMetaDataContexts = MetaDataContextsFactory.createBySwitchResource(
- databaseName, true, switchingResource, metaDataContexts.get(), metaDataPersistService, computeNodeInstanceContext);
- metaDataContexts.set(reloadMetaDataContexts);
- metaDataContexts.get().getMetaData().putDatabase(buildDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
+ databaseName, true, switchingResource, metaDataContexts, metaDataPersistService, computeNodeInstanceContext);
+ metaDataContexts.setMetaData(reloadMetaDataContexts.getMetaData());
+ metaDataContexts.setStatistics(reloadMetaDataContexts.getStatistics());
+ metaDataContexts.getMetaData().putDatabase(buildDatabase(reloadMetaDataContexts.getMetaData().getDatabase(databaseName)));
switchingResource.closeStaleDataSources();
}
@@ -127,7 +127,7 @@ public final class StorageUnitManager {
@SneakyThrows(Exception.class)
private void closeStaleRules(final String databaseName) {
- for (ShardingSphereRule each : metaDataContexts.get().getMetaData().getDatabase(databaseName).getRuleMetaData().getRules()) {
+ for (ShardingSphereRule each : metaDataContexts.getMetaData().getDatabase(databaseName).getRuleMetaData().getRules()) {
if (each instanceof AutoCloseable) {
((AutoCloseable) each).close();
}
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 f812b2705f7..e5ebce27d12 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
@@ -117,13 +117,6 @@ class ContextManagerTest {
return result;
}
- @Test
- void assertRenewMetaDataContexts() {
- MetaDataContexts contexts = mock(MetaDataContexts.class);
- contextManager.renewMetaDataContexts(contexts);
- assertThat(contextManager.getMetaDataContexts(), is(contexts));
- }
-
@Test
void assertGetDatabase() {
assertNotNull(contextManager.getDatabase("foo_db"));
diff --git a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
index 1a2fc546f6a..b5b1e318b82 100644
--- a/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
+++ b/mode/core/src/test/java/org/apache/shardingsphere/mode/metadata/manager/SchemaMetaDataManagerTest.java
@@ -38,7 +38,6 @@ import org.mockito.quality.Strictness;
import java.sql.Types;
import java.util.Collections;
-import java.util.concurrent.atomic.AtomicReference;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -68,7 +67,7 @@ class SchemaMetaDataManagerTest {
when(metaDataContexts.getMetaData().containsDatabase("foo_db")).thenReturn(true);
when(metaDataContexts.getMetaData().getDatabase("foo_db")).thenReturn(database);
when(metaDataContexts.getMetaData().getAllDatabases()).thenReturn(Collections.singleton(database));
- schemaMetaDataManager = new SchemaMetaDataManager(new AtomicReference<>(metaDataContexts), mock(PersistRepository.class));
+ schemaMetaDataManager = new SchemaMetaDataManager(metaDataContexts, mock(PersistRepository.class));
}
private ShardingSphereDatabase mockDatabase() {
diff --git a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
index c4bfe5da611..16fe58ff481 100644
--- a/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
+++ b/mode/type/cluster/core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistService.java
@@ -75,7 +75,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@Override
public void dropDatabase(final String databaseName) {
- String droppedDatabaseName = metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName();
+ String droppedDatabaseName = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName();
listenerAssistedPersistService.persistDatabaseNameListenerAssisted(droppedDatabaseName, ListenerAssistedType.DROP_DATABASE);
metaDataPersistService.getDatabaseMetaDataFacade().getDatabase().drop(droppedDatabaseName);
}
@@ -89,7 +89,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
String databaseName = alterSchemaPOJO.getDatabaseName();
String schemaName = alterSchemaPOJO.getSchemaName();
- ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getSchema(schemaName);
+ ShardingSphereSchema schema = metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getSchema(schemaName);
if (schema.isEmpty()) {
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, alterSchemaPOJO.getRenameSchemaName());
}
@@ -116,7 +116,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@Override
public void registerStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
- MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts();
Map<StorageNode, DataSource> newDataSources = new HashMap<>(toBeRegisteredProps.size());
try {
SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager()
@@ -134,7 +134,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@Override
public void alterStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
- MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts();
Map<StorageNode, DataSource> newDataSources = new HashMap<>(toBeUpdatedProps.size());
try {
SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager()
@@ -155,7 +155,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@Override
public void unregisterStorageUnits(final String databaseName, final Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
for (String each : getToBeDroppedResourceNames(databaseName, toBeDroppedStorageUnitNames)) {
- MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts();
SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager()
.createByUnregisterStorageUnit(originalMetaDataContexts.getMetaData().getDatabase(databaseName).getResourceMetaData(), Collections.singletonList(each));
MetaDataContexts reloadMetaDataContexts = MetaDataContextsFactory.createBySwitchResource(databaseName, false,
@@ -209,7 +209,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
if (null == toBeAlteredRuleConfig) {
return;
}
- MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts();
Collection<MetaDataVersion> metaDataVersions = metaDataPersistService.getDatabaseRulePersistService().persist(databaseName, Collections.singleton(toBeAlteredRuleConfig));
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
afterRuleConfigurationAltered(databaseName, originalMetaDataContexts);
@@ -218,7 +218,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@SneakyThrows(InterruptedException.class)
private void afterRuleConfigurationAltered(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
Thread.sleep(3000L);
- MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts();
metaDataPersistService.persistReloadDatabaseByAlter(
databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName), originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
@@ -232,7 +232,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@Override
public void removeRuleConfiguration(final String databaseName, final String ruleName) {
- MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts();
metaDataPersistService.getDatabaseRulePersistService().delete(databaseName, ruleName);
afterRuleConfigurationDropped(databaseName, originalMetaDataContexts);
}
@@ -240,7 +240,7 @@ public final class ClusterMetaDataManagerPersistService implements MetaDataManag
@SneakyThrows(InterruptedException.class)
private void afterRuleConfigurationDropped(final String databaseName, final MetaDataContexts originalMetaDataContexts) {
Thread.sleep(3000L);
- MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts().get();
+ MetaDataContexts reloadMetaDataContexts = metaDataContextManager.getMetaDataContexts();
metaDataPersistService.persistReloadDatabaseByDrop(
databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName), originalMetaDataContexts.getMetaData().getDatabase(databaseName));
}
diff --git a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
index 869eb509b05..e8e9aff1b92 100644
--- a/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
+++ b/mode/type/cluster/core/src/test/java/org/apache/shardingsphere/mode/manager/cluster/persist/service/ClusterMetaDataManagerPersistServiceTest.java
@@ -84,7 +84,7 @@ class ClusterMetaDataManagerPersistServiceTest {
@Test
void assertDropDatabase() {
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
+ when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getName()).thenReturn("foo_db");
metaDataManagerPersistService.dropDatabase("foo_db");
verify(listenerAssistedPersistService).persistDatabaseNameListenerAssisted("foo_db", ListenerAssistedType.DROP_DATABASE);
verify(metaDataPersistService.getDatabaseMetaDataFacade().getDatabase()).drop("foo_db");
@@ -112,7 +112,7 @@ class ClusterMetaDataManagerPersistServiceTest {
}
private void assertAlterSchema(final ShardingSphereSchema schema) {
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
+ when(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase("foo_db").getSchema("foo_schema")).thenReturn(schema);
metaDataManagerPersistService.alterSchema(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds")));
verify(metaDataPersistService.getDatabaseMetaDataFacade().getTable()).persist(eq("foo_db"), eq("bar_schema"), anyCollection());
verify(metaDataPersistService.getDatabaseMetaDataFacade().getView()).persist(eq("foo_db"), eq("bar_schema"), anyCollection());
diff --git a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
index 56482b172c6..a5fbf412c1e 100644
--- a/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
+++ b/mode/type/standalone/core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistService.java
@@ -91,7 +91,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void createSchema(final String databaseName, final String schemaName) {
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
database.addSchema(new ShardingSphereSchema(schemaName));
metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED));
@@ -100,7 +100,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void alterSchema(final AlterSchemaPOJO alterSchemaPOJO) {
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(alterSchemaPOJO.getDatabaseName());
putSchemaMetaData(database, alterSchemaPOJO.getSchemaName(), alterSchemaPOJO.getRenameSchemaName(), alterSchemaPOJO.getLogicDataSourceName());
removeSchemaMetaData(database, alterSchemaPOJO.getSchemaName());
@@ -193,7 +193,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
public void dropSchema(final String databaseName, final Collection<String> schemaNames) {
Collection<String> tobeRemovedTables = new LinkedList<>();
Collection<String> tobeRemovedSchemas = new LinkedList<>();
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
for (String each : schemaNames) {
ShardingSphereSchema schema = new ShardingSphereSchema(each, database.getSchema(each).getAllTables(), database.getSchema(each).getAllViews());
@@ -209,7 +209,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
public void alterSchemaMetaData(final AlterSchemaMetaDataPOJO alterSchemaMetaDataPOJO) {
String databaseName = alterSchemaMetaDataPOJO.getDatabaseName();
String schemaName = alterSchemaMetaDataPOJO.getSchemaName();
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
addDataNode(database, alterSchemaMetaDataPOJO.getLogicDataSourceName(), schemaName, alterSchemaMetaDataPOJO.getAlteredTables(), alterSchemaMetaDataPOJO.getAlteredViews());
removeDataNode(database, schemaName, alterSchemaMetaDataPOJO.getDroppedTables(), alterSchemaMetaDataPOJO.getDroppedViews());
@@ -222,14 +222,14 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void registerStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeRegisteredProps) throws SQLException {
- SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts().get()
+ SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByRegisterStorageUnit(metaDataContextManager.getMetaDataContexts()
.getMetaData().getDatabase(databaseName).getResourceMetaData(), toBeRegisteredProps);
ShardingSphereDatabase changedDatabase = MetaDataContextsFactory.createChangedDatabase(databaseName, false, switchingResource, null,
- metaDataContextManager.getMetaDataContexts().get(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
- metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
- metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
- .forEach(each -> ((GlobalRule) each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(), GlobalRuleChangedType.DATABASE_CHANGED));
- metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getAllSchemas()
+ metaDataContextManager.getMetaDataContexts(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+ metaDataContextManager.getMetaDataContexts().getMetaData().putDatabase(changedDatabase);
+ metaDataContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+ .forEach(each -> ((GlobalRule) each).refresh(metaDataContextManager.getMetaDataContexts().getMetaData().getAllDatabases(), GlobalRuleChangedType.DATABASE_CHANGED));
+ metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getAllSchemas()
.forEach(each -> {
if (each.isEmpty()) {
metaDataPersistService.getDatabaseMetaDataFacade().getSchema().add(databaseName, each.getName());
@@ -244,13 +244,13 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void alterStorageUnits(final String databaseName, final Map<String, DataSourcePoolProperties> toBeUpdatedProps) throws SQLException {
- SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
+ SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByAlterStorageUnit(metaDataContextManager.getMetaDataContexts().getMetaData()
.getDatabase(databaseName).getResourceMetaData(), toBeUpdatedProps);
ShardingSphereDatabase changedDatabase = MetaDataContextsFactory.createChangedDatabase(databaseName, true, switchingResource, null,
- metaDataContextManager.getMetaDataContexts().get(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
- metaDataContextManager.getMetaDataContexts().get().getMetaData().putDatabase(changedDatabase);
- metaDataContextManager.getMetaDataContexts().get().getMetaData().getGlobalRuleMetaData().getRules()
- .forEach(each -> ((GlobalRule) each).refresh(metaDataContextManager.getMetaDataContexts().get().getMetaData().getAllDatabases(), GlobalRuleChangedType.DATABASE_CHANGED));
+ metaDataContextManager.getMetaDataContexts(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+ metaDataContextManager.getMetaDataContexts().getMetaData().putDatabase(changedDatabase);
+ metaDataContextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().getRules()
+ .forEach(each -> ((GlobalRule) each).refresh(metaDataContextManager.getMetaDataContexts().getMetaData().getAllDatabases(), GlobalRuleChangedType.DATABASE_CHANGED));
DataSourceUnitPersistService dataSourceService = metaDataPersistService.getDataSourceUnitService();
metaDataPersistService.getMetaDataVersionPersistService()
.switchActiveVersion(dataSourceService.persist(databaseName, toBeUpdatedProps));
@@ -260,14 +260,14 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void unregisterStorageUnits(final String databaseName, final Collection<String> toBeDroppedStorageUnitNames) throws SQLException {
- SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByUnregisterStorageUnit(metaDataContextManager.getMetaDataContexts().get().getMetaData()
+ SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager().switchByUnregisterStorageUnit(metaDataContextManager.getMetaDataContexts().getMetaData()
.getDatabase(databaseName).getResourceMetaData(), toBeDroppedStorageUnitNames);
MetaDataContexts reloadMetaDataContexts = MetaDataContextsFactory.createBySwitchResource(databaseName, false, switchingResource,
- metaDataContextManager.getMetaDataContexts().get(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
+ metaDataContextManager.getMetaDataContexts(), metaDataPersistService, metaDataContextManager.getComputeNodeInstanceContext());
metaDataPersistService.persistReloadDatabaseByDrop(databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
- metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
+ metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
metaDataContextManager.dropSchemas(databaseName, reloadMetaDataContexts.getMetaData().getDatabase(databaseName),
- metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName));
+ metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName));
metaDataContextManager.renewMetaDataContexts(reloadMetaDataContexts);
switchingResource.closeStaleDataSources();
clearServiceCache();
@@ -277,7 +277,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
public void alterSingleRuleConfiguration(final String databaseName, final Collection<RuleConfiguration> ruleConfigs) throws SQLException {
ruleConfigs.removeIf(each -> !each.getClass().isAssignableFrom(SingleRuleConfiguration.class));
Collection<MetaDataVersion> metaDataVersions = metaDataPersistService.getDatabaseRulePersistService()
- .persist(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(), ruleConfigs);
+ .persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), ruleConfigs);
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
metaDataContextManager.getDatabaseRuleConfigurationManager().alterRuleConfiguration(databaseName, ruleConfigs.iterator().next());
clearServiceCache();
@@ -289,7 +289,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
return;
}
Collection<MetaDataVersion> metaDataVersions = metaDataPersistService.getDatabaseRulePersistService()
- .persist(metaDataContextManager.getMetaDataContexts().get().getMetaData().getDatabase(databaseName).getName(), Collections.singleton(toBeAlteredRuleConfig));
+ .persist(metaDataContextManager.getMetaDataContexts().getMetaData().getDatabase(databaseName).getName(), Collections.singleton(toBeAlteredRuleConfig));
metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions);
for (MetaDataVersion each : metaDataVersions) {
// TODO double check here, when ruleItemEvent not existed or not AlterRuleItemEvent @haoran
@@ -343,7 +343,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void createTable(final String databaseName, final String schemaName, final ShardingSphereTable table, final String logicDataSourceName) {
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
addTableToDataNode(database, schemaName, logicDataSourceName, table);
metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED));
@@ -352,7 +352,7 @@ public final class StandaloneMetaDataManagerPersistService implements MetaDataMa
@Override
public void dropTables(final String databaseName, final String schemaName, final Collection<String> tableNames) {
- ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().get().getMetaData();
+ ShardingSphereMetaData metaData = metaDataContextManager.getMetaDataContexts().getMetaData();
ShardingSphereDatabase database = metaData.getDatabase(databaseName);
removeTablesToDataNode(database, schemaName, tableNames);
metaData.getGlobalRuleMetaData().getRules().forEach(each -> ((GlobalRule) each).refresh(metaData.getAllDatabases(), GlobalRuleChangedType.SCHEMA_CHANGED));
diff --git a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
index 22c95c643e3..37b4ae703c3 100644
--- a/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
+++ b/mode/type/standalone/core/src/test/java/org/apache/shardingsphere/mode/manager/standalone/persist/service/StandaloneMetaDataManagerPersistServiceTest.java
@@ -104,7 +104,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties()));
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+ when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
metaDataManagerPersistService.alterSchema(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds")));
@@ -121,7 +121,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
when(database.getSchema("foo_schema")).thenReturn(new ShardingSphereSchema("foo_schema"));
when(database.getSchema("bar_schema")).thenReturn(new ShardingSphereSchema("bar_schema"));
ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties()));
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+ when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
DatabaseMetaDataPersistFacade databaseMetaDataFacade = mock(DatabaseMetaDataPersistFacade.class, RETURNS_DEEP_STUBS);
when(metaDataPersistService.getDatabaseMetaDataFacade()).thenReturn(databaseMetaDataFacade);
metaDataManagerPersistService.alterSchema(new AlterSchemaPOJO("foo_db", "foo_schema", "bar_schema", Collections.singleton("foo_ds")));
@@ -136,7 +136,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class, RETURNS_DEEP_STUBS);
when(database.getName()).thenReturn("foo_db");
ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties()));
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+ when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
metaDataManagerPersistService.dropSchema("foo_db", Collections.singleton("foo_schema"));
verify(database).dropSchema(any());
}
@@ -168,7 +168,7 @@ class StandaloneMetaDataManagerPersistServiceTest {
ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
when(database.getName()).thenReturn("foo_db");
ShardingSphereMetaData metaData = new ShardingSphereMetaData(Collections.singleton(database), mock(), mock(), new ConfigurationProperties(new Properties()));
- when(metaDataContextManager.getMetaDataContexts().get().getMetaData()).thenReturn(metaData);
+ when(metaDataContextManager.getMetaDataContexts().getMetaData()).thenReturn(metaData);
RuleConfiguration ruleConfig = mock(RuleConfiguration.class, RETURNS_DEEP_STUBS);
Collection<MetaDataVersion> metaDataVersion = Collections.singleton(mock(MetaDataVersion.class));
when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);