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 b1e8607  improve performance for proxy by caching instances (#9746)
b1e8607 is described below

commit b1e86074473ddb909daf17af6bc1189089d134e0
Author: Zhang Yonglun <[email protected]>
AuthorDate: Fri Mar 19 18:06:49 2021 +0800

    improve performance for proxy by caching instances (#9746)
---
 .../java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java | 5 +++--
 .../infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java | 6 +++++-
 .../executor/sql/prepare/driver/DriverExecutionPrepareEngine.java  | 7 ++++++-
 .../java/org/apache/shardingsphere/infra/merge/MergeEngine.java    | 6 +++++-
 .../org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java   | 6 +++++-
 .../infra/route/engine/impl/PartialSQLRouteExecutor.java           | 6 +++++-
 6 files changed, 29 insertions(+), 7 deletions(-)

diff --git 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
index 60ceed2..6c86b4a 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-common/src/main/java/org/apache/shardingsphere/infra/audit/SQLCheckEngine.java
@@ -34,6 +34,8 @@ import java.util.List;
 @NoArgsConstructor(access = AccessLevel.PRIVATE)
 public final class SQLCheckEngine {
     
+    private static final Collection<SQLChecker> AUDITORS = 
OrderedSPIRegistry.getRegisteredServices(SQLChecker.class);
+    
     static {
         ShardingSphereServiceLoader.register(SQLChecker.class);
     }
@@ -47,8 +49,7 @@ public final class SQLCheckEngine {
      * @param auth auth
      */
     public static void check(final SQLStatement sqlStatement, final 
List<Object> parameters, final ShardingSphereMetaData metaData, final 
Authentication auth) {
-        Collection<SQLChecker> auditors = 
OrderedSPIRegistry.getRegisteredServices(SQLChecker.class);
-        for (SQLChecker each : auditors) {
+        for (SQLChecker each : AUDITORS) {
             SQLCheckResult auditResult = each.check(sqlStatement, parameters, 
metaData, auth);
             if (!auditResult.isPassed()) {
                 throw new SQLCheckException(each.getSQLCheckType(), 
auditResult.getErrorMessage());
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
index d06c11e..9528283 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/AbstractExecutionPrepareEngine.java
@@ -35,6 +35,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Abstract execution prepare engine.
@@ -47,6 +48,9 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
         ShardingSphereServiceLoader.register(ExecutionPrepareDecorator.class);
     }
     
+    @SuppressWarnings("rawtypes")
+    private static final Map<Collection<ShardingSphereRule>, 
Map<ShardingSphereRule, ExecutionPrepareDecorator>> RULES_TO_DECORATORS_MAP = 
new ConcurrentHashMap<>(32, 1);
+    
     private final int maxConnectionsSizePerQuery;
     
     @SuppressWarnings("rawtypes")
@@ -54,7 +58,7 @@ public abstract class AbstractExecutionPrepareEngine<T> 
implements ExecutionPrep
     
     protected AbstractExecutionPrepareEngine(final int 
maxConnectionsSizePerQuery, final Collection<ShardingSphereRule> rules) {
         this.maxConnectionsSizePerQuery = maxConnectionsSizePerQuery;
-        decorators = OrderedSPIRegistry.getRegisteredServices(rules, 
ExecutionPrepareDecorator.class);
+        decorators = RULES_TO_DECORATORS_MAP.computeIfAbsent(rules, key -> 
OrderedSPIRegistry.getRegisteredServices(key, ExecutionPrepareDecorator.class));
     }
     
     @Override
diff --git 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
index 5ea0134..95e41c1 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-executor/src/main/java/org/apache/shardingsphere/infra/executor/sql/prepare/driver/DriverExecutionPrepareEngine.java
@@ -31,7 +31,9 @@ import java.sql.SQLException;
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Driver execution prepare engine.
@@ -41,6 +43,9 @@ import java.util.Properties;
  */
 public final class DriverExecutionPrepareEngine<T extends 
DriverExecutionUnit<?>, C> extends AbstractExecutionPrepareEngine<T> {
     
+    @SuppressWarnings("rawtypes")
+    private static final Map<String, SQLExecutionUnitBuilder> 
TYPE_TO_BUILDER_MAP = new ConcurrentHashMap<>(8, 1);
+    
     private final ExecutorDriverManager<C, ?, ?> executorDriverManager;
     
     private final StorageResourceOption option;
@@ -57,7 +62,7 @@ public final class DriverExecutionPrepareEngine<T extends 
DriverExecutionUnit<?>
         super(maxConnectionsSizePerQuery, rules);
         this.executorDriverManager = executorDriverManager;
         this.option = option;
-        sqlExecutionUnitBuilder = 
TypedSPIRegistry.getRegisteredService(SQLExecutionUnitBuilder.class, type, new 
Properties());
+        sqlExecutionUnitBuilder = TYPE_TO_BUILDER_MAP.computeIfAbsent(type, 
key -> TypedSPIRegistry.getRegisteredService(SQLExecutionUnitBuilder.class, 
key, new Properties()));
     }
     
     @Override
diff --git 
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
 
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
index d9b3338..0d3b442 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-merge/src/main/java/org/apache/shardingsphere/infra/merge/MergeEngine.java
@@ -39,6 +39,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Merge engine.
@@ -49,6 +50,9 @@ public final class MergeEngine {
         ShardingSphereServiceLoader.register(ResultProcessEngine.class);
     }
     
+    @SuppressWarnings("rawtypes")
+    private static final Map<Collection<ShardingSphereRule>, 
Map<ShardingSphereRule, ResultProcessEngine>> RULES_TO_ENGINES_MAP = new 
ConcurrentHashMap<>(32, 1);
+    
     private final DatabaseType databaseType;
     
     private final ShardingSphereSchema schema;
@@ -62,7 +66,7 @@ public final class MergeEngine {
         this.databaseType = databaseType;
         this.schema = schema;
         this.props = props;
-        engines = OrderedSPIRegistry.getRegisteredServices(rules, 
ResultProcessEngine.class);
+        engines = RULES_TO_ENGINES_MAP.computeIfAbsent(rules, key -> 
OrderedSPIRegistry.getRegisteredServices(key, ResultProcessEngine.class));
     }
     
     /**
diff --git 
a/shardingsphere-infra/shardingsphere-infra-rewrite/shardingsphere-infra-rewrite-engine/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
 
b/shardingsphere-infra/shardingsphere-infra-rewrite/shardingsphere-infra-rewrite-engine/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
index 0dd00e5..88261e7 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-rewrite/shardingsphere-infra-rewrite-engine/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-rewrite/shardingsphere-infra-rewrite-engine/src/main/java/org/apache/shardingsphere/infra/rewrite/SQLRewriteEntry.java
@@ -33,6 +33,7 @@ import 
org.apache.shardingsphere.infra.binder.statement.SQLStatementContext;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * SQL rewrite entry.
@@ -43,6 +44,9 @@ public final class SQLRewriteEntry {
         ShardingSphereServiceLoader.register(SQLRewriteContextDecorator.class);
     }
     
+    @SuppressWarnings("rawtypes")
+    private static final Map<Collection<ShardingSphereRule>, 
Map<ShardingSphereRule, SQLRewriteContextDecorator>> RULES_TO_DECORATORS_MAP = 
new ConcurrentHashMap<>(32, 1);
+    
     private final ShardingSphereSchema schema;
     
     private final ConfigurationProperties props;
@@ -53,7 +57,7 @@ public final class SQLRewriteEntry {
     public SQLRewriteEntry(final ShardingSphereSchema schema, final 
ConfigurationProperties props, final Collection<ShardingSphereRule> rules) {
         this.schema = schema;
         this.props = props;
-        decorators = OrderedSPIRegistry.getRegisteredServices(rules, 
SQLRewriteContextDecorator.class);
+        decorators = RULES_TO_DECORATORS_MAP.computeIfAbsent(rules, key -> 
OrderedSPIRegistry.getRegisteredServices(key, 
SQLRewriteContextDecorator.class));
     }
     
     /**
diff --git 
a/shardingsphere-infra/shardingsphere-infra-route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
 
b/shardingsphere-infra/shardingsphere-infra-route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
index c0cd197..8c179c6 100644
--- 
a/shardingsphere-infra/shardingsphere-infra-route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
+++ 
b/shardingsphere-infra/shardingsphere-infra-route/src/main/java/org/apache/shardingsphere/infra/route/engine/impl/PartialSQLRouteExecutor.java
@@ -33,6 +33,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * Partial SQL route executor.
@@ -43,6 +44,9 @@ public final class PartialSQLRouteExecutor implements 
SQLRouteExecutor {
         ShardingSphereServiceLoader.register(SQLRouter.class);
     }
     
+    @SuppressWarnings("rawtypes")
+    private static final Map<Collection<ShardingSphereRule>, 
Map<ShardingSphereRule, SQLRouter>> RULES_TO_ROUTERS_MAP = new 
ConcurrentHashMap<>(32, 1);
+    
     private final ConfigurationProperties props;
     
     @SuppressWarnings("rawtypes")
@@ -50,7 +54,7 @@ public final class PartialSQLRouteExecutor implements 
SQLRouteExecutor {
     
     public PartialSQLRouteExecutor(final Collection<ShardingSphereRule> rules, 
final ConfigurationProperties props) {
         this.props = props;
-        routers = OrderedSPIRegistry.getRegisteredServices(rules, 
SQLRouter.class);
+        routers = RULES_TO_ROUTERS_MAP.computeIfAbsent(rules, key -> 
OrderedSPIRegistry.getRegisteredServices(key, SQLRouter.class));
     }
     
     @Override

Reply via email to