You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by pa...@apache.org on 2022/01/05 01:03:56 UTC

[shardingsphere] branch master updated: support traffic getResultSet method (#14513)

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 8776379  support traffic getResultSet method (#14513)
8776379 is described below

commit 87763798c7fc9df9b71acb7cd6afc232de032c9f
Author: Zhengqiang Duan <du...@apache.org>
AuthorDate: Wed Jan 5 09:02:56 2022 +0800

    support traffic getResultSet method (#14513)
---
 .../shardingsphere/driver/executor/DriverExecutor.java  |  2 +-
 .../core/statement/ShardingSpherePreparedStatement.java | 11 ++++++++---
 .../jdbc/core/statement/ShardingSphereStatement.java    | 17 +++++++++++------
 .../traffic/executor/TrafficExecutorFactory.java        |  8 ++++----
 .../traffic/executor/jdbc/JDBCTrafficExecutor.java      | 10 +++++-----
 5 files changed, 29 insertions(+), 19 deletions(-)

diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
index 0dcf5fb..9ef2e79 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/executor/DriverExecutor.java
@@ -49,7 +49,7 @@ public final class DriverExecutor implements AutoCloseable {
         regularExecutor = new DriverJDBCExecutor(connection.getSchema(), metaDataContexts, jdbcExecutor);
         rawExecutor = new RawExecutor(metaDataContexts.getExecutorEngine(), connection.isHoldTransaction(), metaDataContexts.getProps());
         federationExecutor = FederationExecutorFactory.newInstance(connection.getSchema(), metaDataContexts.getOptimizerContext(), metaDataContexts.getProps(), jdbcExecutor);
-        trafficExecutor = TrafficExecutorFactory.newInstance(connection.getContextManager().getMetaDataContexts());
+        trafficExecutor = TrafficExecutorFactory.newInstance(connection.getContextManager());
     }
     
     /**
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
index 2af6e8b..c9b5297 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSpherePreparedStatement.java
@@ -129,6 +129,8 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
     private ExecutionContext executionContext;
     
     private ResultSet currentResultSet;
+    
+    private TrafficContext trafficContext;
 
     public ShardingSpherePreparedStatement(final ShardingSphereConnection connection, final String sql) throws SQLException {
         this(connection, sql, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT, false);
@@ -185,7 +187,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.PREPARED_STATEMENT);
@@ -257,7 +259,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.PREPARED_STATEMENT);
@@ -310,7 +312,7 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
             }
             clearPrevious();
             LogicSQL logicSQL = createLogicSQL();
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.PREPARED_STATEMENT);
@@ -367,6 +369,9 @@ public final class ShardingSpherePreparedStatement extends AbstractPreparedState
         if (null != currentResultSet) {
             return currentResultSet;
         }
+        if (trafficContext.getDataSourceName().isPresent()) {
+            return executor.getTrafficExecutor().getResultSet();
+        }
         if (executionContext.getRouteContext().isFederated()) {
             return executor.getFederationExecutor().getResultSet();
         }
diff --git a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
index 874e489..3e8c681 100644
--- a/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
+++ b/shardingsphere-jdbc/shardingsphere-jdbc-core/src/main/java/org/apache/shardingsphere/driver/jdbc/core/statement/ShardingSphereStatement.java
@@ -113,6 +113,8 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
     
     private ResultSet currentResultSet;
     
+    private TrafficContext trafficContext;
+    
     public ShardingSphereStatement(final ShardingSphereConnection connection) {
         this(connection, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY, ResultSet.HOLD_CURSORS_OVER_COMMIT);
     }
@@ -140,7 +142,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         ResultSet result;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -198,7 +200,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
     public int executeUpdate(final String sql) throws SQLException {
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -224,7 +226,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         }
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -248,7 +250,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -272,7 +274,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         returnGeneratedKeys = true;
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -366,7 +368,7 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
     private boolean execute0(final String sql, final ExecuteCallback callback) throws SQLException {
         try {
             LogicSQL logicSQL = createLogicSQL(sql);
-            TrafficContext trafficContext = createTrafficContext(logicSQL);
+            trafficContext = createTrafficContext(logicSQL);
             if (trafficContext.getDataSourceName().isPresent()) {
                 TrafficExecutor trafficExecutor = executor.getTrafficExecutor();
                 TrafficExecutorContext<Statement> context = trafficExecutor.prepare(logicSQL, trafficContext.getDataSourceName().get(), JDBCDriverType.STATEMENT);
@@ -448,6 +450,9 @@ public final class ShardingSphereStatement extends AbstractStatementAdapter {
         if (null != currentResultSet) {
             return currentResultSet;
         }
+        if (trafficContext.getDataSourceName().isPresent()) {
+            return executor.getTrafficExecutor().getResultSet();
+        }
         if (executionContext.getRouteContext().isFederated()) {
             return executor.getFederationExecutor().getResultSet();
         }
diff --git a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/TrafficExecutorFactory.java b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/TrafficExecutorFactory.java
index 67d3d79..740fcef 100644
--- a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/TrafficExecutorFactory.java
+++ b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/TrafficExecutorFactory.java
@@ -19,7 +19,7 @@ package org.apache.shardingsphere.traffic.executor;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.traffic.executor.jdbc.JDBCTrafficExecutor;
 
 /**
@@ -31,10 +31,10 @@ public final class TrafficExecutorFactory {
     /**
      * Create new instance of traffic executor factory.
      * 
-     * @param metaDataContexts meta data context map
+     * @param contextManager context manager
      * @return new instance of traffic executor
      */
-    public static TrafficExecutor newInstance(final MetaDataContexts metaDataContexts) {
-        return new JDBCTrafficExecutor(metaDataContexts);
+    public static TrafficExecutor newInstance(final ContextManager contextManager) {
+        return new JDBCTrafficExecutor(contextManager);
     }
 }
diff --git a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/jdbc/JDBCTrafficExecutor.java b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/jdbc/JDBCTrafficExecutor.java
index 0834d9f..3fd1f86 100644
--- a/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/jdbc/JDBCTrafficExecutor.java
+++ b/shardingsphere-kernel/shardingsphere-traffic/shardingsphere-traffic-core/src/main/java/org/apache/shardingsphere/traffic/executor/jdbc/JDBCTrafficExecutor.java
@@ -21,7 +21,7 @@ import org.apache.shardingsphere.infra.binder.LogicSQL;
 import org.apache.shardingsphere.infra.config.datasource.DataSourceConfiguration;
 import org.apache.shardingsphere.infra.config.datasource.pool.creator.DataSourcePoolCreatorUtil;
 import org.apache.shardingsphere.infra.exception.ShardingSphereException;
-import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
+import org.apache.shardingsphere.mode.manager.ContextManager;
 import org.apache.shardingsphere.spi.ShardingSphereServiceLoader;
 import org.apache.shardingsphere.spi.typed.TypedSPIRegistry;
 import org.apache.shardingsphere.traffic.executor.TrafficExecutor;
@@ -57,13 +57,13 @@ public final class JDBCTrafficExecutor implements TrafficExecutor {
         ShardingSphereServiceLoader.register(TrafficExecutorContextBuilder.class);
     }
     
-    public JDBCTrafficExecutor(final MetaDataContexts metaDataContexts) {
-        dataSources.putAll(DataSourcePoolCreatorUtil.getDataSourceMap(createDataSourceConfigs(metaDataContexts)));
+    public JDBCTrafficExecutor(final ContextManager contextManager) {
+        dataSources.putAll(DataSourcePoolCreatorUtil.getDataSourceMap(createDataSourceConfigs()));
     }
     
-    private Map<String, DataSourceConfiguration> createDataSourceConfigs(final MetaDataContexts metaDataContexts) {
+    private Map<String, DataSourceConfiguration> createDataSourceConfigs() {
         // TODO Use governance API to create data source configuration
-        return Collections.emptyMap(); 
+        return Collections.emptyMap();
     }
     
     @SuppressWarnings({"unchecked", "rawtypes"})