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

WangzJi pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/incubator-seata.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 1caae9615f bugfix: unregister resource when closing DataSourceProxy 
(#7981)
1caae9615f is described below

commit 1caae9615f0fe211c6d77c96afb32026f917bc3e
Author: Sumit Kesarwani <[email protected]>
AuthorDate: Wed Apr 22 14:10:02 2026 +0530

    bugfix: unregister resource when closing DataSourceProxy (#7981)
---
 .../seata/rm/datasource/DataSourceManager.java     |  6 ++++--
 .../seata/rm/datasource/DataSourceProxy.java       |  7 ++++--
 .../seata/rm/datasource/DataSourceProxyTest.java   | 25 ++++++++++++++++++++++
 3 files changed, 34 insertions(+), 4 deletions(-)

diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceManager.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceManager.java
index 6aa0425be4..a5d4e13245 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceManager.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceManager.java
@@ -16,7 +16,6 @@
  */
 package org.apache.seata.rm.datasource;
 
-import org.apache.seata.common.exception.NotSupportYetException;
 import org.apache.seata.common.exception.ShouldNeverHappenException;
 import org.apache.seata.core.context.RootContext;
 import org.apache.seata.core.exception.RmTransactionException;
@@ -93,7 +92,10 @@ public class DataSourceManager extends 
AbstractResourceManager {
 
     @Override
     public void unregisterResource(Resource resource) {
-        throw new NotSupportYetException("unregister a resource");
+        DataSourceProxy dataSourceProxy = (DataSourceProxy) resource;
+        dataSourceCache.remove(dataSourceProxy.getResourceId());
+        RmNettyRemotingClient.getInstance()
+                .unregisterResource(dataSourceProxy.getResourceGroupId(), 
dataSourceProxy.getResourceId());
     }
 
     /**
diff --git 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
index 05df4c1110..80b0978e6d 100644
--- 
a/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
+++ 
b/rm-datasource/src/main/java/org/apache/seata/rm/datasource/DataSourceProxy.java
@@ -294,7 +294,10 @@ public class DataSourceProxy extends 
AbstractDataSourceProxy implements Resource
     }
 
     public void close() throws Exception {
-        // TODO: Need to unregister resource from DefaultResourceManager
-        TableMetaCacheFactory.shutdown(resourceId);
+        try {
+            DefaultResourceManager.get().unregisterResource(this);
+        } finally {
+            TableMetaCacheFactory.shutdown(resourceId);
+        }
     }
 }
diff --git 
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/DataSourceProxyTest.java
 
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/DataSourceProxyTest.java
index 67c07514fb..ae0311c145 100644
--- 
a/rm-datasource/src/test/java/org/apache/seata/rm/datasource/DataSourceProxyTest.java
+++ 
b/rm-datasource/src/test/java/org/apache/seata/rm/datasource/DataSourceProxyTest.java
@@ -237,7 +237,32 @@ public class DataSourceProxyTest {
 
             proxy.close();
 
+            verify(drm).unregisterResource(proxy);
             tmcfStatic.verify(() -> 
TableMetaCacheFactory.shutdown(proxy.getResourceId()));
         }
     }
+
+    @Test
+    public void testCloseRemovesResourceFromManager() throws Exception {
+        final MockDriver mockDriver = new MockDriver();
+        final String username = "username";
+        final String jdbcUrl = "jdbc:mock:xxx";
+
+        final DruidDataSource dataSource = new DruidDataSource();
+        dataSource.setUrl(jdbcUrl);
+        dataSource.setDriver(mockDriver);
+        dataSource.setUsername(username);
+        dataSource.setPassword("password");
+
+        DataSourceProxy proxy = getDataSourceProxy(dataSource);
+
+        // Ensure it's registered
+        Assertions.assertNotNull(
+                
DefaultResourceManager.get().getManagedResources().get(proxy.getResourceId()));
+
+        proxy.close();
+
+        // Ensure it's unregistered
+        
Assertions.assertNull(DefaultResourceManager.get().getManagedResources().get(proxy.getResourceId()));
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to