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

zhangliang 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 fda105e  Remove PostgreSQLConnectionContext when channel inactive 
(#11087)
fda105e is described below

commit fda105e345efaaa4830e570765a7c25e63978ab6
Author: 吴伟杰 <wuwei...@apache.org>
AuthorDate: Thu Jul 1 14:40:16 2021 +0800

    Remove PostgreSQLConnectionContext when channel inactive (#11087)
---
 .../frontend/postgresql/PostgreSQLFrontendEngine.java   |  2 ++
 .../postgresql/PostgreSQLFrontendEngineTest.java        | 17 +++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngine.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngine.java
index 46a9f81..0e15258 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngine.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/main/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngine.java
@@ -28,6 +28,7 @@ import 
org.apache.shardingsphere.proxy.frontend.command.CommandExecuteEngine;
 import org.apache.shardingsphere.proxy.frontend.context.FrontendContext;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.authentication.PostgreSQLAuthenticationEngine;
 import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLCommandExecuteEngine;
+import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLConnectionContextRegistry;
 import 
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
 
 /**
@@ -47,6 +48,7 @@ public final class PostgreSQLFrontendEngine implements 
DatabaseProtocolFrontendE
     @Override
     public void release(final BackendConnection backendConnection) {
         
PostgreSQLBinaryStatementRegistry.getInstance().unregister(backendConnection.getConnectionId());
+        
PostgreSQLConnectionContextRegistry.getInstance().remove(backendConnection.getConnectionId());
     }
     
     @Override
diff --git 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
index d1f3da0..ef995bc 100644
--- 
a/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
+++ 
b/shardingsphere-proxy/shardingsphere-proxy-frontend/shardingsphere-proxy-frontend-postgresql/src/test/java/org/apache/shardingsphere/proxy/frontend/postgresql/PostgreSQLFrontendEngineTest.java
@@ -17,16 +17,23 @@
 
 package org.apache.shardingsphere.proxy.frontend.postgresql;
 
+import lombok.SneakyThrows;
 import 
org.apache.shardingsphere.db.protocol.postgresql.packet.command.query.binary.PostgreSQLBinaryStatementRegistry;
 import 
org.apache.shardingsphere.infra.database.type.dialect.PostgreSQLDatabaseType;
 import 
org.apache.shardingsphere.proxy.backend.communication.jdbc.connection.BackendConnection;
 import 
org.apache.shardingsphere.proxy.frontend.executor.ConnectionThreadExecutorGroup;
+import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLConnectionContext;
+import 
org.apache.shardingsphere.proxy.frontend.postgresql.command.PostgreSQLConnectionContextRegistry;
 import org.junit.Test;
 
+import java.lang.reflect.Field;
+import java.util.concurrent.ConcurrentMap;
+
 import static org.hamcrest.CoreMatchers.is;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
 import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -46,11 +53,21 @@ public final class PostgreSQLFrontendEngineTest {
         when(backendConnection.getConnectionId()).thenReturn(connectionId);
         PostgreSQLBinaryStatementRegistry registry = 
PostgreSQLBinaryStatementRegistry.getInstance();
         registry.register(connectionId);
+        PostgreSQLConnectionContextRegistry.getInstance().get(connectionId);
         assertNotNull(registry.get(connectionId));
         PostgreSQLFrontendEngine frontendEngine = new 
PostgreSQLFrontendEngine();
         ConnectionThreadExecutorGroup.getInstance().register(connectionId);
         
ConnectionThreadExecutorGroup.getInstance().unregisterAndAwaitTermination(connectionId);
         frontendEngine.release(backendConnection);
         assertNull(registry.get(connectionId));
+        assertTrue(getConnectionContexts().isEmpty());
+    }
+    
+    @SuppressWarnings("unchecked")
+    @SneakyThrows
+    private ConcurrentMap<Integer, PostgreSQLConnectionContext> 
getConnectionContexts() {
+        Field field = 
PostgreSQLConnectionContextRegistry.class.getDeclaredField("connectionContexts");
+        field.setAccessible(true);
+        return (ConcurrentMap<Integer, PostgreSQLConnectionContext>) 
field.get(PostgreSQLConnectionContextRegistry.getInstance());
     }
 }

Reply via email to