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]