From aaae226cc8e46b4d183e2a1fdee79a9dd505231a Mon Sep 17 00:00:00 2001 From: Thomasr Date: Mon, 23 Sep 2024 11:24:51 -0400 Subject: [PATCH 1/2] add Environment variable: LOWCODER_DEFAULT_QUERY_TIMEOUT_MILLIS for default query timeout --- .../domain/query/util/QueryTimeoutUtils.java | 12 ++++++++++-- .../src/main/resources/application-debug.yaml | 3 +++ .../src/main/resources/application.yaml | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java index cb4d08310..697d70c37 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java @@ -13,10 +13,18 @@ import org.lowcoder.sdk.exception.PluginException; import com.google.common.annotations.VisibleForTesting; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +@Component public final class QueryTimeoutUtils { - private static final int DEFAULT_QUERY_TIMEOUT_MILLIS = 10000; + private static int defaultQueryTimeoutMillis = 10000; + + @Value("${default.query-timeout}") + public void setDefaultQueryTimeoutMillis(int defaultQueryTimeoutMillis) { + QueryTimeoutUtils.defaultQueryTimeoutMillis = defaultQueryTimeoutMillis; + } public static int parseQueryTimeoutMs(String timeoutStr, Map paramMap, int maxQueryTimeout) { return parseQueryTimeoutMs(renderMustacheString(timeoutStr, paramMap), maxQueryTimeout); @@ -25,7 +33,7 @@ public static int parseQueryTimeoutMs(String timeoutStr, Map par @VisibleForTesting public static int parseQueryTimeoutMs(String timeoutStr, int maxQueryTimeout) { if (StringUtils.isBlank(timeoutStr)) { - return DEFAULT_QUERY_TIMEOUT_MILLIS; + return defaultQueryTimeoutMillis; } Pair unitInfo = getUnitInfo(timeoutStr); diff --git a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml index 56e6a0e67..f82ff00ef 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml @@ -52,3 +52,6 @@ logging: level: root: debug org.lowcoder: debug + +default: + query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT_MILLIS:10000} \ No newline at end of file diff --git a/server/api-service/lowcoder-server/src/main/resources/application.yaml b/server/api-service/lowcoder-server/src/main/resources/application.yaml index 2c7c5bbf1..d22f10254 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application.yaml @@ -53,6 +53,7 @@ default: org-app-count: ${LOWCODER_MAX_APPS_PER_ORG:1000} developer-count: ${LOWCODER_MAX_DEVELOPERS:50} api-rate-limit: ${LOWCODER_API_RATE_LIMIT:50} + query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT_MILLIS:10000} common: cookie-name: LOWCODER_CE_SELFHOST_TOKEN From c123fa73b6c151f5def40369b14f48f59fadd9fa Mon Sep 17 00:00:00 2001 From: Thomasr Date: Thu, 26 Sep 2024 11:33:13 -0400 Subject: [PATCH 2/2] querytimeout unit to second, limit to max, rename env variable --- .../org/lowcoder/domain/query/util/QueryTimeoutUtils.java | 8 ++++---- .../src/main/resources/application-debug.yaml | 2 +- .../lowcoder-server/src/main/resources/application.yaml | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java index 697d70c37..4c6f90881 100644 --- a/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java +++ b/server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/query/util/QueryTimeoutUtils.java @@ -19,11 +19,11 @@ @Component public final class QueryTimeoutUtils { - private static int defaultQueryTimeoutMillis = 10000; + private static int defaultQueryTimeout = 10; @Value("${default.query-timeout}") - public void setDefaultQueryTimeoutMillis(int defaultQueryTimeoutMillis) { - QueryTimeoutUtils.defaultQueryTimeoutMillis = defaultQueryTimeoutMillis; + public void setDefaultQueryTimeoutMillis(int defaultQueryTimeout) { + QueryTimeoutUtils.defaultQueryTimeout = defaultQueryTimeout; } public static int parseQueryTimeoutMs(String timeoutStr, Map paramMap, int maxQueryTimeout) { @@ -33,7 +33,7 @@ public static int parseQueryTimeoutMs(String timeoutStr, Map par @VisibleForTesting public static int parseQueryTimeoutMs(String timeoutStr, int maxQueryTimeout) { if (StringUtils.isBlank(timeoutStr)) { - return defaultQueryTimeoutMillis; + return Math.min(defaultQueryTimeout * 1000, (int)Duration.ofSeconds(maxQueryTimeout).toMillis()); } Pair unitInfo = getUnitInfo(timeoutStr); diff --git a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml index f82ff00ef..b6faa2025 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application-debug.yaml @@ -54,4 +54,4 @@ logging: org.lowcoder: debug default: - query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT_MILLIS:10000} \ No newline at end of file + query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT:10s} \ No newline at end of file diff --git a/server/api-service/lowcoder-server/src/main/resources/application.yaml b/server/api-service/lowcoder-server/src/main/resources/application.yaml index d22f10254..988c45200 100644 --- a/server/api-service/lowcoder-server/src/main/resources/application.yaml +++ b/server/api-service/lowcoder-server/src/main/resources/application.yaml @@ -53,7 +53,7 @@ default: org-app-count: ${LOWCODER_MAX_APPS_PER_ORG:1000} developer-count: ${LOWCODER_MAX_DEVELOPERS:50} api-rate-limit: ${LOWCODER_API_RATE_LIMIT:50} - query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT_MILLIS:10000} + query-timeout: ${LOWCODER_DEFAULT_QUERY_TIMEOUT:10} common: cookie-name: LOWCODER_CE_SELFHOST_TOKEN