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) {