feat(admin): #356 후속 — verifyAllAsync로 즉시 응답
- 1244 링크 백필 동기 호출 시 HTTP 25~30분 hang (ingress 5분 timeout 초과) - @Async verifyAllAsync 추가, controller는 started/pending 즉시 응답 - 진행은 /api/admin/video-relevance/pending 폴링으로 확인 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -40,9 +40,11 @@ public class AdminVideoRelevanceController {
|
||||
@PostMapping("/all")
|
||||
public Map<String, Object> verifyAll(@RequestParam(defaultValue = "10") int batchSize) {
|
||||
var admin = AuthUtil.requireAdmin();
|
||||
log.info("[ADMIN] {} triggered video-relevance verifyAll(batchSize={})", admin.getSubject(), batchSize);
|
||||
int processed = relevanceService.verifyAll(batchSize);
|
||||
return Map.of("processed", processed);
|
||||
int pending = restaurantService.countUnevaluatedLinks();
|
||||
log.info("[ADMIN] {} triggered video-relevance verifyAllAsync (batchSize={}, pending={})", admin.getSubject(), batchSize, pending);
|
||||
// 비동기 트리거 — HTTP request는 즉시 응답. 진행은 /pending 폴링으로 확인.
|
||||
relevanceService.verifyAllAsync(batchSize);
|
||||
return Map.of("started", true, "pending", pending);
|
||||
}
|
||||
|
||||
@PostMapping("/{linkId}/evaluate")
|
||||
|
||||
@@ -63,6 +63,16 @@ public class VideoRelevanceService {
|
||||
restaurantService.updateLinkRelevance(linkId, result.relevance(), truncate(result.reason(), 120));
|
||||
}
|
||||
|
||||
@Async
|
||||
public void verifyAllAsync(int batchSize) {
|
||||
try {
|
||||
int n = verifyAll(batchSize);
|
||||
log.info("[VideoRelevance] backfill done: {} processed", n);
|
||||
} catch (Exception e) {
|
||||
log.warn("verifyAllAsync failed: {}", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
public int verifyAll(int batchSize) {
|
||||
int total = 0;
|
||||
List<Map<String, Object>> batch;
|
||||
|
||||
Reference in New Issue
Block a user