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());
}
/**