This is an automated email from the ASF dual-hosted git repository.
panjuan 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 2d58c97 Refresh TableAddressingMetaData when DDL executed (#8013)
2d58c97 is described below
commit 2d58c97e6e585675a20de59cc0f8285290620b27
Author: Liang Zhang <[email protected]>
AuthorDate: Tue Nov 3 14:32:22 2020 +0800
Refresh TableAddressingMetaData when DDL executed (#8013)
---
.../model/addressing/TableAddressingMetaData.java | 4 ++--
.../CreateTableStatementMetaDataRefreshStrategy.java | 15 +++++++++++++++
.../CreateViewStatementMetaDataRefreshStrategy.java | 18 ++++++++++++++++--
.../DropTableStatementMetaDataRefreshStrategy.java | 1 +
.../impl/DropViewStatementMetaDataRefreshStrategy.java | 1 +
5 files changed, 35 insertions(+), 4 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/addressing/TableAddressingMetaData.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/addressing/TableAddressingMetaData.java
index ffc3af6..76c6eb8 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/addressing/TableAddressingMetaData.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/model/addressing/TableAddressingMetaData.java
@@ -20,8 +20,8 @@ package
org.apache.shardingsphere.infra.metadata.model.addressing;
import lombok.Getter;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
/**
* Table addressing meta data.
@@ -29,5 +29,5 @@ import java.util.Map;
@Getter
public final class TableAddressingMetaData {
- private final Map<String, Collection<String>> tableDataSourceNamesMapper =
new HashMap<>();
+ private final Map<String, Collection<String>> tableDataSourceNamesMapper =
new ConcurrentHashMap<>();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
index 610262b..1c05d3c 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateTableStatementMetaDataRefreshStrategy.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.metadata.refresh.impl;
import com.google.common.collect.Lists;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.model.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.model.addressing.TableAddressingMetaData;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.table.PhysicalTableMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
@@ -46,6 +47,7 @@ public final class
CreateTableStatementMetaDataRefreshStrategy implements MetaDa
refreshUnconfiguredMetaData(metaData, routeDataSourceNames,
tableName);
metaData.getSchemaMetaData().getSchemaMetaData().put(tableName,
new PhysicalTableMetaData());
}
+ refreshTableAddressingMetaData(metaData.getTableAddressingMetaData(),
tableName, routeDataSourceNames);
}
private void refreshUnconfiguredMetaData(final ShardingSphereMetaData
metaData, final Collection<String> routeDataSourceNames, final String
tableName) {
@@ -62,4 +64,17 @@ public final class
CreateTableStatementMetaDataRefreshStrategy implements MetaDa
schemaMetaData.add(tableName);
}
}
+
+ private void refreshTableAddressingMetaData(final TableAddressingMetaData
tableAddressingMetaData, final String tableName, final Collection<String>
routeDataSourceNames) {
+ for (String each : routeDataSourceNames) {
+ refreshTableAddressingMetaData(tableAddressingMetaData, tableName,
each);
+ }
+ }
+
+ private void refreshTableAddressingMetaData(final TableAddressingMetaData
tableAddressingMetaData, final String tableName, final String dataSourceName) {
+ Collection<String> previousDataSourceNames =
tableAddressingMetaData.getTableDataSourceNamesMapper().putIfAbsent(tableName,
Lists.newArrayList(dataSourceName));
+ if (null != previousDataSourceNames) {
+ previousDataSourceNames.add(dataSourceName);
+ }
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateViewStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateViewStatementMetaDataRefreshStrategy.java
index a75e0ab..aae2fe3 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateViewStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/CreateViewStatementMetaDataRefreshStrategy.java
@@ -20,12 +20,12 @@ package
org.apache.shardingsphere.infra.metadata.refresh.impl;
import com.google.common.collect.Lists;
import org.apache.shardingsphere.infra.database.type.DatabaseType;
import org.apache.shardingsphere.infra.metadata.model.ShardingSphereMetaData;
+import
org.apache.shardingsphere.infra.metadata.model.addressing.TableAddressingMetaData;
import
org.apache.shardingsphere.infra.metadata.model.physical.model.table.PhysicalTableMetaData;
import
org.apache.shardingsphere.infra.metadata.refresh.MetaDataRefreshStrategy;
import
org.apache.shardingsphere.infra.metadata.refresh.TableMetaDataLoaderCallback;
import
org.apache.shardingsphere.sql.parser.sql.common.statement.ddl.CreateViewStatement;
-import java.sql.SQLException;
import java.util.Collection;
/**
@@ -35,10 +35,11 @@ public final class
CreateViewStatementMetaDataRefreshStrategy implements MetaDat
@Override
public void refreshMetaData(final ShardingSphereMetaData metaData, final
DatabaseType databaseType, final Collection<String> routeDataSourceNames,
- final CreateViewStatement sqlStatement, final
TableMetaDataLoaderCallback callback) throws SQLException {
+ final CreateViewStatement sqlStatement, final
TableMetaDataLoaderCallback callback) {
String viewName =
sqlStatement.getView().getTableName().getIdentifier().getValue();
refreshUnconfiguredMetaData(metaData, routeDataSourceNames, viewName);
metaData.getSchemaMetaData().getSchemaMetaData().put(viewName, new
PhysicalTableMetaData());
+ refreshTableAddressingMetaData(metaData.getTableAddressingMetaData(),
viewName, routeDataSourceNames);
}
private void refreshUnconfiguredMetaData(final ShardingSphereMetaData
metaData, final Collection<String> routeDataSourceNames, final String viewName)
{
@@ -55,4 +56,17 @@ public final class
CreateViewStatementMetaDataRefreshStrategy implements MetaDat
schemaMetaData.add(viewName);
}
}
+
+ private void refreshTableAddressingMetaData(final TableAddressingMetaData
tableAddressingMetaData, final String tableName, final Collection<String>
routeDataSourceNames) {
+ for (String each : routeDataSourceNames) {
+ refreshTableAddressingMetaData(tableAddressingMetaData, tableName,
each);
+ }
+ }
+
+ private void refreshTableAddressingMetaData(final TableAddressingMetaData
tableAddressingMetaData, final String tableName, final String dataSourceName) {
+ Collection<String> previousDataSourceNames =
tableAddressingMetaData.getTableDataSourceNamesMapper().putIfAbsent(tableName,
Lists.newArrayList(dataSourceName));
+ if (null != previousDataSourceNames) {
+ previousDataSourceNames.add(dataSourceName);
+ }
+ }
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
index e839592..9f70546 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropTableStatementMetaDataRefreshStrategy.java
@@ -45,5 +45,6 @@ public final class DropTableStatementMetaDataRefreshStrategy
implements MetaData
}
}
metaData.getSchemaMetaData().getSchemaMetaData().remove(tableName);
+
metaData.getTableAddressingMetaData().getTableDataSourceNamesMapper().remove(tableName);
}
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropViewStatementMetaDataRefreshStrategy.java
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropViewStatementMetaDataRefreshStrategy.java
index 2e735ac..009b836 100644
---
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropViewStatementMetaDataRefreshStrategy.java
+++
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/metadata/refresh/impl/DropViewStatementMetaDataRefreshStrategy.java
@@ -44,5 +44,6 @@ public final class DropViewStatementMetaDataRefreshStrategy
implements MetaDataR
}
}
metaData.getSchemaMetaData().getSchemaMetaData().remove(viewName);
+
metaData.getTableAddressingMetaData().getTableDataSourceNamesMapper().remove(viewName);
}
}