This is an automated email from the ASF dual-hosted git repository.
duanzhengqiang 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 ed2c62b Static SchemaMetaDataLoader (#8063)
ed2c62b is described below
commit ed2c62b8284609a8faebf547cd19173a39b990a4
Author: Liang Zhang <[email protected]>
AuthorDate: Sat Nov 7 15:04:26 2020 +0800
Static SchemaMetaDataLoader (#8063)
---
.../schema/loader/SchemaMetaDataLoader.java | 41 ++++++++++++----------
.../schema/loader/SchemaMetaDataLoaderTest.java | 10 +++---
.../context/schema/SchemaContextsBuilder.java | 2 +-
.../driver/executor/AbstractStatementExecutor.java | 3 +-
.../jdbc/JDBCDatabaseCommunicationEngine.java | 5 ++-
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
index 343201b..87275b7 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoader.java
@@ -17,7 +17,8 @@
package org.apache.shardingsphere.infra.metadata.schema.loader;
-import lombok.RequiredArgsConstructor;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
import
org.apache.shardingsphere.infra.config.properties.ConfigurationProperties;
import org.apache.shardingsphere.infra.database.DefaultSchema;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
@@ -34,6 +35,7 @@ import
org.apache.shardingsphere.infra.spi.ordered.OrderedSPIRegistry;
import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.Collection;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -43,7 +45,7 @@ import java.util.TreeSet;
/**
* Schema meta data loader.
*/
-@RequiredArgsConstructor
+@NoArgsConstructor(access = AccessLevel.PRIVATE)
public final class SchemaMetaDataLoader {
static {
@@ -51,19 +53,19 @@ public final class SchemaMetaDataLoader {
ShardingSphereServiceLoader.register(ShardingSphereMetaDataDecorator.class);
}
- private final Collection<ShardingSphereRule> rules;
-
/**
* Load schema meta data.
*
* @param databaseType database type
* @param dataSourceMap data source map
+ * @param rules ShardingSphere rules
* @param props configuration properties
* @return schema meta data
* @throws SQLException SQL exception
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public PhysicalSchemaMetaData load(final DatabaseType databaseType, final
Map<String, DataSource> dataSourceMap, final ConfigurationProperties props)
throws SQLException {
+ public static PhysicalSchemaMetaData load(final DatabaseType databaseType,
final Map<String, DataSource> dataSourceMap,
+ final Collection<ShardingSphereRule>
rules, final ConfigurationProperties props) throws SQLException {
Collection<String> excludedTableNames = new
TreeSet<>(String.CASE_INSENSITIVE_ORDER);
PhysicalSchemaMetaData result = new PhysicalSchemaMetaData();
for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class).entrySet()) {
@@ -74,7 +76,7 @@ public final class SchemaMetaDataLoader {
}
result.merge(schemaMetaData);
}
- decorate(result);
+ decorate(rules, result);
return result;
}
@@ -83,14 +85,14 @@ public final class SchemaMetaDataLoader {
*
* @param databaseType database type
* @param dataSource data source
+ * @param rules ShardingSphere rules
* @param props configuration properties
* @return schema meta data
* @throws SQLException SQL exception
*/
- public PhysicalSchemaMetaData load(final DatabaseType databaseType, final
DataSource dataSource, final ConfigurationProperties props) throws SQLException
{
- Map<String, DataSource> dataSourceMap = new HashMap<>(1, 1);
- dataSourceMap.put(DefaultSchema.LOGIC_NAME, dataSource);
- return load(databaseType, dataSourceMap, props);
+ public static PhysicalSchemaMetaData load(final DatabaseType databaseType,
final DataSource dataSource,
+ final Collection<ShardingSphereRule>
rules, final ConfigurationProperties props) throws SQLException {
+ return load(databaseType,
Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSource), rules, props);
}
/**
@@ -98,18 +100,19 @@ public final class SchemaMetaDataLoader {
*
* @param databaseType database type
* @param dataSourceMap data source map
+ * @param rules ShardingSphere rules
* @param tableName table name
* @param props configuration properties
* @return schema meta data
* @throws SQLException SQL exception
*/
@SuppressWarnings({"unchecked", "rawtypes"})
- public Optional<PhysicalTableMetaData> load(final DatabaseType
databaseType, final Map<String, DataSource> dataSourceMap,
- final String tableName, final
ConfigurationProperties props) throws SQLException {
+ public static Optional<PhysicalTableMetaData> load(final DatabaseType
databaseType, final Map<String, DataSource> dataSourceMap,
+ final
Collection<ShardingSphereRule> rules, final String tableName, final
ConfigurationProperties props) throws SQLException {
for (Entry<ShardingSphereRule, ShardingSphereMetaDataLoader> entry :
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataLoader.class).entrySet()) {
Optional<PhysicalTableMetaData> result =
entry.getValue().load(databaseType, dataSourceMap, new DataNodes(rules),
tableName, entry.getKey(), props);
if (result.isPresent()) {
- return Optional.of(decorate(tableName, result.get()));
+ return Optional.of(decorate(rules, tableName, result.get()));
}
}
return Optional.empty();
@@ -120,19 +123,19 @@ public final class SchemaMetaDataLoader {
*
* @param databaseType database type
* @param dataSource data source
+ * @param rules ShardingSphere rules
* @param tableName table name
* @param props configuration properties
* @return schema meta data
* @throws SQLException SQL exception
*/
- public Optional<PhysicalTableMetaData> load(final DatabaseType
databaseType, final DataSource dataSource, final String tableName, final
ConfigurationProperties props) throws SQLException {
- Map<String, DataSource> dataSourceMap = new HashMap<>(1, 1);
- dataSourceMap.put(DefaultSchema.LOGIC_NAME, dataSource);
- return load(databaseType, dataSourceMap, tableName, props);
+ public static Optional<PhysicalTableMetaData> load(final DatabaseType
databaseType, final DataSource dataSource,
+ final
Collection<ShardingSphereRule> rules, final String tableName, final
ConfigurationProperties props) throws SQLException {
+ return load(databaseType,
Collections.singletonMap(DefaultSchema.LOGIC_NAME, dataSource), rules,
tableName, props);
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private void decorate(final PhysicalSchemaMetaData schemaMetaData) {
+ private static void decorate(final Collection<ShardingSphereRule> rules,
final PhysicalSchemaMetaData schemaMetaData) {
Map<String, PhysicalTableMetaData> tableMetaDataMap = new
HashMap<>(schemaMetaData.getAllTableNames().size(), 1);
Map<ShardingSphereRule, ShardingSphereMetaDataDecorator> decorators =
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataDecorator.class);
for (String each : schemaMetaData.getAllTableNames()) {
@@ -144,7 +147,7 @@ public final class SchemaMetaDataLoader {
}
@SuppressWarnings({"unchecked", "rawtypes"})
- private PhysicalTableMetaData decorate(final String tableName, final
PhysicalTableMetaData tableMetaData) {
+ private static PhysicalTableMetaData decorate(final
Collection<ShardingSphereRule> rules, final String tableName, final
PhysicalTableMetaData tableMetaData) {
Map<ShardingSphereRule, ShardingSphereMetaDataDecorator> decorators =
OrderedSPIRegistry.getRegisteredServices(rules,
ShardingSphereMetaDataDecorator.class);
PhysicalTableMetaData result = null;
for (Entry<ShardingSphereRule, ShardingSphereMetaDataDecorator> entry
: decorators.entrySet()) {
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoaderTest.java
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoaderTest.java
index dca4d77..74a1652 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoaderTest.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/test/java/org/apache/shardingsphere/infra/metadata/schema/loader/SchemaMetaDataLoaderTest.java
@@ -49,16 +49,14 @@ public final class SchemaMetaDataLoaderTest {
@Mock
private ConfigurationProperties props;
- private final SchemaMetaDataLoader loader = new
SchemaMetaDataLoader(Arrays.asList(new CommonFixtureRule(), new
DataNodeRoutedFixtureRule()));
-
@Test
public void assertSyncLoadFullDatabases() throws SQLException {
- assertPhysicalSchemaMetaData(loader.load(databaseType, dataSource,
props));
+ assertPhysicalSchemaMetaData(SchemaMetaDataLoader.load(databaseType,
dataSource, Arrays.asList(new CommonFixtureRule(), new
DataNodeRoutedFixtureRule()), props));
}
@Test
public void assertAsyncLoadFullDatabases() throws SQLException {
- assertPhysicalSchemaMetaData(loader.load(databaseType, dataSource,
props));
+ assertPhysicalSchemaMetaData(SchemaMetaDataLoader.load(databaseType,
dataSource, Arrays.asList(new CommonFixtureRule(), new
DataNodeRoutedFixtureRule()), props));
}
private void assertPhysicalSchemaMetaData(final PhysicalSchemaMetaData
actual) {
@@ -73,11 +71,11 @@ public final class SchemaMetaDataLoaderTest {
@Test
public void assertLoadWithExistedTableName() throws SQLException {
- assertTrue(loader.load(databaseType, dataSource,
"data_node_routed_table_0", props).isPresent());
+ assertTrue(SchemaMetaDataLoader.load(databaseType, dataSource,
Arrays.asList(new CommonFixtureRule(), new DataNodeRoutedFixtureRule()),
"data_node_routed_table_0", props).isPresent());
}
@Test
public void assertLoadWithNotExistedTableName() throws SQLException {
- assertFalse(loader.load(databaseType, dataSource, "invalid_table",
props).isPresent());
+ assertFalse(SchemaMetaDataLoader.load(databaseType, dataSource,
Arrays.asList(new CommonFixtureRule(), new DataNodeRoutedFixtureRule()),
"invalid_table", props).isPresent());
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
index 1cfaa3e..994d918 100644
---
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
+++
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/schema/SchemaContextsBuilder.java
@@ -135,7 +135,7 @@ public final class SchemaContextsBuilder {
private ShardingSphereSchema buildSchema(final String schemaName, final
Map<String, DataSource> dataSourceMap, final Collection<ShardingSphereRule>
rules) throws SQLException {
long start = System.currentTimeMillis();
TableAddressingMetaData tableAddressingMetaData =
TableAddressingMetaDataLoader.load(databaseType, dataSourceMap, rules);
- PhysicalSchemaMetaData physicalSchemaMetaData = new
SchemaMetaDataLoader(rules).load(databaseType, dataSourceMap, props);
+ PhysicalSchemaMetaData physicalSchemaMetaData =
SchemaMetaDataLoader.load(databaseType, dataSourceMap, rules, props);
ShardingSphereSchema result = new
ShardingSphereSchema(tableAddressingMetaData, physicalSchemaMetaData);
log.info("Load meta data for schema {} finished, cost {}
milliseconds.", schemaName, System.currentTimeMillis() - start);
return result;
diff --git
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
index fe26171..a0c0118 100644
---
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
+++
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/AbstractStatementExecutor.java
@@ -82,10 +82,9 @@ public abstract class AbstractStatementExecutor {
}
Optional<MetaDataRefreshStrategy> refreshStrategy =
MetaDataRefreshStrategyFactory.newInstance(sqlStatement);
if (refreshStrategy.isPresent()) {
- SchemaMetaDataLoader loader = new
SchemaMetaDataLoader(metaData.getRuleMetaData().getRules());
Collection<String> routeDataSourceNames =
routeUnits.stream().map(RouteUnit::getDataSourceMapper).map(RouteMapper::getLogicName).collect(Collectors.toList());
refreshStrategy.get().refreshMetaData(metaData.getSchema(),
schemaContexts.getDatabaseType(), routeDataSourceNames,
- sqlStatement, tableName ->
loader.load(schemaContexts.getDatabaseType(), dataSourceMap, tableName,
schemaContexts.getProps()));
+ sqlStatement, tableName ->
SchemaMetaDataLoader.load(schemaContexts.getDatabaseType(), dataSourceMap,
metaData.getRuleMetaData().getRules(), tableName, schemaContexts.getProps()));
notifyPersistLogicMetaData(DefaultSchema.LOGIC_NAME,
metaData.getSchema().getSchemaMetaData());
}
}
diff --git
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
index f1fc12a..c2c3271 100644
---
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
+++
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/jdbc/JDBCDatabaseCommunicationEngine.java
@@ -111,9 +111,8 @@ public final class JDBCDatabaseCommunicationEngine
implements DatabaseCommunicat
}
private Optional<PhysicalTableMetaData> loadTableMetaData(final String
tableName) throws SQLException {
- SchemaMetaDataLoader loader = new
SchemaMetaDataLoader(metaData.getRuleMetaData().getRules());
- return loader.load(
-
ProxyContext.getInstance().getSchemaContexts().getDatabaseType(),
metaData.getResource().getDataSources(), tableName,
ProxyContext.getInstance().getSchemaContexts().getProps());
+ return
SchemaMetaDataLoader.load(ProxyContext.getInstance().getSchemaContexts().getDatabaseType(),
+ metaData.getResource().getDataSources(),
metaData.getRuleMetaData().getRules(), tableName,
ProxyContext.getInstance().getSchemaContexts().getProps());
}
private BackendResponse merge(final SQLStatementContext<?>
sqlStatementContext) throws SQLException {