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);
     }
 }