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

Aias00 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shenyu.git


The following commit(s) were added to refs/heads/master by this push:
     new c1b4465d38 fix: add transactional boundaries to metadata batch 
operations (#6708) (#7048)
c1b4465d38 is described below

commit c1b4465d388db03a6c2e2b1d67390c46e17f1cf3
Author: Southern <[email protected]>
AuthorDate: Thu Oct 8 15:21:11 2026 +0800

    fix: add transactional boundaries to metadata batch operations (#6708) 
(#7048)
    
    * fix: add transactional boundaries to metadata batch operations (#6708)
    
      Add @Transactional(rollbackFor = Exception.class) to
      deleteByIdsAndNamespaceId and enabledByIdsAndNamespaceId in
      MetaDataServiceImpl.
    
      Extend MetaDataServiceTest to verify that enable events are not
      published when the database update affects zero rows, and are published
      after a successful update.
    
    * fix unittest
    
    ---------
    
    Co-authored-by: aias00 <[email protected]>
---
 .../shenyu/admin/service/impl/MetaDataServiceImpl.java       |  2 ++
 .../org/apache/shenyu/admin/service/MetaDataServiceTest.java | 12 ++++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
index 9876bc9778..4105874139 100644
--- 
a/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
+++ 
b/shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/MetaDataServiceImpl.java
@@ -108,6 +108,7 @@ public class MetaDataServiceImpl implements MetaDataService 
{
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int deleteByIdsAndNamespaceId(final List<String> ids, final String 
namespaceId) {
         List<MetaDataDO> deletedMetaData = 
metaDataMapper.selectByIdListAndNamespaceId(ids, namespaceId);
         if (CollectionUtils.isEmpty(deletedMetaData)) {
@@ -121,6 +122,7 @@ public class MetaDataServiceImpl implements MetaDataService 
{
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public String enabledByIdsAndNamespaceId(final List<String> ids, final 
Boolean enabled, final String namespaceId) {
         List<MetaDataDO> metaDataDoList = 
metaDataMapper.selectByIdListAndNamespaceId(ids, namespaceId);
         if (CollectionUtils.isEmpty(metaDataDoList)) {
diff --git 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
index 87d213980d..51c76bd401 100644
--- 
a/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
+++ 
b/shenyu-admin/src/test/java/org/apache/shenyu/admin/service/MetaDataServiceTest.java
@@ -60,6 +60,7 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.BDDMockito.given;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -147,10 +148,17 @@ public final class MetaDataServiceTest {
         String msg = metaDataService.enabledByIdsAndNamespaceId(ids, true, 
SYS_DEFAULT_NAMESPACE_ID);
         assertEquals(AdminConstants.ID_NOT_EXIST, msg);
         when(metaDataMapper.selectByIdListAndNamespaceId(ids, 
SYS_DEFAULT_NAMESPACE_ID))
-                .thenReturn(Arrays.asList(MetaDataDO.builder().build(), 
MetaDataDO.builder().build()))
-                .thenReturn(Arrays.asList(MetaDataDO.builder().build(), 
MetaDataDO.builder().build(), MetaDataDO.builder().build()));
+                
.thenReturn(Arrays.asList(MetaDataDO.builder().id("id1").build(), 
MetaDataDO.builder().id("id2").build()))
+                
.thenReturn(Arrays.asList(MetaDataDO.builder().id("id1").build(), 
MetaDataDO.builder().id("id2").build(), 
MetaDataDO.builder().id("id3").build()));
         msg = metaDataService.enabledByIdsAndNamespaceId(ids, false, 
SYS_DEFAULT_NAMESPACE_ID);
         assertEquals(StringUtils.EMPTY, msg);
+        verify(publisher, never()).onEnabled(any());
+        when(metaDataMapper.updateEnableBatch(ids, 
true)).thenReturn(ids.size());
+        when(metaDataMapper.selectByIdListAndNamespaceId(ids, 
SYS_DEFAULT_NAMESPACE_ID))
+                
.thenReturn(Arrays.asList(MetaDataDO.builder().id("id1").build(), 
MetaDataDO.builder().id("id2").build(), 
MetaDataDO.builder().id("id3").build()));
+        msg = metaDataService.enabledByIdsAndNamespaceId(ids, true, 
SYS_DEFAULT_NAMESPACE_ID);
+        assertEquals(StringUtils.EMPTY, msg);
+        verify(publisher).onEnabled(any());
     }
 
     /**

Reply via email to