You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by me...@apache.org on 2020/09/29 22:56:42 UTC
[shardingsphere] branch master updated: Avoid new ArrayList twice
in primary replica replication router (#7664)
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 <te...@163.com>
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) {