| | |
| | | |
| | | AtomicLong jobId = new AtomicLong(100); |
| | | when(aiAutoTuneJobService.save(any(AiAutoTuneJob.class))).thenAnswer(invocation -> { |
| | | transactionManager.recordJobSaveCall(); |
| | | AiAutoTuneJob job = invocation.getArgument(0); |
| | | job.setId(jobId.incrementAndGet()); |
| | | return true; |
| | | }); |
| | | when(aiAutoTuneJobService.updateById(any(AiAutoTuneJob.class))).thenReturn(true); |
| | | when(aiAutoTuneJobService.updateById(any(AiAutoTuneJob.class))).thenAnswer(invocation -> { |
| | | transactionManager.recordJobUpdateCall(); |
| | | return true; |
| | | }); |
| | | when(aiAutoTuneChangeService.saveBatch(any(Collection.class))).thenReturn(true); |
| | | when(aiAutoTuneChangeService.list(any(Wrapper.class))).thenReturn(Collections.emptyList()); |
| | | when(configService.getConfigValue(eq("aiAutoTuneIntervalMinutes"), any())).thenReturn("10"); |
| | |
| | | assertEquals("failed", changes.get(0).getResultStatus()); |
| | | assertTrue(changes.get(0).getRejectReason().contains("db write failed")); |
| | | assertEquals(1, transactionManager.getRollbackCount()); |
| | | assertTrue(transactionManager.getJobSaveInsideTransactionCount() > 0); |
| | | assertTrue(transactionManager.getJobUpdateInsideTransactionCount() > 0); |
| | | assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount()); |
| | | assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount()); |
| | | verify(redisUtil).compareAndDelete(eq(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key), anyString()); |
| | | } |
| | | |
| | |
| | | assertEquals("failed", changes.get(0).getResultStatus()); |
| | | assertTrue(changes.get(0).getRejectReason().contains("audit failed")); |
| | | assertEquals(1, transactionManager.getRollbackCount()); |
| | | assertTrue(transactionManager.getJobSaveInsideTransactionCount() > 0); |
| | | assertTrue(transactionManager.getJobUpdateInsideTransactionCount() > 0); |
| | | assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount()); |
| | | assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount()); |
| | | verify(configService).saveConfigValue("conveyorStationTaskLimit", "15"); |
| | | verify(configService, never()).refreshSystemConfigCache(); |
| | | verify(redisUtil).compareAndDelete(eq(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key), anyString()); |
| | |
| | | @Test |
| | | void jobUpdateFailureRollsBackTargetWriteTransaction() { |
| | | when(configService.getOne(any(Wrapper.class))).thenReturn(config("conveyorStationTaskLimit", "10")); |
| | | when(aiAutoTuneJobService.updateById(any(AiAutoTuneJob.class))).thenReturn(false); |
| | | when(aiAutoTuneJobService.updateById(any(AiAutoTuneJob.class))).thenAnswer(invocation -> { |
| | | transactionManager.recordJobUpdateCall(); |
| | | return false; |
| | | }); |
| | | |
| | | IllegalStateException exception = assertThrows(IllegalStateException.class, |
| | | () -> service.apply(request(false, command("sys_config", null, "conveyorStationTaskLimit", "15")))); |
| | |
| | | assertTrue(exception.getMessage().contains("更新调参任务状态失败")); |
| | | assertEquals(2, transactionManager.getRollbackCount()); |
| | | assertEquals(0, transactionManager.getCommitCount()); |
| | | assertTrue(transactionManager.getJobSaveInsideTransactionCount() > 0); |
| | | assertTrue(transactionManager.getJobUpdateInsideTransactionCount() > 0); |
| | | assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount()); |
| | | assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount()); |
| | | verify(configService).saveConfigValue("conveyorStationTaskLimit", "15"); |
| | | verify(configService, never()).refreshSystemConfigCache(); |
| | | verify(redisUtil).compareAndDelete(eq(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key), anyString()); |
| | |
| | | assertFalse(result.getSuccess()); |
| | | assertEquals("failed", updatedJob.getStatus()); |
| | | assertEquals("failed", changes.get(0).getResultStatus()); |
| | | assertTrue(changes.get(0).getRejectReason().contains("正在执行")); |
| | | assertTrue(changes.get(0).getRejectReason().contains("锁不可用")); |
| | | assertTrue(changes.get(0).getRejectReason().contains("Redis")); |
| | | assertTrue(transactionManager.getJobSaveInsideTransactionCount() > 0); |
| | | assertTrue(transactionManager.getJobUpdateInsideTransactionCount() > 0); |
| | | assertEquals(0, transactionManager.getJobSaveOutsideTransactionCount()); |
| | | assertEquals(0, transactionManager.getJobUpdateOutsideTransactionCount()); |
| | | verify(configService, never()).getOne(any(Wrapper.class)); |
| | | verify(configService, never()).saveConfigValue(any(), any()); |
| | | verify(redisUtil).hasKey(RedisKeyType.AI_AUTO_TUNE_APPLY_LOCK.key); |
| | | verify(redisUtil, never()).compareAndDelete(anyString(), anyString()); |
| | | } |
| | | |
| | |
| | | private int beginCount; |
| | | private int commitCount; |
| | | private int rollbackCount; |
| | | private boolean transactionActive; |
| | | private int jobSaveInsideTransactionCount; |
| | | private int jobSaveOutsideTransactionCount; |
| | | private int jobUpdateInsideTransactionCount; |
| | | private int jobUpdateOutsideTransactionCount; |
| | | |
| | | @Override |
| | | public TransactionStatus getTransaction(TransactionDefinition definition) { |
| | | beginCount++; |
| | | transactionActive = true; |
| | | return new SimpleTransactionStatus(); |
| | | } |
| | | |
| | | @Override |
| | | public void commit(TransactionStatus status) { |
| | | commitCount++; |
| | | transactionActive = false; |
| | | } |
| | | |
| | | @Override |
| | | public void rollback(TransactionStatus status) { |
| | | rollbackCount++; |
| | | transactionActive = false; |
| | | } |
| | | |
| | | public void recordJobSaveCall() { |
| | | if (transactionActive) { |
| | | jobSaveInsideTransactionCount++; |
| | | } else { |
| | | jobSaveOutsideTransactionCount++; |
| | | } |
| | | } |
| | | |
| | | public void recordJobUpdateCall() { |
| | | if (transactionActive) { |
| | | jobUpdateInsideTransactionCount++; |
| | | } else { |
| | | jobUpdateOutsideTransactionCount++; |
| | | } |
| | | } |
| | | |
| | | public int getCommitCount() { |
| | |
| | | public int getRollbackCount() { |
| | | return rollbackCount; |
| | | } |
| | | |
| | | public int getJobSaveInsideTransactionCount() { |
| | | return jobSaveInsideTransactionCount; |
| | | } |
| | | |
| | | public int getJobSaveOutsideTransactionCount() { |
| | | return jobSaveOutsideTransactionCount; |
| | | } |
| | | |
| | | public int getJobUpdateInsideTransactionCount() { |
| | | return jobUpdateInsideTransactionCount; |
| | | } |
| | | |
| | | public int getJobUpdateOutsideTransactionCount() { |
| | | return jobUpdateOutsideTransactionCount; |
| | | } |
| | | } |
| | | } |