未验证 提交 1ecd026b 编写于 作者: J Juan Pan(Trista) 提交者: GitHub

Finalize SchemaContexts (#5844)

* Finalize SchemaContexts

* check style

* modify renew()

* add RequiredArgsConstructor
上级 5d530344
...@@ -19,6 +19,7 @@ package org.apache.shardingsphere.driver.jdbc.core.datasource; ...@@ -19,6 +19,7 @@ package org.apache.shardingsphere.driver.jdbc.core.datasource;
import com.google.common.base.Preconditions; import com.google.common.base.Preconditions;
import lombok.Getter; import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection; import org.apache.shardingsphere.driver.jdbc.core.connection.ShardingSphereConnection;
import org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource; import org.apache.shardingsphere.driver.jdbc.unsupported.AbstractUnsupportedOperationDataSource;
...@@ -44,6 +45,7 @@ import java.util.logging.Logger; ...@@ -44,6 +45,7 @@ import java.util.logging.Logger;
/** /**
* ShardingSphere data source. * ShardingSphere data source.
*/ */
@RequiredArgsConstructor
@Getter @Getter
public final class ShardingSphereDataSource extends AbstractUnsupportedOperationDataSource implements AutoCloseable { public final class ShardingSphereDataSource extends AbstractUnsupportedOperationDataSource implements AutoCloseable {
......
...@@ -28,9 +28,13 @@ import org.apache.shardingsphere.infra.config.DataSourceConfiguration; ...@@ -28,9 +28,13 @@ import org.apache.shardingsphere.infra.config.DataSourceConfiguration;
import org.apache.shardingsphere.infra.config.RuleConfiguration; import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.database.DefaultSchema; import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.metadata.schema.RuleSchemaMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.StatusContainedRule; import org.apache.shardingsphere.infra.rule.StatusContainedRule;
import org.apache.shardingsphere.infra.rule.event.impl.DataSourceNameDisabledEvent; import org.apache.shardingsphere.infra.rule.event.impl.DataSourceNameDisabledEvent;
import org.apache.shardingsphere.kernal.context.SchemaContext;
import org.apache.shardingsphere.kernal.context.SchemaContexts;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import org.apache.shardingsphere.orchestration.center.config.OrchestrationConfiguration; import org.apache.shardingsphere.orchestration.center.config.OrchestrationConfiguration;
import org.apache.shardingsphere.orchestration.core.common.event.DataSourceChangedEvent; import org.apache.shardingsphere.orchestration.core.common.event.DataSourceChangedEvent;
import org.apache.shardingsphere.orchestration.core.common.event.PropertiesChangedEvent; import org.apache.shardingsphere.orchestration.core.common.event.PropertiesChangedEvent;
...@@ -44,6 +48,7 @@ import org.apache.shardingsphere.orchestration.core.registrycenter.schema.Orches ...@@ -44,6 +48,7 @@ import org.apache.shardingsphere.orchestration.core.registrycenter.schema.Orches
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
...@@ -87,12 +92,14 @@ public class OrchestrationShardingSphereDataSource extends AbstractOrchestration ...@@ -87,12 +92,14 @@ public class OrchestrationShardingSphereDataSource extends AbstractOrchestration
*/ */
@Subscribe @Subscribe
public final synchronized void renew(final MetaDataChangedEvent event) { public final synchronized void renew(final MetaDataChangedEvent event) {
for (String each : event.getSchemaNames()) { if (!event.getSchemaNames().contains(DefaultSchema.LOGIC_NAME)) {
if (DefaultSchema.LOGIC_NAME.equals(each)) { return;
dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().setMetaData(
new ShardingSphereMetaData(dataSource.getSchemaContexts().getDefaultSchemaContext().getSchema().getMetaData().getDataSources(), event.getRuleSchemaMetaData()));
}
} }
Map<String, SchemaContext> schemaContexts = new HashMap<>(dataSource.getSchemaContexts().getSchemaContexts().size());
SchemaContext oldSchemaContext = dataSource.getSchemaContexts().getSchemaContexts().get(DefaultSchema.LOGIC_NAME);
schemaContexts.put(DefaultSchema.LOGIC_NAME, new SchemaContext(oldSchemaContext.getName(),
getChangedShardingSphereSchema(oldSchemaContext.getSchema(), event.getRuleSchemaMetaData()), oldSchemaContext.getRuntimeContext()));
dataSource = new ShardingSphereDataSource(new SchemaContexts(schemaContexts, dataSource.getSchemaContexts().getProperties(), dataSource.getSchemaContexts().getAuthentication()));
} }
/** /**
...@@ -152,4 +159,10 @@ public class OrchestrationShardingSphereDataSource extends AbstractOrchestration ...@@ -152,4 +159,10 @@ public class OrchestrationShardingSphereDataSource extends AbstractOrchestration
} }
} }
} }
private ShardingSphereSchema getChangedShardingSphereSchema(final ShardingSphereSchema oldShardingSphereSchema, final RuleSchemaMetaData newRuleSchemaMetaData) {
ShardingSphereMetaData metaData = new ShardingSphereMetaData(oldShardingSphereSchema.getMetaData().getDataSources(), newRuleSchemaMetaData);
return new ShardingSphereSchema(oldShardingSphereSchema.getDatabaseType(), oldShardingSphereSchema.getConfigurations(),
oldShardingSphereSchema.getRules(), oldShardingSphereSchema.getDataSources(), metaData);
}
} }
...@@ -19,12 +19,8 @@ package org.apache.shardingsphere.kernal.context; ...@@ -19,12 +19,8 @@ package org.apache.shardingsphere.kernal.context;
import lombok.Getter; import lombok.Getter;
import org.apache.shardingsphere.kernal.context.runtime.RuntimeContext; import org.apache.shardingsphere.kernal.context.runtime.RuntimeContext;
import org.apache.shardingsphere.kernal.context.schema.DataSourceParameter;
import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema; import org.apache.shardingsphere.kernal.context.schema.ShardingSphereSchema;
import javax.sql.DataSource;
import java.util.Map;
@Getter @Getter
public final class SchemaContext { public final class SchemaContext {
...@@ -39,20 +35,4 @@ public final class SchemaContext { ...@@ -39,20 +35,4 @@ public final class SchemaContext {
this.schema = schema; this.schema = schema;
this.runtimeContext = runtimeContext; this.runtimeContext = runtimeContext;
} }
/**
* Renew data sources.
*
* @param dataSourceParameters data source parameters
* @param dataSources data sources
* @throws Exception exception
*/
public void renew(final Map<String, DataSourceParameter> dataSourceParameters, final Map<String, DataSource> dataSources) throws Exception {
schema.getDataSources().clear();
schema.getDataSources().putAll(dataSources);
schema.getDataSourceParameters().clear();
schema.getDataSourceParameters().putAll(dataSourceParameters);
runtimeContext.getTransactionManagerEngine().close();
runtimeContext.getTransactionManagerEngine().init(schema.getDatabaseType(), schema.getDataSources());
}
} }
...@@ -18,12 +18,9 @@ ...@@ -18,12 +18,9 @@
package org.apache.shardingsphere.kernal.context; package org.apache.shardingsphere.kernal.context;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.infra.auth.Authentication; import org.apache.shardingsphere.infra.auth.Authentication;
import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties; import org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.properties.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.database.DefaultSchema; import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.executor.kernel.ExecutorKernel;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
...@@ -34,10 +31,9 @@ public final class SchemaContexts { ...@@ -34,10 +31,9 @@ public final class SchemaContexts {
private final Map<String, SchemaContext> schemaContexts = new HashMap<>(); private final Map<String, SchemaContext> schemaContexts = new HashMap<>();
private ConfigurationProperties properties; private final ConfigurationProperties properties;
@Setter private final Authentication authentication;
private Authentication authentication;
public SchemaContexts() { public SchemaContexts() {
properties = new ConfigurationProperties(new Properties()); properties = new ConfigurationProperties(new Properties());
...@@ -59,16 +55,6 @@ public final class SchemaContexts { ...@@ -59,16 +55,6 @@ public final class SchemaContexts {
return schemaContexts.get(DefaultSchema.LOGIC_NAME); return schemaContexts.get(DefaultSchema.LOGIC_NAME);
} }
/**
* Renew.
*
* @param properties properties
*/
public void renew(final ConfigurationProperties properties) {
this.properties = properties;
new ExecutorKernel(properties.<Integer>getValue(ConfigurationPropertyKey.EXECUTOR_SIZE));
}
/** /**
* Close. * Close.
* *
......
...@@ -18,12 +18,10 @@ ...@@ -18,12 +18,10 @@
package org.apache.shardingsphere.kernal.context.schema; package org.apache.shardingsphere.kernal.context.schema;
import lombok.Getter; import lombok.Getter;
import lombok.Setter;
import org.apache.shardingsphere.infra.config.RuleConfiguration; import org.apache.shardingsphere.infra.config.RuleConfiguration;
import org.apache.shardingsphere.infra.database.type.DatabaseType; import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData; import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import org.apache.shardingsphere.infra.rule.ShardingSphereRule; import org.apache.shardingsphere.infra.rule.ShardingSphereRule;
import org.apache.shardingsphere.infra.rule.ShardingSphereRulesBuilder;
import javax.sql.DataSource; import javax.sql.DataSource;
import java.lang.reflect.Method; import java.lang.reflect.Method;
...@@ -45,8 +43,7 @@ public final class ShardingSphereSchema { ...@@ -45,8 +43,7 @@ public final class ShardingSphereSchema {
private final Map<String, DataSourceParameter> dataSourceParameters = new LinkedHashMap<>(); private final Map<String, DataSourceParameter> dataSourceParameters = new LinkedHashMap<>();
@Setter private final ShardingSphereMetaData metaData;
private ShardingSphereMetaData metaData;
public ShardingSphereSchema(final DatabaseType databaseType, final Collection<RuleConfiguration> configurations, final Collection<ShardingSphereRule> rules, public ShardingSphereSchema(final DatabaseType databaseType, final Collection<RuleConfiguration> configurations, final Collection<ShardingSphereRule> rules,
final Map<String, DataSource> dataSourceMap, final ShardingSphereMetaData shardingSphereMetaData) { final Map<String, DataSource> dataSourceMap, final ShardingSphereMetaData shardingSphereMetaData) {
...@@ -63,19 +60,6 @@ public final class ShardingSphereSchema { ...@@ -63,19 +60,6 @@ public final class ShardingSphereSchema {
this.dataSourceParameters.putAll(dataSourceParameters); this.dataSourceParameters.putAll(dataSourceParameters);
} }
/**
* Set configurations.
*
* @param configurations rule configurations
*/
public void renew(final Collection<RuleConfiguration> configurations) {
this.configurations.clear();
this.configurations.addAll(configurations);
Collection<ShardingSphereRule> rules = ShardingSphereRulesBuilder.build(configurations, dataSources.keySet());
this.rules.clear();
this.rules.addAll(rules);
}
/** /**
* Close data sources. * Close data sources.
* @param dataSources data sources * @param dataSources data sources
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册