This is an automated email from the ASF dual-hosted git repository.

menghaoran 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 61651b6  Avoid new ArrayList twice in primary replica replication 
router (#7664)
61651b6 is described below

commit 61651b6e74f3c3f9295a53ce2b30a089f46f5c88
Author: Liang Zhang <[email protected]>
AuthorDate: Wed Sep 30 06:56:08 2020 +0800

    Avoid new ArrayList twice in primary replica replication router (#7664)
    
    * Avoid new ArrayList twice in primary replica replication router
    
    * Avoid new ArrayList twice in primary replica replication router
---
 .../engine/PrimaryReplicaReplicationRouteDecorator.java    | 14 +++++++++++---
 .../impl/PrimaryReplicaReplicationDataSourceRouter.java    |  4 +---
 2 files changed, 12 insertions(+), 6 deletions(-)

diff --git 
a/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/PrimaryReplicaReplicationRouteDecorator.java
 
b/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/PrimaryReplicaReplicationRouteDecorator.java
index 9d277e8..f7251d4 100644
--- 
a/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/PrimaryReplicaReplicationRouteDecorator.java
+++ 
b/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/PrimaryReplicaReplicationRouteDecorator.java
@@ -45,10 +45,18 @@ public final class PrimaryReplicaReplicationRouteDecorator 
implements RouteDecor
     public void decorate(final RouteContext routeContext, final 
SQLStatementContext<?> sqlStatementContext, final List<Object> parameters,
                          final ShardingSphereMetaData metaData, final 
PrimaryReplicaReplicationRule rule, final ConfigurationProperties props) {
         if (routeContext.getRouteUnits().isEmpty()) {
-            String dataSourceName = new 
PrimaryReplicaReplicationDataSourceRouter(rule.getSingleDataSourceRule()).route(sqlStatementContext.getSqlStatement());
-            routeContext.getRouteUnits().add(new RouteUnit(new 
RouteMapper(DefaultSchema.LOGIC_NAME, dataSourceName), 
Collections.emptyList()));
-            return;
+            firstDecorate(routeContext, sqlStatementContext, rule);
+        } else {
+            continueDecorate(routeContext, sqlStatementContext, rule);
         }
+    }
+    
+    private void firstDecorate(final RouteContext routeContext, final 
SQLStatementContext<?> sqlStatementContext, final PrimaryReplicaReplicationRule 
rule) {
+        String dataSourceName = new 
PrimaryReplicaReplicationDataSourceRouter(rule.getSingleDataSourceRule()).route(sqlStatementContext.getSqlStatement());
+        routeContext.getRouteUnits().add(new RouteUnit(new 
RouteMapper(DefaultSchema.LOGIC_NAME, dataSourceName), 
Collections.emptyList()));
+    }
+    
+    private void continueDecorate(final RouteContext routeContext, final 
SQLStatementContext<?> sqlStatementContext, final PrimaryReplicaReplicationRule 
rule) {
         Collection<RouteUnit> toBeRemoved = new LinkedList<>();
         Collection<RouteUnit> toBeAdded = new LinkedList<>();
         for (RouteUnit each : routeContext.getRouteUnits()) {
diff --git 
a/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/impl/PrimaryReplicaReplicationDataSourceRouter.java
 
b/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/impl/PrimaryReplicaReplicationData
 [...]
index de44f77..2fa5738 100644
--- 
a/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/impl/PrimaryReplicaReplicationDataSourceRouter.java
+++ 
b/shardingsphere-features/shardingsphere-primary-replica-replication/shardingsphere-primary-replica-replication-route/src/main/java/org/apache/shardingsphere/replication/primaryreplica/route/engine/impl/PrimaryReplicaReplicationDataSourceRouter.java
@@ -24,8 +24,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.common.statement.SQLStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.common.statement.dml.SelectStatement;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.handler.dml.SelectStatementHandler;
 
-import java.util.ArrayList;
-
 /**
  * Data source router for primary-replica replication.
  */
@@ -45,7 +43,7 @@ public final class PrimaryReplicaReplicationDataSourceRouter {
             PrimaryVisitedManager.setPrimaryVisited();
             return rule.getPrimaryDataSourceName();
         }
-        return rule.getLoadBalancer().getDataSource(rule.getName(), 
rule.getPrimaryDataSourceName(), new 
ArrayList<>(rule.getReplicaDataSourceNames()));
+        return rule.getLoadBalancer().getDataSource(rule.getName(), 
rule.getPrimaryDataSourceName(), rule.getReplicaDataSourceNames());
     }
     
     private boolean isPrimaryRoute(final SQLStatement sqlStatement) {

Reply via email to