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 <[email protected]>
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);