추론 종료 비동기 호출
This commit is contained in:
@@ -176,7 +176,8 @@ public class InferenceResultApiController {
|
||||
})
|
||||
@DeleteMapping("/end")
|
||||
public ApiResponseDto<UUID> getInferenceGeomList() {
|
||||
UUID uuid = inferenceResultService.deleteInferenceEnd();
|
||||
// UUID uuid = inferenceResultService.deleteInferenceEnd();
|
||||
UUID uuid = inferenceResultService.asyncInferenceEnd();
|
||||
return ApiResponseDto.ok(uuid);
|
||||
}
|
||||
|
||||
|
||||
@@ -87,6 +87,7 @@ public class InferenceResultDto {
|
||||
READY("대기"),
|
||||
IN_PROGRESS("진행중"),
|
||||
END("완료"),
|
||||
END_FAIL("종료실패"),
|
||||
FORCED_END("강제종료");
|
||||
private final String desc;
|
||||
|
||||
@@ -683,6 +684,7 @@ public class InferenceResultDto {
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public static class MapSheetFallbackYearDto {
|
||||
|
||||
private String mapSheetNum;
|
||||
private Integer mngYyyy;
|
||||
}
|
||||
|
||||
@@ -63,6 +63,7 @@ import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -1033,4 +1034,63 @@ public class InferenceResultService {
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// 0313
|
||||
@Transactional
|
||||
public UUID asyncInferenceEnd() {
|
||||
SaveInferenceAiDto dto = inferenceResultCoreService.getProcessing();
|
||||
if (dto == null) {
|
||||
throw new CustomApiException("NOT_FOUND", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
|
||||
this.deleteInferenceEndAsync(dto); // 비동기 종료 호출
|
||||
|
||||
return dto.getUuid();
|
||||
}
|
||||
|
||||
// 0313
|
||||
@Async("inferenceEndExecutor")
|
||||
@Transactional
|
||||
public void deleteInferenceEndAsync(SaveInferenceAiDto dto) {
|
||||
Long batchId = dto.getBatchId();
|
||||
String url = batchUrl + "/" + batchId;
|
||||
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
headers.setContentType(MediaType.APPLICATION_JSON);
|
||||
headers.setAccept(List.of(MediaType.APPLICATION_JSON));
|
||||
|
||||
try {
|
||||
log.info("[추론 종료 비동기 시작] uuid={}, batchId={}", dto.getUuid(), batchId);
|
||||
|
||||
ExternalCallResult<String> result =
|
||||
externalHttpClient.callLong(url, HttpMethod.DELETE, dto, headers, String.class);
|
||||
|
||||
if (!result.success()) {
|
||||
log.error("[추론 종료 실패] 외부 API 호출 실패. uuid={}, batchId={}", dto.getUuid(), batchId);
|
||||
|
||||
SaveInferenceAiDto failRequest = new SaveInferenceAiDto();
|
||||
failRequest.setUuid(dto.getUuid());
|
||||
failRequest.setStatus(Status.END_FAIL.getId()); // TODO: 종료실패 상태 추가하는 게 맞는지?
|
||||
failRequest.setUpdateUid(userUtil.getId());
|
||||
failRequest.setInferEndDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(failRequest);
|
||||
return;
|
||||
}
|
||||
|
||||
SaveInferenceAiDto request = new SaveInferenceAiDto();
|
||||
request.setStatus(Status.FORCED_END.getId());
|
||||
request.setUuid(dto.getUuid());
|
||||
request.setUpdateUid(userUtil.getId());
|
||||
request.setInferEndDttm(ZonedDateTime.now());
|
||||
inferenceResultCoreService.update(request);
|
||||
|
||||
Long learnId = inferenceResultCoreService.getInferenceLearnIdByUuid(dto.getUuid());
|
||||
inferenceResultCoreService.upsertGeomData(learnId);
|
||||
|
||||
log.info("[추론 종료 비동기 완료] uuid={}, batchId={}", dto.getUuid(), batchId);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("[추론 종료 비동기 예외] uuid={}, batchId={}", dto.getUuid(), batchId, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -42,4 +42,16 @@ public class AsyncConfig {
|
||||
exec.initialize();
|
||||
return exec;
|
||||
}
|
||||
|
||||
// 0313
|
||||
@Bean(name = "inferenceEndExecutor")
|
||||
public Executor inferenceEndExecutor() {
|
||||
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
|
||||
executor.setCorePoolSize(5);
|
||||
executor.setMaxPoolSize(10);
|
||||
executor.setQueueCapacity(100);
|
||||
executor.setThreadNamePrefix("inference-async-");
|
||||
executor.initialize();
|
||||
return executor;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user