From 8a78792744b5f0f805cb7567abd24d053488bce6 Mon Sep 17 00:00:00 2001 From: juicew <491852417@qq.com> Date: Tue, 8 Sep 2026 23:09:46 +0800 Subject: [PATCH] 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. --- .../shenyu/admin/service/impl/MetaDataServiceImpl.java | 2 ++ .../apache/shenyu/admin/service/MetaDataServiceTest.java | 8 ++++++++ 2 files changed, 10 insertions(+) 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 ae52536cb155..08ebe0d92762 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 String createOrUpdate(final MetaDataDTO metaDataDTO) { } @Override + @Transactional(rollbackFor = Exception.class) public int deleteByIdsAndNamespaceId(final List ids, final String namespaceId) { List deletedMetaData = metaDataMapper.selectByIdListAndNamespaceId(ids, namespaceId); if (CollectionUtils.isEmpty(deletedMetaData)) { @@ -121,6 +122,7 @@ public int deleteByIdsAndNamespaceId(final List ids, final String namesp } @Override + @Transactional(rollbackFor = Exception.class) public String enabledByIdsAndNamespaceId(final List ids, final Boolean enabled, final String namespaceId) { List 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 0860090dff2a..3e810b6f8320 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.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; @@ -151,6 +152,13 @@ public void testEnabled() { .thenReturn(Arrays.asList(MetaDataDO.builder().build(), MetaDataDO.builder().build(), MetaDataDO.builder().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().build(), MetaDataDO.builder().build(), MetaDataDO.builder().build())); + msg = metaDataService.enabledByIdsAndNamespaceId(ids, true, SYS_DEFAULT_NAMESPACE_ID); + assertEquals(StringUtils.EMPTY, msg); + verify(publisher).onEnabled(any()); } /**