private Collection<MasterSlaveRule> createMasterSlaveRules(final Collection<MasterSlaveRuleConfiguration> masterSlaveRuleConfigurations) { Collection<MasterSlaveRule> result = new ArrayList<>(masterSlaveRuleConfigurations.size()); for (MasterSlaveRuleConfiguration each : masterSlaveRuleConfigurations) { result.add(new MasterSlaveRule(each)); } return result; }
private Map<String, RuleConfiguration> getRuleConfigurationMap() { MasterSlaveRule masterSlaveRule = dataSource.getMasterSlaveRule(); Map<String, RuleConfiguration> result = new HashMap<>(); result.put(ShardingConstant.LOGIC_SCHEMA_NAME, new MasterSlaveRuleConfiguration( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), masterSlaveRule.getSlaveDataSourceNames(), masterSlaveRule.getLoadBalanceAlgorithm())); return result; }
/** * Find master slave rule. * * @param dataSourceName data source name * @return master slave rule */ public Optional<MasterSlaveRule> findMasterSlaveRule(final String dataSourceName) { for (MasterSlaveRule each : masterSlaveRules) { if (each.containDataSourceName(dataSourceName)) { return Optional.of(each); } } return Optional.absent(); }
private void reviseMasterSlaveMetaData(final Map<String, DataSourceMetaData> dataSourceMetaDataMap, final DataSourceMetaData masterSlaveDataSourceMetaData, final MasterSlaveRule masterSlaveRule) { dataSourceMetaDataMap.put(masterSlaveRule.getName(), masterSlaveDataSourceMetaData); dataSourceMetaDataMap.remove(masterSlaveRule.getMasterDataSourceName()); for (String each : masterSlaveRule.getSlaveDataSourceNames()) { dataSourceMetaDataMap.remove(each); } }
private Optional<String> findMasterDataSourceName(final String masterSlaveRuleName) { for (MasterSlaveRule each : masterSlaveRules) { if (each.getName().equals(masterSlaveRuleName)) { return Optional.of(each.getMasterDataSourceName()); } } return Optional.absent(); }
/** * Get slave data source names. * * @return available slave data source names */ @Override public Collection<String> getSlaveDataSourceNames() { if (disabledDataSourceNames.isEmpty()) { return super.getSlaveDataSourceNames(); } Collection<String> result = new LinkedList<>(super.getSlaveDataSourceNames()); result.removeAll(disabledDataSourceNames); return result; }
private Map<String, DataSourceMetaData> getDataSourceMetaDataMapForMasterSlave(final ShardingRule shardingRule, final Map<String, DataSourceMetaData> dataSourceMetaDataMap) { Map<String, DataSourceMetaData> result = new LinkedHashMap<>(dataSourceMetaDataMap); for (Entry<String, DataSourceMetaData> entry : dataSourceMetaDataMap.entrySet()) { Optional<MasterSlaveRule> masterSlaveRule = shardingRule.findMasterSlaveRule(entry.getKey()); if (masterSlaveRule.isPresent() && masterSlaveRule.get().getMasterDataSourceName().equals(entry.getKey())) { reviseMasterSlaveMetaData(result, entry.getValue(), masterSlaveRule.get()); } } return result; }
public OrchestrationMasterSlaveDataSource(final MasterSlaveDataSource masterSlaveDataSource, final OrchestrationConfiguration orchestrationConfig) throws SQLException { super(new ShardingOrchestrationFacade(orchestrationConfig, Collections.singletonList(ShardingConstant.LOGIC_SCHEMA_NAME))); dataSource = new MasterSlaveDataSource(masterSlaveDataSource.getDataSourceMap(), new OrchestrationMasterSlaveRule(masterSlaveDataSource.getMasterSlaveRule().getMasterSlaveRuleConfiguration()), ConfigMapContext.getInstance().getConfigMap(), masterSlaveDataSource.getShardingProperties().getProps()); getShardingOrchestrationFacade().init(Collections.singletonMap(ShardingConstant.LOGIC_SCHEMA_NAME, DataSourceConverter.getDataSourceConfigurationMap(dataSource.getDataSourceMap())), getRuleConfigurationMap(), null, ConfigMapContext.getInstance().getConfigMap(), dataSource.getShardingProperties().getProps()); }
/** * Convert to SQL unit. * * @param masterSlaveRule master slave rule * @param shardingDataSourceMetaData sharding data source meta data * @return SQL */ public String toSQL(final MasterSlaveRule masterSlaveRule, final ShardingDataSourceMetaData shardingDataSourceMetaData) { StringBuilder result = new StringBuilder(); for (Object each : segments) { if (each instanceof SchemaPlaceholder) { result.append(shardingDataSourceMetaData.getActualDataSourceMetaData(masterSlaveRule.getMasterDataSourceName()).getSchemaName()); } else { result.append(each); } } return result.toString(); }
private Collection<String> route(final SQLType sqlType) { if (isMasterRoute(sqlType)) { MasterVisitedManager.setMasterVisited(); return Collections.singletonList(masterSlaveRule.getMasterDataSourceName()); } return Collections.singletonList(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames()))); }
private MasterSlaveRule createMasterSlaveRule(final MasterSlaveRuleConfiguration masterSlaveRuleConfig, final boolean isUsingRegistry) { return isUsingRegistry ? new OrchestrationMasterSlaveRule(masterSlaveRuleConfig) : new MasterSlaveRule(masterSlaveRuleConfig); }
private void route(final MasterSlaveRule masterSlaveRule, final SQLRouteResult sqlRouteResult) { Collection<RouteUnit> toBeRemoved = new LinkedList<>(); Collection<RouteUnit> toBeAdded = new LinkedList<>(); for (RouteUnit each : sqlRouteResult.getRouteUnits()) { if (!masterSlaveRule.getName().equalsIgnoreCase(each.getDataSourceName())) { continue; } toBeRemoved.add(each); if (isMasterRoute(sqlRouteResult.getSqlStatement().getType())) { MasterVisitedManager.setMasterVisited(); toBeAdded.add(new RouteUnit(masterSlaveRule.getMasterDataSourceName(), each.getSqlUnit())); } else { toBeAdded.add(new RouteUnit(masterSlaveRule.getLoadBalanceAlgorithm().getDataSource( masterSlaveRule.getName(), masterSlaveRule.getMasterDataSourceName(), new ArrayList<>(masterSlaveRule.getSlaveDataSourceNames())), each.getSqlUnit())); } } sqlRouteResult.getRouteUnits().removeAll(toBeRemoved); sqlRouteResult.getRouteUnits().addAll(toBeAdded); }
private MasterSlaveRule createMasterSlaveRule(final MasterSlaveRuleConfiguration masterSlaveRuleConfig, final boolean isUsingRegistry) { return isUsingRegistry ? new OrchestrationMasterSlaveRule(masterSlaveRuleConfig) : new MasterSlaveRule(masterSlaveRuleConfig); }
public MasterSlaveDataSource(final Map<String, DataSource> dataSourceMap, final MasterSlaveRuleConfiguration masterSlaveRuleConfig, final Map<String, Object> configMap, final Properties props) throws SQLException { super(dataSourceMap); cachedDatabaseMetaData = createCachedDatabaseMetaData(dataSourceMap); if (!configMap.isEmpty()) { ConfigMapContext.getInstance().getConfigMap().putAll(configMap); } this.masterSlaveRule = new MasterSlaveRule(masterSlaveRuleConfig); shardingProperties = new ShardingProperties(null == props ? new Properties() : props); }