You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2020/11/03 06:34:31 UTC
[shardingsphere] branch master updated: Refresh
TableAddressingMetaData when DDL executed (#8013)
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 <te...@163.com>
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);
}
}