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 22cbe2a9500f4..e02a1e7a5aefc 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 java.sql.SQLException; import java.util.Collections; import java.util.Map; -import java.util.concurrent.atomic.AtomicReference; /** * Context manager. @@ -53,7 +52,7 @@ @Slf4j public final class ContextManager implements AutoCloseable { - private final AtomicReference 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().getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE)); @@ -80,24 +79,6 @@ public ContextManager(final MetaDataContexts metaDataContexts, final ComputeNode 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 void reloadSchema(final ShardingSphereDatabase database, final String sch 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 @@ private ShardingSphereSchema loadSchema(final ShardingSphereDatabase database, f */ 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 void reloadTable(final ShardingSphereDatabase database, final String sche 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 @@ private void persistTable(final ShardingSphereDatabase database, final String sc * @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 void close() { 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 1440b2044bddb..a01c303fd4a98 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 @@ -51,7 +51,7 @@ @Slf4j public class MetaDataContextManager { - private final AtomicReference metaDataContexts; + private final MetaDataContexts metaDataContexts; private final ComputeNodeInstanceContext computeNodeInstanceContext; @@ -71,7 +71,7 @@ public class MetaDataContextManager { private final GlobalConfigurationManager globalConfigurationManager; - public MetaDataContextManager(final AtomicReference 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 +101,8 @@ public void dropSchemas(final String databaseName, final ShardingSphereDatabase * @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 +113,9 @@ public void renewMetaDataContexts(final MetaDataContexts metaDataContexts) { 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 +136,9 @@ public void refreshTableMetaData(final ShardingSphereDatabase database) { 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 +150,13 @@ private MetaDataContexts createMetaDataContexts(final ShardingSphereDatabase dat SwitchingResource switchingResource = resourceSwitchManager.switchByAlterStorageUnit(database.getResourceMetaData(), dataSourcePoolPropsFromRegCenter); Collection 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 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 569d038c1701a..af9a45237f903 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 metaData = new AtomicReference<>(); + + private final AtomicReference 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 9f32b360e12f7..20241cf0dd3d5 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.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 @@ */ public final class DatabaseRuleConfigurationManager { - private final AtomicReference metaDataContexts; + private final MetaDataContexts metaDataContexts; private final ComputeNodeInstanceContext computeNodeInstanceContext; private final MetaDataPersistService metaDataPersistService; - public DatabaseRuleConfigurationManager(final AtomicReference 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 DatabaseRuleConfigurationManager(final AtomicReference */ @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 rules = new LinkedList<>(database.getRuleMetaData().getRules()); Optional 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 synchronized void alterRuleConfiguration(final String databaseName, final */ @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 rules = new LinkedList<>(database.getRuleMetaData().getRules()); Optional 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 synchronized void dropRuleConfiguration(final String databaseName, final private void refreshMetadata(final String databaseName, final Collection 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 getRuleConfigurations(final Collection 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 9d5a1ffd334be..08e8de8823669 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.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 @@ @Slf4j public final class GlobalConfigurationManager { - private final AtomicReference metaDataContexts; + private final MetaDataContexts metaDataContexts; private final MetaDataPersistService metaDataPersistService; - public GlobalConfigurationManager(final AtomicReference metaDataContexts, final PersistRepository repository) { + public GlobalConfigurationManager(final MetaDataContexts metaDataContexts, final PersistRepository repository) { this.metaDataContexts = metaDataContexts; metaDataPersistService = new MetaDataPersistService(repository); } @@ -64,14 +63,15 @@ public synchronized void alterGlobalRuleConfiguration(final RuleConfiguration ru return; } closeStaleTransactionRule(ruleConfig); - Collection rules = new LinkedList<>(metaDataContexts.get().getMetaData().getGlobalRuleMetaData().getRules()); + Collection 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 @@ private void closeStaleTransactionRule(final RuleConfiguration ruleConfig) { 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 @@ private void closeStaleTransactionRule(final RuleConfiguration ruleConfig) { * @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 4811f281365cd..7c6a5ec3d16f3 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 @@ 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; + private final MetaDataContexts metaDataContexts; private final DatabaseRuleConfigurationManager ruleConfigManager; private final MetaDataPersistService metaDataPersistService; - public RuleItemManager(final AtomicReference 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 void alterRuleItem(final AlterRuleItem alterRuleItem) throws SQLException 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 void alterRuleItem(final AlterRuleItem alterRuleItem) throws SQLException @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 13f349d9df08f..55259c6139589 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 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; + private final MetaDataContexts metaDataContexts; private final MetaDataPersistService metaDataPersistService; - public SchemaMetaDataManager(final AtomicReference metaDataContexts, final PersistRepository repository) { + public SchemaMetaDataManager(final MetaDataContexts metaDataContexts, final PersistRepository repository) { this.metaDataContexts = metaDataContexts; metaDataPersistService = new MetaDataPersistService(repository); } @@ -58,13 +57,13 @@ public SchemaMetaDataManager(final AtomicReference metaDataCon * @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 synchronized void addDatabase(final String databaseName) { * @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 synchronized void dropDatabase(final String databaseName) { * @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 synchronized void addSchema(final String databaseName, final String schem * @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 synchronized void dropSchema(final String databaseName, final String sche * @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 synchronized void alterSchema(final String databaseName, final String sch * @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 synchronized void alterSchema(final String databaseName, final String sch } 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 @@ private void alterTable(final String databaseName, final String schemaName, fina } 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 @@ private void alterView(final String databaseName, final String schemaName, final } 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 773e72b0593f8..c0c2bb94d4891 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 java.util.ArrayList; import java.util.List; -import java.util.concurrent.atomic.AtomicReference; /** * ShardingSphere database data manager. @@ -36,7 +35,7 @@ @RequiredArgsConstructor public final class ShardingSphereDatabaseDataManager { - private final AtomicReference 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 synchronized void addShardingSphereDatabaseData(final String databaseName * @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 synchronized void dropShardingSphereDatabaseData(final String databaseNam * @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 synchronized void addShardingSphereSchemaData(final String databaseName, * @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 synchronized void dropShardingSphereSchemaData(final String databaseName, * @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 synchronized void addShardingSphereTableData(final String databaseName, f * @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 synchronized void dropShardingSphereTableData(final String databaseName, * @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 columns = new ArrayList<>(metaDataContexts.get().getMetaData().getDatabase(databaseName).getSchema(schemaName).getTable(tableName).getAllColumns()); + ShardingSphereTableData tableData = metaDataContexts.getStatistics().getDatabase(databaseName).getSchema(schemaName).getTable(tableName); + List 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 synchronized void alterShardingSphereRowData(final String databaseName, f * @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 9791b5e0a9336..0631aaab6e4ec 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.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 @@ @Slf4j public final class StorageUnitManager { - private final AtomicReference 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, 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 StorageUnitManager(final AtomicReference metaDataContex public synchronized void registerStorageUnit(final String databaseName, final Map 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 synchronized void registerStorageUnit(final String databaseName, final Ma public synchronized void alterStorageUnit(final String databaseName, final Map 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 synchronized void unregisterStorageUnit(final String databaseName, final 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 synchronized void unregisterStorageUnit(final String databaseName, final 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 @@ private Collection buildSchemas(final ShardingSphereDataba @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 f812b2705f7a8..e5ebce27d12a6 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 @@ private ShardingSphereDatabase mockDatabase() throws SQLException { 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 1a2fc546f6abf..b5b1e318b8288 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 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 @@ void setUp() { 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 c4bfe5da6116f..16fe58ff481ca 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 void createDatabase(final String databaseName) { @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 void createSchema(final String databaseName, final String schemaName) { 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 void alterSchemaMetaData(final AlterSchemaMetaDataPOJO alterSchemaMetaDat @Override public void registerStorageUnits(final String databaseName, final Map toBeRegisteredProps) throws SQLException { - MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get(); + MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts(); Map newDataSources = new HashMap<>(toBeRegisteredProps.size()); try { SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager() @@ -134,7 +134,7 @@ public void registerStorageUnits(final String databaseName, final Map toBeUpdatedProps) throws SQLException { - MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get(); + MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts(); Map newDataSources = new HashMap<>(toBeUpdatedProps.size()); try { SwitchingResource switchingResource = metaDataContextManager.getResourceSwitchManager() @@ -155,7 +155,7 @@ public void alterStorageUnits(final String databaseName, final Map 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 void alterRuleConfiguration(final String databaseName, final RuleConfigur if (null == toBeAlteredRuleConfig) { return; } - MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts().get(); + MetaDataContexts originalMetaDataContexts = metaDataContextManager.getMetaDataContexts(); Collection metaDataVersions = metaDataPersistService.getDatabaseRulePersistService().persist(databaseName, Collections.singleton(toBeAlteredRuleConfig)); metaDataPersistService.getMetaDataVersionPersistService().switchActiveVersion(metaDataVersions); afterRuleConfigurationAltered(databaseName, originalMetaDataContexts); @@ -218,7 +218,7 @@ public void alterRuleConfiguration(final String databaseName, final RuleConfigur @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 void removeRuleConfigurationItem(final String databaseName, final RuleCon @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 void removeRuleConfiguration(final String databaseName, final String rule @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 869eb509b052c..e8e9aff1b9223 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 @@ void assertCreateDatabase() { @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 @@ void assertAlterEmptySchema() { } 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 56482b172c673..a5fbf412c1e16 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 void dropDatabase(final String databaseName) { @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 void createSchema(final String databaseName, final String schemaName) { @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 @@ private void removeViewsToDataNode(final ShardingSphereDatabase database, final public void dropSchema(final String databaseName, final Collection schemaNames) { Collection tobeRemovedTables = new LinkedList<>(); Collection 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 void dropSchema(final String databaseName, final Collection schem 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 void alterSchemaMetaData(final AlterSchemaMetaDataPOJO alterSchemaMetaDat @Override public void registerStorageUnits(final String databaseName, final Map 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 void registerStorageUnits(final String databaseName, final Map 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 void alterStorageUnits(final String databaseName, final Map 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 void unregisterStorageUnits(final String databaseName, final Collection ruleConfigs) throws SQLException { ruleConfigs.removeIf(each -> !each.getClass().isAssignableFrom(SingleRuleConfiguration.class)); Collection 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 void alterRuleConfiguration(final String databaseName, final RuleConfigur return; } Collection 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 void alterProperties(final Properties props) { @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 void createTable(final String databaseName, final String schemaName, fina @Override public void dropTables(final String databaseName, final String schemaName, final Collection 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 22c95c643e3f4..37b4ae703c3ff 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 @@ void assertAlterSchemaWithEmptyAlteredSchema() { 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 @@ void assertAlterSchemaWithNotEmptyAlteredSchema() { 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 @@ void assertDropSchema() { 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 @@ void assertAlterRuleConfiguration() throws SQLException { 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 = Collections.singleton(mock(MetaDataVersion.class)); when(metaDataPersistService.getDatabaseRulePersistService().persist("foo_db", Collections.singleton(ruleConfig))).thenReturn(metaDataVersion);