From 04dc01cd25ea66f845ebec183b2399f056a61118 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 13:26:27 +0800
Subject: [PATCH] fix: lock auto tune rollback before source lookup

---
 src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java |   13 +++++++------
 1 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
index 13c5bcd..04c55c4 100644
--- a/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
+++ b/src/test/java/com/zy/ai/service/AutoTuneApplyServiceImplTest.java
@@ -23,6 +23,7 @@
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.InOrder;
 import org.mockito.Mock;
 import org.mockito.junit.jupiter.MockitoExtension;
 import org.mockito.junit.jupiter.MockitoSettings;
@@ -49,6 +50,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.atLeastOnce;
+import static org.mockito.Mockito.inOrder;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -430,6 +432,9 @@
         verify(redisUtil).compareAndDelete(eq(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key), anyString());
         assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount());
         assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount());
+        InOrder rollbackOrder = inOrder(redisUtil, aiAutoTuneChangeService);
+        rollbackOrder.verify(redisUtil).trySetStringIfAbsent(anyString(), anyString(), anyLong());
+        rollbackOrder.verify(aiAutoTuneChangeService, atLeastOnce()).list(any(Wrapper.class));
     }
 
     @Test
@@ -494,12 +499,6 @@
 
     @Test
     void rollbackLockNotAcquiredReturnsFailedAuditWithoutTargetWrite() {
-        AiAutoTuneJob latestRealJob = job(10L, "manual", "success");
-        AiAutoTuneChange configChange = successChange(10L, "sys_config", "", "conveyorStationTaskLimit", "10", "15");
-        when(aiAutoTuneChangeService.list(any(Wrapper.class)))
-                .thenReturn(List.of(configChange))
-                .thenReturn(List.of(configChange));
-        when(aiAutoTuneJobService.getById(10L)).thenReturn(latestRealJob);
         when(redisUtil.trySetStringIfAbsent(anyString(), anyString(), anyLong())).thenReturn(false);
 
         AutoTuneApplyResult result = service.rollbackLastSuccessfulJob("manual rollback");
@@ -515,6 +514,8 @@
         assertTrue(transactionManager.getJobUpdateInsideTransactionCount() > 0);
         assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount());
         assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount());
+        verify(aiAutoTuneChangeService, never()).list(any(Wrapper.class));
+        verify(aiAutoTuneJobService, never()).getById(any());
         verify(configService, never()).saveConfigValue(any(), any());
         verify(configService, never()).refreshSystemConfigCache();
         verify(redisUtil).hasKey(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key);

--
Gitblit v1.9.1