From aa509513201e83a43572a6401f196fe014fdf5fc Mon Sep 17 00:00:00 2001 From: Marcel Date: Sun, 12 Apr 2026 22:58:00 +0200 Subject: [PATCH] fix(ocr): set 10-minute read timeout on RestClientOcrClient MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Default RestClient timeout was 10 seconds — OCR on CPU takes minutes. Set connect timeout to 10s, read timeout to 10 minutes. Co-Authored-By: Claude Sonnet 4.6 --- .../service/RestClientOcrClient.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/backend/src/main/java/org/raddatz/familienarchiv/service/RestClientOcrClient.java b/backend/src/main/java/org/raddatz/familienarchiv/service/RestClientOcrClient.java index 0bbb533c..4ab7958f 100644 --- a/backend/src/main/java/org/raddatz/familienarchiv/service/RestClientOcrClient.java +++ b/backend/src/main/java/org/raddatz/familienarchiv/service/RestClientOcrClient.java @@ -6,9 +6,12 @@ import org.raddatz.familienarchiv.model.ScriptType; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.MediaType; +import org.springframework.http.client.JdkClientHttpRequestFactory; import org.springframework.stereotype.Component; import org.springframework.web.client.RestClient; +import java.net.http.HttpClient; +import java.time.Duration; import java.util.List; import java.util.Map; @@ -19,7 +22,16 @@ public class RestClientOcrClient implements OcrClient, OcrHealthClient { private final RestClient restClient; public RestClientOcrClient(@Value("${app.ocr.base-url:http://ocr-service:8000}") String baseUrl) { - this.restClient = RestClient.builder().baseUrl(baseUrl).build(); + HttpClient httpClient = HttpClient.newBuilder() + .connectTimeout(Duration.ofSeconds(10)) + .build(); + JdkClientHttpRequestFactory requestFactory = new JdkClientHttpRequestFactory(httpClient); + requestFactory.setReadTimeout(Duration.ofMinutes(10)); + + this.restClient = RestClient.builder() + .baseUrl(baseUrl) + .requestFactory(requestFactory) + .build(); } @Override