From b82f35ffc4bf9cb57cbc631e9aea1cdc07a83bb1 Mon Sep 17 00:00:00 2001 From: Thomasr Date: Fri, 16 May 2025 12:39:31 -0400 Subject: [PATCH] Added timeout to http request. --- .../query/service/QueryExecutionServiceImpl.java | 2 +- .../lowcoder/sdk/webclient/WebClientBuildHelper.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java index 9c318a379..c32de2215 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/service/QueryExecutionServiceImpl.java @@ -44,7 +44,7 @@ public class QueryExecutionServiceImpl implements QueryExecutionService { public Mono executeQuery(Datasource datasource, Map queryConfig, Map requestParams, String timeoutStr, QueryVisitorContext queryVisitorContext) { - int timeoutMs = QueryTimeoutUtils.parseQueryTimeoutMs(timeoutStr, requestParams, common.getMaxQueryTimeout()); + int timeoutMs = QueryTimeoutUtils.parseQueryTimeoutMs(timeoutStr, requestParams, common.getMaxQueryTimeout() * 1000); queryConfig.putIfAbsent("timeoutMs", String.valueOf(timeoutMs)); return Mono.defer(() -> { diff --git a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java index 85e1e38b9..f31c909ea 100644 --- a/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java +++ b/server/api-service/lowcoder-sdk/src/main/java/org/lowcoder/sdk/webclient/WebClientBuildHelper.java @@ -1,8 +1,11 @@ package org.lowcoder.sdk.webclient; +import io.netty.channel.ChannelOption; import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import io.netty.handler.timeout.ReadTimeoutHandler; +import io.netty.handler.timeout.WriteTimeoutHandler; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -24,6 +27,7 @@ import java.security.cert.X509Certificate; import java.time.Duration; import java.util.Set; +import java.util.concurrent.TimeUnit; @Slf4j public class WebClientBuildHelper { @@ -87,7 +91,12 @@ public Builder toWebClientBuilder() { HttpClient httpClient = HttpClient.create(); if (timeoutMs != null) { - httpClient.responseTimeout(Duration.ofMillis(timeoutMs)); + httpClient = httpClient + .responseTimeout(Duration.ofMillis(timeoutMs)) + .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, timeoutMs.intValue()) + .doOnConnected(conn -> conn + .addHandlerLast(new ReadTimeoutHandler(timeoutMs, TimeUnit.SECONDS)) + .addHandlerLast(new WriteTimeoutHandler(timeoutMs, TimeUnit.SECONDS))); } if (sslConfig != null) {