This is an automated email from the ASF dual-hosted git repository.
panjuan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 41089f3fdab refresh transaction rule resource after rule changed with
standalone mode (#18409)
41089f3fdab is described below
commit 41089f3fdabfd7b783d527721fb74b0f8d2e37f6
Author: Haoran Meng <[email protected]>
AuthorDate: Fri Jun 17 15:19:55 2022 +0800
refresh transaction rule resource after rule changed with standalone mode
(#18409)
---
.../mode/manager/ContextManager.java | 12 +++++++++++
.../ClusterContextManagerCoordinator.java | 23 +++++++++-------------
.../memory/MemoryContextManagerBuilder.java | 8 --------
.../StandaloneContextManagerBuilder.java | 8 --------
4 files changed, 21 insertions(+), 30 deletions(-)
diff --git
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
index 057aae39307..aedb51e12ca 100644
---
a/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
+++
b/shardingsphere-mode/shardingsphere-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/ContextManager.java
@@ -47,6 +47,7 @@ import
org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.builder.global.GlobalRulesBuilder;
import
org.apache.shardingsphere.infra.rule.builder.schema.DatabaseRulesBuilder;
import
org.apache.shardingsphere.infra.rule.identifier.type.DataNodeContainedRule;
+import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.MutableDataNodeRule;
import org.apache.shardingsphere.infra.rule.identifier.type.ResourceHeldRule;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
@@ -87,6 +88,7 @@ public final class ContextManager implements AutoCloseable {
this.metaDataContexts = metaDataContexts;
this.instanceContext = instanceContext;
executorEngine =
ExecutorEngine.createExecutorEngineWithSize(metaDataContexts.getMetaData().getProps().<Integer>getValue(ConfigurationPropertyKey.KERNEL_EXECUTOR_SIZE));
+ setInstanceContext();
}
/**
@@ -308,6 +310,7 @@ public final class ContextManager implements AutoCloseable {
MetaDataContexts newMetaDataContexts =
rebuildMetaDataContexts(changedMetaDataContexts.getMetaData());
metaDataContexts.getMetaData().getDatabases().get(databaseName).getRuleMetaData().findRules(ResourceHeldRule.class).forEach(ResourceHeldRule::closeStaleResources);
renewMetaDataContexts(newMetaDataContexts);
+ setInstanceContext();
} catch (final SQLException ex) {
log.error("Alter database:{} rule configuration failed",
databaseName, ex);
}
@@ -323,6 +326,7 @@ public final class ContextManager implements AutoCloseable {
try {
MetaDataContexts changedMetaDataContext =
buildChangedMetaDataContextWithChangedDataSource(metaDataContexts.getMetaData().getDatabases().get(databaseName),
dataSourcePropsMap);
refreshMetaDataContext(databaseName, changedMetaDataContext,
dataSourcePropsMap);
+ setInstanceContext();
} catch (final SQLException ex) {
log.error("Alter database:{} data source configuration failed",
databaseName, ex);
}
@@ -340,6 +344,7 @@ public final class ContextManager implements AutoCloseable {
MetaDataContexts changedMetaDataContext =
buildChangedMetaDataContextWithChangedDataSourceAndRule(
metaDataContexts.getMetaData().getDatabases().get(databaseName),
dataSourcePropsMap, ruleConfigs);
refreshMetaDataContext(databaseName, changedMetaDataContext,
dataSourcePropsMap);
+ setInstanceContext();
} catch (SQLException ex) {
log.error("Alter database:{} data source and rule configuration
failed", databaseName, ex);
}
@@ -358,6 +363,7 @@ public final class ContextManager implements AutoCloseable {
new
ShardingSphereRuleMetaData(GlobalRulesBuilder.buildRules(ruleConfigs,
metaDataContexts.getMetaData().getDatabases())));
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(ResourceHeldRule.class).forEach(ResourceHeldRule::closeStaleResources);
renewMetaDataContexts(newMetaDataContexts);
+ setInstanceContext();
}
/**
@@ -649,6 +655,12 @@ public final class ContextManager implements AutoCloseable
{
.filter(each -> each instanceof ResourceHeldRule).map(each ->
(ResourceHeldRule<?>) each).forEach(each ->
each.closeStaleResource(databaseName));
}
+ private void setInstanceContext() {
+
metaDataContexts.getMetaData().getGlobalRuleMetaData().findRules(InstanceAwareRule.class).forEach(each
-> each.setInstanceContext(instanceContext));
+ metaDataContexts.getMetaData().getDatabases()
+ .forEach((key, value) ->
value.getRuleMetaData().findRules(InstanceAwareRule.class).forEach(each ->
each.setInstanceContext(instanceContext)));
+ }
+
@Override
public void close() throws Exception {
executorEngine.close();
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
index df60228c8fd..7b4593ba063 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/coordinator/ClusterContextManagerCoordinator.java
@@ -26,10 +26,10 @@ import
org.apache.shardingsphere.infra.executor.sql.process.model.yaml.BatchYaml
import
org.apache.shardingsphere.infra.executor.sql.process.model.yaml.YamlExecuteProcessContext;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import
org.apache.shardingsphere.infra.metadata.database.schema.QualifiedDatabase;
-import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import
org.apache.shardingsphere.infra.rule.identifier.type.StatusContainedRule;
import org.apache.shardingsphere.infra.yaml.engine.YamlEngine;
import org.apache.shardingsphere.mode.manager.ContextManager;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.props.PropertiesChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.GlobalRuleConfigurationsChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.rule.RuleConfigurationsChangedEvent;
@@ -37,7 +37,6 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.confi
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.version.DatabaseVersionChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.DatabaseAddedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.DatabaseDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.config.event.datasource.DataSourceChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaAddedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.metadata.event.SchemaDeletedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.process.ShowProcessListManager;
@@ -52,14 +51,14 @@ import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.statu
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.WorkerIdEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.XaRecoveryIdAddedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.compute.event.XaRecoveryIdDeletedEvent;
-import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.PrimaryStateChangedEvent;
+import
org.apache.shardingsphere.mode.manager.cluster.coordinator.registry.status.storage.event.StorageNodeChangedEvent;
import org.apache.shardingsphere.mode.metadata.persist.MetaDataPersistService;
import org.apache.shardingsphere.mode.metadata.persist.node.ComputeNode;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeDataSource;
import org.apache.shardingsphere.mode.metadata.storage.StorageNodeStatus;
-import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import
org.apache.shardingsphere.mode.metadata.storage.event.PrimaryDataSourceChangedEvent;
+import
org.apache.shardingsphere.mode.metadata.storage.event.StorageNodeDataSourceChangedEvent;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.sql.SQLException;
@@ -85,7 +84,7 @@ public final class ClusterContextManagerCoordinator {
this.contextManager = contextManager;
this.registryCenter = registryCenter;
ShardingSphereEventBus.getInstance().register(this);
- buildSpecialRules();
+ disableDataSources();
}
/**
@@ -158,7 +157,7 @@ public final class ClusterContextManagerCoordinator {
public synchronized void renew(final RuleConfigurationsChangedEvent event)
{
if
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
contextManager.alterRuleConfiguration(event.getDatabaseName(),
event.getRuleConfigurations());
- buildSpecialRules();
+ disableDataSources();
}
}
@@ -171,7 +170,7 @@ public final class ClusterContextManagerCoordinator {
public synchronized void renew(final DataSourceChangedEvent event) {
if
(metaDataPersistService.getDatabaseVersionPersistService().isActiveVersion(event.getDatabaseName(),
event.getDatabaseVersion())) {
contextManager.alterDataSourceConfiguration(event.getDatabaseName(),
event.getDataSourcePropertiesMap());
- buildSpecialRules();
+ disableDataSources();
}
}
@@ -211,7 +210,7 @@ public final class ClusterContextManagerCoordinator {
@Subscribe
public synchronized void renew(final GlobalRuleConfigurationsChangedEvent
event) {
contextManager.alterGlobalRuleConfiguration(event.getRuleConfigurations());
- buildSpecialRules();
+ disableDataSources();
}
/**
@@ -309,7 +308,7 @@ public final class ClusterContextManagerCoordinator {
Map<String, DataSourceProperties> dataSourcePropertiesMap =
metaDataPersistService.getDataSourceService().load(event.getDatabaseName(),
event.getActiveVersion());
Collection<RuleConfiguration> ruleConfigs =
metaDataPersistService.getDatabaseRulePersistService().load(event.getDatabaseName(),
event.getActiveVersion());
contextManager.alterDataSourceAndRuleConfiguration(event.getDatabaseName(),
dataSourcePropertiesMap, ruleConfigs);
- buildSpecialRules();
+ disableDataSources();
}
/**
@@ -343,15 +342,11 @@ public final class ClusterContextManagerCoordinator {
}
}
- private void buildSpecialRules() {
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findRules(InstanceAwareRule.class).forEach(each
-> each.setInstanceContext(contextManager.getInstanceContext()));
+ private void disableDataSources() {
contextManager.getMetaDataContexts().getMetaData().getDatabases().forEach((key,
value) -> value.getRuleMetaData().getRules().forEach(each -> {
if (each instanceof StatusContainedRule) {
disableDataSources((StatusContainedRule) each);
}
- if (each instanceof InstanceAwareRule) {
- ((InstanceAwareRule)
each).setInstanceContext(contextManager.getInstanceContext());
- }
}));
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
index dddddea1f59..a77afd0abc7 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-memory-mode/shardingsphere-memory-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/memory/MemoryContextManagerBuilder.java
@@ -21,7 +21,6 @@ import
org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -48,7 +47,6 @@ public final class MemoryContextManagerBuilder implements
ContextManagerBuilder
InstanceContext instanceContext = buildInstanceContext(parameter);
generateTransactionConfigurationFile(instanceContext,
metaDataContexts);
ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
- setInstanceContext(result);
return result;
}
@@ -67,12 +65,6 @@ public final class MemoryContextManagerBuilder implements
ContextManagerBuilder
}
}
- private void setInstanceContext(final ContextManager contextManager) {
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findRules(InstanceAwareRule.class).forEach(each
-> each.setInstanceContext(contextManager.getInstanceContext()));
- contextManager.getMetaDataContexts().getMetaData().getDatabases()
- .forEach((key, value) ->
value.getRuleMetaData().findRules(InstanceAwareRule.class).forEach(each ->
each.setInstanceContext(contextManager.getInstanceContext())));
- }
-
private ModeConfiguration buildMemoryModeConfiguration(final
ModeConfiguration modeConfiguration) {
return Optional.ofNullable(modeConfiguration).orElseGet(() -> new
ModeConfiguration(getType(), null, false));
}
diff --git
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
index a35d567c7a7..d1f3db7dc0f 100644
---
a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
+++
b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-standalone-mode/shardingsphere-standalone-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/standalone/StandaloneContextManagerBuilder.java
@@ -24,7 +24,6 @@ import
org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstance;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.definition.InstanceType;
-import org.apache.shardingsphere.infra.rule.identifier.type.InstanceAwareRule;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilderParameter;
@@ -93,7 +92,6 @@ public final class StandaloneContextManagerBuilder implements
ContextManagerBuil
new StandaloneLockContext());
generateTransactionConfigurationFile(instanceContext,
metaDataContexts);
ContextManager result = new ContextManager(metaDataContexts,
instanceContext);
- setInstanceContext(result);
return result;
}
@@ -106,12 +104,6 @@ public final class StandaloneContextManagerBuilder
implements ContextManagerBuil
}
}
- private void setInstanceContext(final ContextManager contextManager) {
-
contextManager.getMetaDataContexts().getMetaData().getGlobalRuleMetaData().findRules(InstanceAwareRule.class).forEach(each
-> each.setInstanceContext(contextManager.getInstanceContext()));
- contextManager.getMetaDataContexts().getMetaData().getDatabases()
- .forEach((key, value) ->
value.getRuleMetaData().findRules(InstanceAwareRule.class).forEach(each ->
each.setInstanceContext(contextManager.getInstanceContext())));
- }
-
@Override
public String getType() {
return "Standalone";