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 a1a8373caec Refactor MetaDataRefreshEngine (#18391)
a1a8373caec is described below

commit a1a8373caecd4467f579f4445e691bcdcab6d8d5
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jun 16 17:08:27 2022 +0800

    Refactor MetaDataRefreshEngine (#18391)
    
    * Refactor MetaDataRefreshEngineTest
    
    * Refactor MetaDataRefreshEngine
---
 .../infra/context/refresher/MetaDataRefreshEngine.java    | 15 ++++++++-------
 .../context/refresher/MetaDataRefreshEngineTest.java      | 15 ++++++++++-----
 .../type/DummyDropDatabaseMetaDataRefresher.java          |  6 +++++-
 .../driver/executor/DriverJDBCExecutor.java               |  5 +----
 .../communication/DatabaseCommunicationEngine.java        |  4 +---
 5 files changed, 25 insertions(+), 20 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
index 01ed9b71c66..e287b8ca6a7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/main/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngine.java
@@ -25,6 +25,7 @@ import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.Opti
 import 
org.apache.shardingsphere.infra.federation.optimizer.metadata.FederationDatabaseMetaData;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import 
org.apache.shardingsphere.infra.metadata.database.schema.event.MetaDataRefreshedEvent;
+import org.apache.shardingsphere.infra.route.context.RouteUnit;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 
 import java.sql.SQLException;
@@ -34,7 +35,7 @@ import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
-import java.util.function.Supplier;
+import java.util.stream.Collectors;
 
 /**
  * Meta data refresh engine.
@@ -53,15 +54,15 @@ public final class MetaDataRefreshEngine {
     private final ConfigurationProperties props;
     
     /**
-     * Refresh.
+     * Refresh meta data.
      *
      * @param sqlStatementContext SQL statement context
-     * @param logicDataSourceNamesSupplier logic data source names supplier
+     * @param routeUnits route units
      * @throws SQLException SQL exception
      * @return meta data refreshed event
      */
     @SuppressWarnings({"unchecked", "rawtypes"})
-    public Optional<MetaDataRefreshedEvent> refresh(final 
SQLStatementContext<?> sqlStatementContext, final Supplier<Collection<String>> 
logicDataSourceNamesSupplier) throws SQLException {
+    public Optional<MetaDataRefreshedEvent> refresh(final 
SQLStatementContext<?> sqlStatementContext, final Collection<RouteUnit> 
routeUnits) throws SQLException {
         Class<? extends SQLStatement> sqlStatementClass = 
sqlStatementContext.getSqlStatement().getClass();
         if (IGNORABLE_SQL_STATEMENT_CLASSES.contains(sqlStatementClass)) {
             return Optional.empty();
@@ -70,10 +71,10 @@ public final class MetaDataRefreshEngine {
         if (schemaRefresher.isPresent()) {
             String schemaName = 
sqlStatementContext.getTablesContext().getSchemaName()
                     .orElseGet(() -> 
DatabaseTypeEngine.getDefaultSchemaName(sqlStatementContext.getDatabaseType(), 
database.getName()));
-            return schemaRefresher.get().refresh(database, federationMetaData, 
optimizerPlanners, logicDataSourceNamesSupplier.get(), schemaName, 
sqlStatementContext.getSqlStatement(), props);
-        } else {
-            IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
+            Collection<String> logicDataSourceNames = 
routeUnits.stream().map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList());
+            return schemaRefresher.get().refresh(database, federationMetaData, 
optimizerPlanners, logicDataSourceNames, schemaName, 
sqlStatementContext.getSqlStatement(), props);
         }
+        IGNORABLE_SQL_STATEMENT_CLASSES.add(sqlStatementClass);
         return Optional.empty();
     }
 }
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
index fa19903d80c..f39963ac114 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/MetaDataRefreshEngineTest.java
@@ -20,6 +20,7 @@ package org.apache.shardingsphere.infra.context.refresher;
 import lombok.SneakyThrows;
 import org.apache.shardingsphere.infra.binder.segment.table.TablesContext;
 import org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
+import 
org.apache.shardingsphere.infra.context.refresher.type.DummyDropDatabaseMetaDataRefresher;
 import org.apache.shardingsphere.infra.database.type.dialect.MySQLDatabaseType;
 import 
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
 import org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
@@ -33,13 +34,14 @@ import org.mockito.junit.MockitoJUnitRunner;
 import java.lang.reflect.Field;
 import java.sql.SQLException;
 import java.util.Collections;
+import java.util.Optional;
 import java.util.Set;
 
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
@@ -48,6 +50,7 @@ public final class MetaDataRefreshEngineTest {
     @InjectMocks
     private MetaDataRefreshEngine metaDataRefreshEngine;
     
+    @SuppressWarnings("rawtypes")
     @Test
     public void assertRefreshNonIgnorableSQLStatement() throws Exception {
         SQLStatementContext<DropDatabaseStatement> sqlStatementContext = 
mock(SQLStatementContext.class);
@@ -61,9 +64,11 @@ public final class MetaDataRefreshEngineTest {
         field.set(metaDataRefreshEngine, database);
         int dropTimes = 10;
         for (int i = 0; i < dropTimes; i++) {
-            metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections::emptyList);
+            metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections.emptyList());
         }
-        verify(sqlStatementContext.getSqlStatement(), 
times(dropTimes)).getDatabaseName();
+        Optional<MetaDataRefresher> refresher = 
MetaDataRefresherFactory.findInstance(mock(DropDatabaseStatement.class).getClass());
+        assertTrue(refresher.isPresent());
+        assertThat(((DummyDropDatabaseMetaDataRefresher) 
refresher.get()).getCount(), is(dropTimes));
     }
     
     @SuppressWarnings("unchecked")
@@ -71,7 +76,7 @@ public final class MetaDataRefreshEngineTest {
     public void assertRefreshIgnorableSQLStatement() throws SQLException {
         SQLStatementContext<SelectStatement> sqlStatementContext = 
mock(SQLStatementContext.class);
         
when(sqlStatementContext.getSqlStatement()).thenReturn(mock(SelectStatement.class));
-        metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections::emptyList);
+        metaDataRefreshEngine.refresh(sqlStatementContext, 
Collections.emptyList());
         
assertTrue(getIgnorableSQLStatementClasses().contains(sqlStatementContext.getSqlStatement().getClass()));
     }
     
diff --git 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
index 14e8e236397..79708343983 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-context/src/test/java/org/apache/shardingsphere/infra/context/refresher/type/DummyDropDatabaseMetaDataRefresher.java
@@ -17,6 +17,7 @@
 
 package org.apache.shardingsphere.infra.context.refresher.type;
 
+import lombok.Getter;
 import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
 import org.apache.shardingsphere.infra.context.refresher.MetaDataRefresher;
 import 
org.apache.shardingsphere.infra.federation.optimizer.context.planner.OptimizerPlannerContext;
@@ -29,14 +30,17 @@ import java.util.Collection;
 import java.util.Map;
 import java.util.Optional;
 
+@Getter
 public final class DummyDropDatabaseMetaDataRefresher implements 
MetaDataRefresher<DropDatabaseStatement> {
     
+    private int count;
+    
     @Override
     public Optional<MetaDataRefreshedEvent> refresh(final 
ShardingSphereDatabase database, final FederationDatabaseMetaData 
federationDatabaseMetaData,
                                                     final Map<String, 
OptimizerPlannerContext> optimizerPlanners,
                                                     final Collection<String> 
logicDataSourceNames, final String schemaName, final DropDatabaseStatement 
sqlStatement,
                                                     final 
ConfigurationProperties props) {
-        sqlStatement.getDatabaseName();
+        count++;
         return Optional.empty();
     }
     
diff --git 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
index eea7f4e617a..ef92b8f714c 100644
--- 
a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
+++ 
b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverJDBCExecutor.java
@@ -37,11 +37,9 @@ import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
 
 import java.sql.SQLException;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * Driver JDBC executor.
@@ -162,8 +160,7 @@ public final class DriverJDBCExecutor {
     }
     
     private void refreshMetaData(final SQLStatementContext<?> 
sqlStatementContext, final Collection<RouteUnit> routeUnits) throws 
SQLException {
-        Optional<MetaDataRefreshedEvent> event = 
metadataRefreshEngine.refresh(sqlStatementContext, () -> routeUnits.stream()
-                .map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toCollection(() 
-> new ArrayList<>(routeUnits.size()))));
+        Optional<MetaDataRefreshedEvent> event = 
metadataRefreshEngine.refresh(sqlStatementContext, routeUnits);
         if (contextManager.getInstanceContext().isCluster() && 
event.isPresent()) {
             ShardingSphereEventBus.getInstance().post(event.get());
         }
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
index 70feea1c4b8..eff0d08e2a9 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-backend/src/main/java/org/apache/shardingsphere/proxy/backend/communication/DatabaseCommunicationEngine.java
@@ -55,7 +55,6 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
-import java.util.stream.Collectors;
 
 /**
  * Database communication engine.
@@ -106,8 +105,7 @@ public abstract class DatabaseCommunicationEngine<T> {
     public abstract T execute();
     
     protected void refreshMetaData(final ExecutionContext executionContext) 
throws SQLException {
-        Optional<MetaDataRefreshedEvent> event = 
metadataRefreshEngine.refresh(executionContext.getSqlStatementContext(), () -> 
executionContext.getRouteContext().getRouteUnits().stream()
-                .map(each -> 
each.getDataSourceMapper().getLogicName()).collect(Collectors.toList()));
+        Optional<MetaDataRefreshedEvent> event = 
metadataRefreshEngine.refresh(executionContext.getSqlStatementContext(), 
executionContext.getRouteContext().getRouteUnits());
         if 
(ProxyContext.getInstance().getContextManager().getInstanceContext().isCluster()
 && event.isPresent()) {
             ShardingSphereEventBus.getInstance().post(event.get());
         }

Reply via email to