Skip to content

Commit

Permalink
add TableMetaDataInitializer
Browse files Browse the repository at this point in the history
  • Loading branch information
terrymanu committed Aug 1, 2018
1 parent a309987 commit e722c34
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,10 @@

package io.shardingsphere.core.metadata.table;

import com.google.common.base.Optional;
import com.google.common.util.concurrent.ListeningExecutorService;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.core.metadata.table.executor.TableLoader;
import io.shardingsphere.core.metadata.table.executor.TableMetaDataExecutorAdapter;
import io.shardingsphere.core.metadata.table.executor.TableMetaDataLoader;
import io.shardingsphere.core.rule.ShardingRule;
import io.shardingsphere.core.rule.TableRule;
import lombok.RequiredArgsConstructor;

import java.sql.SQLException;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
* Sharding table meta data.
Expand All @@ -38,43 +29,10 @@
* @author zhaojun
* @author zhangliang
*/
@RequiredArgsConstructor
public class ShardingTableMetaData {

private final TableLoader tableLoader;

private final TableMetaDataLoader tableMetaDataLoader;

private final Map<String, TableMetaData> tableMetaDataMap = new ConcurrentHashMap<>();

public ShardingTableMetaData(final ShardingRule shardingRule, final ListeningExecutorService executorService, final TableMetaDataExecutorAdapter executorAdapter) {
tableLoader = new TableLoader(executorAdapter);
tableMetaDataLoader = new TableMetaDataLoader(executorService, executorAdapter);
init(shardingRule);
}

private void init(final ShardingRule shardingRule) {
try {
initLogicTables(shardingRule);
initDefaultTables(shardingRule);
} catch (final SQLException ex) {
throw new ShardingException(ex);
}
}

private void initLogicTables(final ShardingRule shardingRule) {
for (TableRule each : shardingRule.getTableRules()) {
tableMetaDataMap.put(each.getLogicTable(), tableMetaDataLoader.loadTableMetaData(each.getLogicTable(), shardingRule));
}
}

private void initDefaultTables(final ShardingRule shardingRule) throws SQLException {
Optional<String> actualDefaultDataSourceName = shardingRule.findActualDefaultDataSourceName();
if (actualDefaultDataSourceName.isPresent()) {
for (String each : tableLoader.getAllTableNames(actualDefaultDataSourceName.get())) {
tableMetaDataMap.put(each, tableMetaDataLoader.loadTableMetaData(each, shardingRule));
}
}
}
private final Map<String, TableMetaData> tableMetaDataMap;

/**
* Add table meta data.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
/*
* Copyright 2016-2018 shardingsphere.io.
* <p>
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* </p>
*/

package io.shardingsphere.core.metadata.table.executor;

import com.google.common.base.Optional;
import com.google.common.util.concurrent.ListeningExecutorService;
import io.shardingsphere.core.exception.ShardingException;
import io.shardingsphere.core.metadata.table.TableMetaData;
import io.shardingsphere.core.rule.ShardingRule;
import io.shardingsphere.core.rule.TableRule;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
* Table meta data initializer.
*
* @author zhangliang
*/
public final class TableMetaDataInitializer {

private final TableLoader tableLoader;

private final TableMetaDataLoader tableMetaDataLoader;

public TableMetaDataInitializer(final ListeningExecutorService executorService, final TableMetaDataExecutorAdapter executorAdapter) {
tableLoader = new TableLoader(executorAdapter);
tableMetaDataLoader = new TableMetaDataLoader(executorService, executorAdapter);
}

/**
* Load all table meta data.
* @param shardingRule sharding rule
* @return all table meta data
*/
public Map<String, TableMetaData> load(final ShardingRule shardingRule) {
Map<String, TableMetaData> result = new HashMap<>();
try {
result.putAll(loadShardingTables(shardingRule));
result.putAll(loadDefaultTables(shardingRule));
} catch (final SQLException ex) {
throw new ShardingException(ex);
}
return result;
}

private Map<String, TableMetaData> loadShardingTables(final ShardingRule shardingRule) {
Map<String, TableMetaData> result = new HashMap<>(shardingRule.getTableRules().size(), 1);
for (TableRule each : shardingRule.getTableRules()) {
result.put(each.getLogicTable(), tableMetaDataLoader.loadTableMetaData(each.getLogicTable(), shardingRule));
}
return result;
}

private Map<String, TableMetaData> loadDefaultTables(final ShardingRule shardingRule) throws SQLException {
Map<String, TableMetaData> result = new HashMap<>(shardingRule.getTableRules().size(), 1);
Optional<String> actualDefaultDataSourceName = shardingRule.findActualDefaultDataSourceName();
if (actualDefaultDataSourceName.isPresent()) {
for (String each : tableLoader.getAllTableNames(actualDefaultDataSourceName.get())) {
result.put(each, tableMetaDataLoader.loadTableMetaData(each, shardingRule));
}
}
return result;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import io.shardingsphere.core.jdbc.core.connection.ShardingConnection;
import io.shardingsphere.core.jdbc.metadata.DataSourceMapTableMetaDataExecutorAdapter;
import io.shardingsphere.core.metadata.table.ShardingTableMetaData;
import io.shardingsphere.core.metadata.table.executor.TableMetaDataInitializer;
import io.shardingsphere.core.rule.MasterSlaveRule;
import io.shardingsphere.core.rule.ShardingRule;
import lombok.Getter;
Expand Down Expand Up @@ -68,7 +69,8 @@ public ShardingDataSource(final Map<String, DataSource> dataSourceMap, final Sha
shardingProperties = new ShardingProperties(null == props ? new Properties() : props);
int executorSize = shardingProperties.getValue(ShardingPropertiesConstant.EXECUTOR_SIZE);
executorEngine = new ExecutorEngine(executorSize);
ShardingTableMetaData shardingTableMetaData = new ShardingTableMetaData(shardingRule, executorEngine.getExecutorService(), new DataSourceMapTableMetaDataExecutorAdapter(dataSourceMap));
ShardingTableMetaData shardingTableMetaData = new ShardingTableMetaData(
new TableMetaDataInitializer(executorEngine.getExecutorService(), new DataSourceMapTableMetaDataExecutorAdapter(dataSourceMap)).load(shardingRule));
boolean showSQL = shardingProperties.getValue(ShardingPropertiesConstant.SQL_SHOW);
shardingContext = new ShardingContext(dataSourceMap, shardingRule, getDatabaseType(), executorEngine, shardingTableMetaData, showSQL);
}
Expand All @@ -90,7 +92,8 @@ public void renew(final Map<String, DataSource> newDataSourceMap, final Sharding
originalExecutorEngine.close();
}
boolean newShowSQL = newShardingProperties.getValue(ShardingPropertiesConstant.SQL_SHOW);
ShardingTableMetaData shardingMetaData = new ShardingTableMetaData(newShardingRule, executorEngine.getExecutorService(), new DataSourceMapTableMetaDataExecutorAdapter(newDataSourceMap));
ShardingTableMetaData shardingMetaData = new ShardingTableMetaData(
new TableMetaDataInitializer(executorEngine.getExecutorService(), new DataSourceMapTableMetaDataExecutorAdapter(newDataSourceMap)).load(newShardingRule));
shardingProperties = newShardingProperties;
shardingContext = new ShardingContext(newDataSourceMap, newShardingRule, getDatabaseType(), executorEngine, shardingMetaData, newShowSQL);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import io.shardingsphere.core.metadata.ShardingMetaData;
import io.shardingsphere.core.metadata.datasource.ShardingDataSourceMetaData;
import io.shardingsphere.core.metadata.table.ShardingTableMetaData;
import io.shardingsphere.core.metadata.table.executor.TableMetaDataInitializer;
import io.shardingsphere.core.rule.DataSourceParameter;
import io.shardingsphere.core.rule.MasterSlaveRule;
import io.shardingsphere.core.rule.ProxyAuthority;
Expand Down Expand Up @@ -134,7 +135,8 @@ public synchronized void init(final OrchestrationProxyConfiguration config) {
*/
public void initShardingMetaData(final ExecutorService executorService) {
ShardingDataSourceMetaData shardingDataSourceMetaData = new ShardingDataSourceMetaData(getDataSourceURLs(dataSourceConfigurationMap), shardingRule, DatabaseType.MySQL);
ShardingTableMetaData shardingTableMetaData = new ShardingTableMetaData(shardingRule, MoreExecutors.listeningDecorator(executorService), new ProxyTableMetaDataExecutorAdapter(backendDataSource));
ShardingTableMetaData shardingTableMetaData = new ShardingTableMetaData(
new TableMetaDataInitializer(MoreExecutors.listeningDecorator(executorService), new ProxyTableMetaDataExecutorAdapter(backendDataSource)).load(shardingRule));
metaData = new ShardingMetaData(shardingDataSourceMetaData, shardingTableMetaData);
}

Expand Down

0 comments on commit e722c34

Please sign in to comment.