提交 08f513e1 编写于 作者: H haocao

Add circuit breaker support 6th.

上级 72bc4d38
package io.shardingjdbc.orchestration.api;
import io.shardingjdbc.core.api.config.MasterSlaveRuleConfiguration;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import javax.sql.DataSource;
import java.util.Map;
/**
* Orchestration master slave configuration.
*
* @author caohao
*/
@RequiredArgsConstructor
@Getter
public class OrchestrationMasterSlaveConfiguration {
private final String name;
private final boolean overwrite;
private final CoordinatorRegistryCenter registryCenter;
private final Map<String, DataSource> dataSourceMap;
private final MasterSlaveRuleConfiguration masterSlaveRuleConfiguration;
}
......@@ -42,42 +42,41 @@ import java.util.Map;
* Orchestration master slave data source factory.
*
* @author zhangliang
* @author caohao
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class OrchestrationMasterSlaveDataSourceFactory {
/**
* Create sharding data source.
*
* @param name name of sharding data source
* @param registryCenter registry center
* @param dataSourceMap data source map
* @param masterSlaveRuleConfig rule configuration for databases and tables sharding
*
* @param config orchestration master slave configuration
* @return sharding data source
* @throws SQLException SQL exception
*/
public static DataSource createDataSource(final String name, final CoordinatorRegistryCenter registryCenter,
final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig) throws SQLException {
initRegistryCenter(name, registryCenter, dataSourceMap, masterSlaveRuleConfig);
MasterSlaveDataSource result = (MasterSlaveDataSource) MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveRuleConfig);
addConfigurationChangeListener(name, registryCenter, result);
addInstancesStateChangeListener(name, registryCenter, result);
public static DataSource createDataSource(final OrchestrationMasterSlaveConfiguration config) throws SQLException {
initRegistryCenter(config);
MasterSlaveDataSource result = (MasterSlaveDataSource) MasterSlaveDataSourceFactory.createDataSource(config.getDataSourceMap(), config.getMasterSlaveRuleConfiguration());
addConfigurationChangeListener(config.getName(), config.getRegistryCenter(), result);
addInstancesStateChangeListener(config.getName(), config.getRegistryCenter(), result);
return result;
}
private static void initRegistryCenter(final String name,
final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig) {
private static void initRegistryCenter(final OrchestrationMasterSlaveConfiguration config) throws SQLException {
String name = config.getName();
CoordinatorRegistryCenter registryCenter = config.getRegistryCenter();
registryCenter.init();
persist(name, registryCenter, dataSourceMap, masterSlaveRuleConfig);
persist(config);
registryCenter.persistEphemeral("/" + name + "/state/instances/" + new InstanceNode().getInstanceId(), "");
registryCenter.addCacheData("/" + name + "/config");
}
private static void persist(final String name,
final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig) {
if ("overwrite".equals(registryCenter.get("/" + name + "/config")) || registryCenter.getChildrenKeys("/" + name + "/config").isEmpty()) {
registryCenter.persist("/" + name + "/config/datasource", DataSourceJsonConverter.toJson(dataSourceMap));
registryCenter.persist("/" + name + "/config/masterslave", GsonFactory.getGson().toJson(masterSlaveRuleConfig));
private static void persist(final OrchestrationMasterSlaveConfiguration config) throws SQLException {
String name = config.getName();
CoordinatorRegistryCenter registryCenter = config.getRegistryCenter();
if (config.isOverwrite() || registryCenter.getChildrenKeys("/" + name + "/config").isEmpty()) {
registryCenter.persist("/" + name + "/config/datasource", DataSourceJsonConverter.toJson(config.getDataSourceMap()));
registryCenter.persist("/" + name + "/config/masterslave", GsonFactory.getGson().toJson(config.getMasterSlaveRuleConfiguration()));
}
}
......
package io.shardingjdbc.orchestration.api;
import io.shardingjdbc.core.api.config.ShardingRuleConfiguration;
import io.shardingjdbc.orchestration.reg.base.CoordinatorRegistryCenter;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import javax.sql.DataSource;
import java.util.Map;
/**
* Orchestration sharding configuration.
*
* @author caohao
*/
@RequiredArgsConstructor
@Getter
public class OrchestrationShardingConfiguration {
private final String name;
private final boolean overwrite;
private final CoordinatorRegistryCenter registryCenter;
private final Map<String, DataSource> dataSourceMap;
private final ShardingRuleConfiguration shardingRuleConfig;
}
......@@ -43,64 +43,58 @@ import java.util.Properties;
* Orchestration sharding data source factory.
*
* @author zhangliang
* @author caohao
*/
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class OrchestrationShardingDataSourceFactory {
/**
* Create sharding data source.
*
* @param name name of sharding data source
* @param registryCenter registry center
* @param dataSourceMap data source map
* @param shardingRuleConfig rule configuration for databases and tables sharding
*
* @param config orchestration sharding configuration
* @return sharding data source
* @throws SQLException SQL exception
*/
public static DataSource createDataSource(
final String name, final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap, final ShardingRuleConfiguration shardingRuleConfig) throws SQLException {
initRegistryCenter(name, registryCenter, dataSourceMap, shardingRuleConfig);
ShardingDataSource result = (ShardingDataSource) ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig);
addConfigurationChangeListener(name, registryCenter, result);
addInstancesStateChangeListener(name, registryCenter, result);
public static DataSource createDataSource(final OrchestrationShardingConfiguration config) throws SQLException {
initRegistryCenter(config);
ShardingDataSource result = (ShardingDataSource) ShardingDataSourceFactory.createDataSource(config.getDataSourceMap(), config.getShardingRuleConfig());
addConfigurationChangeListener(config.getName(), config.getRegistryCenter(), result);
addInstancesStateChangeListener(config.getName(), config.getRegistryCenter(), result);
return result;
}
/**
* Create sharding data source.
*
* @param name name of sharding data source
* @param registryCenter registry center
* @param dataSourceMap data source map
* @param shardingRuleConfig rule configuration for databases and tables sharding
* @param config orchestration sharding configuration
* @param props properties for data source
* @return sharding data source
* @throws SQLException SQL exception
*/
public static DataSource createDataSource(
final String name, final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap,
final ShardingRuleConfiguration shardingRuleConfig, final Properties props) throws SQLException {
initRegistryCenter(name, registryCenter, dataSourceMap, shardingRuleConfig);
public static DataSource createDataSource(final OrchestrationShardingConfiguration config, final Properties props) throws SQLException {
initRegistryCenter(config);
// TODO props
ShardingDataSource result = (ShardingDataSource) ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingRuleConfig, props);
addConfigurationChangeListener(name, registryCenter, result);
ShardingDataSource result = (ShardingDataSource) ShardingDataSourceFactory.createDataSource(config.getDataSourceMap(), config.getShardingRuleConfig(), props);
addConfigurationChangeListener(config.getName(), config.getRegistryCenter(), result);
return result;
}
private static void initRegistryCenter(final String name,
final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap, final ShardingRuleConfiguration shardingRuleConfig) {
private static void initRegistryCenter(final OrchestrationShardingConfiguration config) throws SQLException {
String name = config.getName();
CoordinatorRegistryCenter registryCenter = config.getRegistryCenter();
registryCenter.init();
persist(name, registryCenter, dataSourceMap, shardingRuleConfig);
persist(config);
registryCenter.persistEphemeral("/" + name + "/state/instances/" + new InstanceNode().getInstanceId(), "");
registryCenter.addCacheData("/" + name + "/config");
registryCenter.addCacheData("/" + name + "/state/instances");
}
private static void persist(final String name,
final CoordinatorRegistryCenter registryCenter, final Map<String, DataSource> dataSourceMap, final ShardingRuleConfiguration shardingRuleConfig) {
if ("overwrite".equals(registryCenter.get("/" + name + "/config")) || registryCenter.getChildrenKeys("/" + name + "/config").isEmpty()) {
registryCenter.persist("/" + name + "/config/datasource", DataSourceJsonConverter.toJson(dataSourceMap));
registryCenter.persist("/" + name + "/config/sharding", ShardingRuleConfigurationConverter.toJson(shardingRuleConfig));
private static void persist(final OrchestrationShardingConfiguration config) throws SQLException {
String name = config.getName();
CoordinatorRegistryCenter registryCenter = config.getRegistryCenter();
if (config.isOverwrite() || registryCenter.getChildrenKeys("/" + name + "/config").isEmpty()) {
registryCenter.persist("/" + name + "/config/datasource", DataSourceJsonConverter.toJson(config.getDataSourceMap()));
registryCenter.persist("/" + name + "/config/sharding", ShardingRuleConfigurationConverter.toJson(config.getShardingRuleConfig()));
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册