You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by lu...@apache.org on 2022/03/01 11:37:00 UTC
[shardingsphere] branch master updated: Reduce duplicate code for `ClusterContextManagerBuilder.persistTransactionConfiguration` (#15659)
This is an automated email from the ASF dual-hosted git repository.
lujingshang 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 1e765d18 Reduce duplicate code for `ClusterContextManagerBuilder.persistTransactionConfiguration` (#15659)
1e765d18 is described below
commit 1e765d1848fb7c8e80346738a67e7a6cdf552377
Author: zhaojinchao <33...@users.noreply.github.com>
AuthorDate: Tue Mar 1 19:36:01 2022 +0800
Reduce duplicate code for `ClusterContextManagerBuilder.persistTransactionConfiguration` (#15659)
* Reduce duplicate code for ClusterContextManagerBuilder.persistTransactionConfiguration
* udpate
* change TransactionConfigurationFileGenerator interface.
* update
* reset code
* Fixed checkstyle
---
.../spi/TransactionConfigurationFileGenerator.java | 5 +-
.../config/NarayanaConfigurationFileGenerator.java | 17 +++---
.../NarayanaConfigurationFileGeneratorTest.java | 2 +-
.../mode/manager/ContextManager.java | 2 +-
.../cluster/ClusterContextManagerBuilder.java | 63 +++++++++++-----------
.../memory/MemoryContextManagerBuilder.java | 2 +-
.../StandaloneContextManagerBuilder.java | 2 +-
7 files changed, 47 insertions(+), 46 deletions(-)
diff --git a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/spi/TransactionConfigurationFileGenerator.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/spi/TransactionConfigurationFileGenerator.java
index 280d538..f1492ee 100644
--- a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/spi/TransactionConfigurationFileGenerator.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-core/src/main/java/org/apache/shardingsphere/transaction/spi/TransactionConfigurationFileGenerator.java
@@ -20,7 +20,6 @@ package org.apache.shardingsphere.transaction.spi;
import org.apache.shardingsphere.infra.config.schema.SchemaConfiguration;
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.spi.typed.TypedSPI;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
import java.util.Properties;
@@ -32,10 +31,10 @@ public interface TransactionConfigurationFileGenerator extends TypedSPI {
/**
* Generate transaction configuration file.
*
- * @param transactionRule transaction rule
+ * @param transactionProps transaction properties
* @param instanceContext instance context
*/
- void generateFile(TransactionRule transactionRule, InstanceContext instanceContext);
+ void generateFile(Properties transactionProps, InstanceContext instanceContext);
/**
* Get transaction rule props.
diff --git a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-x [...]
index 1118659..e93802c 100644
--- a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/main/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGenerator.java
@@ -34,7 +34,6 @@ import org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseT
import org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaData;
import org.apache.shardingsphere.infra.datasource.pool.metadata.DataSourcePoolMetaDataFactory;
import org.apache.shardingsphere.infra.instance.InstanceContext;
-import org.apache.shardingsphere.transaction.rule.TransactionRule;
import org.apache.shardingsphere.transaction.spi.TransactionConfigurationFileGenerator;
import javax.sql.DataSource;
@@ -52,12 +51,12 @@ import java.util.Properties;
public final class NarayanaConfigurationFileGenerator implements TransactionConfigurationFileGenerator {
@Override
- public void generateFile(final TransactionRule transactionRule, final InstanceContext instanceContext) {
+ public void generateFile(final Properties transactionProps, final InstanceContext instanceContext) {
String instanceId = instanceContext.getInstance().getInstanceDefinition().getInstanceId().getId();
String recoveryId = null == instanceContext.getInstance().getXaRecoveryId() ? instanceId : instanceContext.getInstance().getXaRecoveryId();
NarayanaConfiguration config = createDefaultConfiguration(instanceId, recoveryId);
- if (!transactionRule.getProps().isEmpty()) {
- appendUserDefinedJdbcStoreConfiguration(transactionRule, config);
+ if (!transactionProps.isEmpty()) {
+ appendUserDefinedJdbcStoreConfiguration(transactionProps, config);
}
JAXB.marshal(config, new File(ClassLoader.getSystemResource("").getPath(), "jbossts-properties.xml"));
}
@@ -110,11 +109,11 @@ public final class NarayanaConfigurationFileGenerator implements TransactionConf
return result;
}
- private void appendUserDefinedJdbcStoreConfiguration(final TransactionRule transactionRule, final NarayanaConfiguration config) {
- String url = transactionRule.getProps().getProperty("recoveryStoreUrl");
- String user = transactionRule.getProps().getProperty("recoveryStoreUser");
- String password = String.valueOf(transactionRule.getProps().get("recoveryStorePassword"));
- String dataSourceClass = transactionRule.getProps().getProperty("recoveryStoreDataSource");
+ private void appendUserDefinedJdbcStoreConfiguration(final Properties transactionProps, final NarayanaConfiguration config) {
+ String url = transactionProps.getProperty("recoveryStoreUrl");
+ String user = transactionProps.getProperty("recoveryStoreUser");
+ String password = String.valueOf(transactionProps.get("recoveryStorePassword"));
+ String dataSourceClass = transactionProps.getProperty("recoveryStoreDataSource");
if (null != url && null != user && null != password && null != dataSourceClass) {
appendJdbcStoreConfiguration(url, user, password, dataSourceClass, config);
}
diff --git a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transacti [...]
index 0c88638..6e43fd9 100644
--- a/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java
+++ b/shardingsphere-kernel/shardingsphere-transaction/shardingsphere-transaction-type/shardingsphere-transaction-xa/shardingsphere-transaction-xa-provider/shardingsphere-transaction-xa-narayana/src/test/java/org/apache/shardingsphere/transaction/xa/narayana/config/NarayanaConfigurationFileGeneratorTest.java
@@ -91,7 +91,7 @@ public final class NarayanaConfigurationFileGeneratorTest {
@Test
public void assertNarayanaConfigurationFileGenerator() throws JAXBException, FileNotFoundException {
- narayanaConfigurationFileGenerator.generateFile(transactionRule, instanceContext);
+ narayanaConfigurationFileGenerator.generateFile(transactionRule.getProps(), instanceContext);
JAXBContext jaxbContext = JAXBContext.newInstance(NarayanaConfiguration.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
InputStream inputStream = new FileInputStream(new File(ClassLoader.getSystemResource("").getPath(), "jbossts-properties.xml"));
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 7ca206e..62b8882 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
@@ -538,7 +538,7 @@ public final class ContextManager implements AutoCloseable {
private ShardingSphereTransactionManagerEngine createNewEngine(final DatabaseType databaseType, final Map<String, DataSource> dataSources) {
Optional<TransactionConfigurationFileGenerator> fileGenerator = TransactionConfigurationFileGeneratorFactory.newInstance(getTransactionRule().getProviderType());
- fileGenerator.ifPresent(optional -> optional.generateFile(getTransactionRule(), instanceContext));
+ fileGenerator.ifPresent(optional -> optional.generateFile(getTransactionRule().getProps(), instanceContext));
ShardingSphereTransactionManagerEngine result = new ShardingSphereTransactionManagerEngine();
result.init(databaseType, dataSources, getTransactionRule());
return result;
diff --git a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
index a4cc8d6..1cd9a0a 100644
--- a/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
+++ b/shardingsphere-mode/shardingsphere-mode-type/shardingsphere-cluster-mode/shardingsphere-cluster-mode-core/src/main/java/org/apache/shardingsphere/mode/manager/cluster/ClusterContextManagerBuilder.java
@@ -24,6 +24,7 @@ import org.apache.shardingsphere.infra.config.schema.impl.DataSourceProvidedSche
import org.apache.shardingsphere.infra.instance.InstanceContext;
import org.apache.shardingsphere.infra.instance.definition.InstanceDefinition;
import org.apache.shardingsphere.infra.instance.definition.InstanceType;
+import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.schema.ShardingSphereSchema;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.manager.ContextManagerBuilder;
@@ -38,7 +39,6 @@ import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositor
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryConfiguration;
import org.apache.shardingsphere.mode.repository.cluster.ClusterPersistRepositoryFactory;
import org.apache.shardingsphere.schedule.core.api.ModeScheduleContextFactory;
-import org.apache.shardingsphere.transaction.config.TransactionRuleConfiguration;
import org.apache.shardingsphere.transaction.context.TransactionContexts;
import org.apache.shardingsphere.transaction.context.TransactionContextsBuilder;
import org.apache.shardingsphere.transaction.rule.TransactionRule;
@@ -65,34 +65,37 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
MetaDataPersistService metaDataPersistService = new MetaDataPersistService(repository);
persistConfigurations(metaDataPersistService, parameter);
RegistryCenter registryCenter = new RegistryCenter(repository);
- persistTransactionConfiguration(parameter, metaDataPersistService);
MetaDataContextsBuilder metaDataContextsBuilder = createMetaDataContextsBuilder(metaDataPersistService, parameter);
persistMetaData(metaDataPersistService, metaDataContextsBuilder.getSchemaMap());
MetaDataContexts metaDataContexts = metaDataContextsBuilder.build(metaDataPersistService);
- ContextManager result = createContextManager(repository, metaDataPersistService, parameter.getInstanceDefinition(), metaDataContexts, parameter.getModeConfig());
+ Properties transactionProps = getTransactionProperties(metaDataContexts);
+ persistTransactionConfiguration(parameter, metaDataPersistService, transactionProps);
+ ContextManager result = createContextManager(repository, metaDataPersistService, parameter.getInstanceDefinition(), metaDataContexts, transactionProps, parameter.getModeConfig());
registerOnline(metaDataPersistService, parameter.getInstanceDefinition(), result, registryCenter);
return result;
}
- private void persistTransactionConfiguration(final ContextManagerBuilderParameter parameter, final MetaDataPersistService metaDataPersistService) throws SQLException {
- Collection<String> schemaNames = InstanceType.JDBC == parameter.getInstanceDefinition().getInstanceType()
- ? parameter.getSchemaConfigs().keySet() : metaDataPersistService.getSchemaMetaDataService().loadAllNames();
- Optional<String> schemaName = schemaNames.stream().findFirst();
- Collection<RuleConfiguration> globalRuleConfigs = metaDataPersistService.getGlobalRuleService().load();
- Optional<TransactionRuleConfiguration> transactionRuleConfiguration =
- globalRuleConfigs.stream().filter(each -> each instanceof TransactionRuleConfiguration).map(each -> (TransactionRuleConfiguration) each).findFirst();
- Optional<TransactionConfigurationFileGenerator> fileGenerator = transactionRuleConfiguration.isPresent() ? TransactionConfigurationFileGeneratorFactory
- .newInstance(transactionRuleConfiguration.get().getProviderType()) : Optional.empty();
- if (fileGenerator.isPresent()) {
- if (schemaName.isPresent()) {
- SchemaConfiguration schemaConfiguration = createSchemaConfiguration(schemaName.get(), metaDataPersistService, parameter);
- Properties transactionProps = fileGenerator.get().getTransactionProps(transactionRuleConfiguration.get().getProps(), schemaConfiguration, getType());
- metaDataPersistService.persistTransactionRule(transactionProps, true);
- }
- String instanceId = parameter.getInstanceDefinition().getInstanceId().getId();
- if (!metaDataPersistService.getComputeNodePersistService().loadXaRecoveryId(instanceId).isPresent()) {
- metaDataPersistService.getComputeNodePersistService().persistInstanceXaRecoveryId(instanceId, instanceId);
- }
+ private Properties getTransactionProperties(final MetaDataContexts metaDataContexts) {
+ Optional<String> schemaName = metaDataContexts.getAllSchemaNames().stream().findFirst();
+ Optional<TransactionRule> transactionRule =
+ metaDataContexts.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof TransactionRule).map(each -> (TransactionRule) each).findFirst();
+ Optional<TransactionConfigurationFileGenerator> fileGenerator = transactionRule.isPresent()
+ ? TransactionConfigurationFileGeneratorFactory.newInstance(transactionRule.get().getProviderType()) : Optional.empty();
+ if (schemaName.isPresent() && fileGenerator.isPresent()) {
+ ShardingSphereMetaData metaData = metaDataContexts.getMetaData(schemaName.get());
+ return fileGenerator.get().getTransactionProps(transactionRule.get().getProps(),
+ new DataSourceProvidedSchemaConfiguration(metaData.getResource().getDataSources(), metaData.getRuleMetaData().getConfigurations()), getType());
+ }
+ return new Properties();
+ }
+
+ private void persistTransactionConfiguration(final ContextManagerBuilderParameter parameter, final MetaDataPersistService metaDataPersistService, final Properties transactionProps) {
+ if (!transactionProps.isEmpty()) {
+ metaDataPersistService.persistTransactionRule(transactionProps, true);
+ }
+ String instanceId = parameter.getInstanceDefinition().getInstanceId().getId();
+ if (!metaDataPersistService.getComputeNodePersistService().loadXaRecoveryId(instanceId).isPresent()) {
+ metaDataPersistService.getComputeNodePersistService().persistInstanceXaRecoveryId(instanceId, instanceId);
}
}
@@ -129,24 +132,24 @@ public final class ClusterContextManagerBuilder implements ContextManagerBuilder
}
}
- private ContextManager createContextManager(final ClusterPersistRepository repository,
- final MetaDataPersistService metaDataPersistService, final InstanceDefinition instanceDefinition, final MetaDataContexts metaDataContexts,
- final ModeConfiguration modeConfiguration) {
+ private ContextManager createContextManager(final ClusterPersistRepository repository, final MetaDataPersistService metaDataPersistService,
+ final InstanceDefinition instanceDefinition, final MetaDataContexts metaDataContexts,
+ final Properties transactionProps, final ModeConfiguration modeConfiguration) {
InstanceContext instanceContext = new InstanceContext(metaDataPersistService.getComputeNodePersistService().loadComputeNodeInstance(instanceDefinition),
new ClusterWorkerIdGenerator(repository, metaDataPersistService, instanceDefinition), modeConfiguration);
- generateTransactionConfigurationFile(instanceContext, metaDataContexts);
+ generateTransactionConfigurationFile(instanceContext, metaDataContexts, transactionProps);
TransactionContexts transactionContexts = new TransactionContextsBuilder(metaDataContexts.getMetaDataMap(), metaDataContexts.getGlobalRuleMetaData().getRules()).build();
ContextManager result = new ContextManager();
result.init(metaDataContexts, transactionContexts, instanceContext);
return result;
}
- private void generateTransactionConfigurationFile(final InstanceContext instanceContext, final MetaDataContexts metaDataContexts) {
- Optional<TransactionRule> transactionRule =
- metaDataContexts.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof TransactionRule).map(each -> (TransactionRule) each).findFirst();
+ private void generateTransactionConfigurationFile(final InstanceContext instanceContext, final MetaDataContexts metaDataContexts, final Properties transactionProps) {
+ Optional<TransactionRule> transactionRule = metaDataContexts.getGlobalRuleMetaData().getRules()
+ .stream().filter(each -> each instanceof TransactionRule).map(each -> (TransactionRule) each).findFirst();
if (transactionRule.isPresent()) {
Optional<TransactionConfigurationFileGenerator> fileGenerator = TransactionConfigurationFileGeneratorFactory.newInstance(transactionRule.get().getProviderType());
- fileGenerator.ifPresent(optional -> optional.generateFile(transactionRule.get(), instanceContext));
+ fileGenerator.ifPresent(optional -> optional.generateFile(transactionProps, instanceContext));
}
}
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 139ccce..be11a62 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
@@ -71,7 +71,7 @@ public final class MemoryContextManagerBuilder implements ContextManagerBuilder
metaDataContexts.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof TransactionRule).map(each -> (TransactionRule) each).findFirst();
if (transactionRule.isPresent()) {
Optional<TransactionConfigurationFileGenerator> fileGenerator = TransactionConfigurationFileGeneratorFactory.newInstance(transactionRule.get().getProviderType());
- fileGenerator.ifPresent(optional -> optional.generateFile(transactionRule.get(), instanceContext));
+ fileGenerator.ifPresent(optional -> optional.generateFile(transactionRule.get().getProps(), instanceContext));
}
}
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 98899e5..cb4bcdf 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
@@ -92,7 +92,7 @@ public final class StandaloneContextManagerBuilder implements ContextManagerBuil
metaDataContexts.getGlobalRuleMetaData().getRules().stream().filter(each -> each instanceof TransactionRule).map(each -> (TransactionRule) each).findFirst();
if (transactionRule.isPresent()) {
Optional<TransactionConfigurationFileGenerator> fileGenerator = TransactionConfigurationFileGeneratorFactory.newInstance(transactionRule.get().getProviderType());
- fileGenerator.ifPresent(optional -> optional.generateFile(transactionRule.get(), instanceContext));
+ fileGenerator.ifPresent(optional -> optional.generateFile(transactionRule.get().getProps(), instanceContext));
}
}