From e4e91b46d0ce781e7dc87dcdf0d2909b01911d4b Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期一, 27 四月 2026 12:34:31 +0800
Subject: [PATCH] fix: harden auto tune scheduler throttling

---
 src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java |   32 ++++++++++++--------------------
 1 files changed, 12 insertions(+), 20 deletions(-)

diff --git a/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java b/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
index 808895a..bbafe96 100644
--- a/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
+++ b/src/main/java/com/zy/ai/service/impl/AutoTuneCoordinatorServiceImpl.java
@@ -82,15 +82,15 @@
         }
 
         AutoTuneAgentService.AutoTuneAgentResult agentResult = null;
+        markLastTriggerGuard(intervalMinutes);
         try {
             agentResult = autoTuneAgentService.runAutoTune(AutoTuneTriggerType.AUTO.getCode());
-            writeOperateLog(agentResult);
-            markNoChangeGuardIfNeeded(latestSuccessfulJob, agentResult, intervalMinutes);
+            safeWriteOperateLog(agentResult);
             return AutoTuneCoordinatorResult.triggered(agentResult);
         } catch (Exception exception) {
             log.error("Auto tune coordinator failed to run agent", exception);
             agentResult = failedAgentResult(exception);
-            writeOperateLog(agentResult);
+            safeWriteOperateLog(agentResult);
             return AutoTuneCoordinatorResult.triggered(agentResult);
         } finally {
             redisUtil.compareAndDelete(lockKey, lockToken);
@@ -159,26 +159,10 @@
         return System.currentTimeMillis() - latestFinishTime.getTime() >= intervalMillis;
     }
 
-    private void markNoChangeGuardIfNeeded(AiAutoTuneJob beforeJob,
-                                           AutoTuneAgentService.AutoTuneAgentResult agentResult,
-                                           int intervalMinutes) {
-        if (agentResult == null || !Boolean.TRUE.equals(agentResult.getSuccess())) {
-            return;
-        }
-        AiAutoTuneJob afterJob = latestSuccessfulAutoJob();
-        if (!isSameJob(beforeJob, afterJob)) {
-            return;
-        }
+    private void markLastTriggerGuard(int intervalMinutes) {
         long expireSeconds = intervalMinutes * 60L;
         redisUtil.set(RedisKeyType.AI_AUTO_TUNE_LAST_TRIGGER_GUARD.key,
                 String.valueOf(System.currentTimeMillis()), expireSeconds);
-    }
-
-    private boolean isSameJob(AiAutoTuneJob beforeJob, AiAutoTuneJob afterJob) {
-        if (beforeJob == null || afterJob == null) {
-            return beforeJob == afterJob;
-        }
-        return beforeJob.getId() != null && beforeJob.getId().equals(afterJob.getId());
     }
 
     private AutoTuneAgentService.AutoTuneAgentResult failedAgentResult(Exception exception) {
@@ -195,6 +179,14 @@
         return result;
     }
 
+    private void safeWriteOperateLog(AutoTuneAgentService.AutoTuneAgentResult agentResult) {
+        try {
+            writeOperateLog(agentResult);
+        } catch (Exception exception) {
+            log.warn("Auto tune coordinator failed to write operate log", exception);
+        }
+    }
+
     private void writeOperateLog(AutoTuneAgentService.AutoTuneAgentResult agentResult) {
         if (agentResult == null) {
             return;

--
Gitblit v1.9.1