diff --git a/helm/templates/serviceconfig.yaml b/helm/templates/serviceconfig.yaml index 9b2731fd..ce8e86dd 100644 --- a/helm/templates/serviceconfig.yaml +++ b/helm/templates/serviceconfig.yaml @@ -16,6 +16,7 @@ data: graphql.urlPath = {{ .Values.serviceConfig.urlPath }} graphql.corsEnabled = {{ .Values.serviceConfig.corsEnabled }} + graphql.timeout = {{ .Values.serviceConfig.timeoutDuration }} attribute.service = { host = {{ .Values.serviceConfig.attributeService.host }} diff --git a/helm/values.yaml b/helm/values.yaml index e9e37a4b..6147b7d3 100644 --- a/helm/values.yaml +++ b/helm/values.yaml @@ -46,6 +46,7 @@ serviceConfig: urlPath: /graphql corsEnabled: true defaultTenantId: "" + timeoutDuration: 30s attributeService: host: attribute-service port: 9012 diff --git a/hypertrace-core-graphql b/hypertrace-core-graphql index 43f084b8..23cb2239 160000 --- a/hypertrace-core-graphql +++ b/hypertrace-core-graphql @@ -1 +1 @@ -Subproject commit 43f084b878511945a90c64065ed8024124b62769 +Subproject commit 23cb2239e5db37cafaaa8e7fcfc60bef4c626c47 diff --git a/hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlFactory.java b/hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlFactory.java index 61ec35e9..8ffe0909 100644 --- a/hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlFactory.java +++ b/hypertrace-graphql-impl/src/main/java/org/hypertrace/graphql/impl/GraphQlFactory.java @@ -15,6 +15,7 @@ public static GraphQLConfiguration build( return GraphQLConfiguration.with(injector.getInstance(GraphQLSchema.class)) .with(injector.getInstance(GraphQlRequestContextBuilder.class)) + .asyncTimeout(config.getGraphQlTimeout().toMillis()) .build(); } } diff --git a/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java b/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java index 0cb3fbbf..d0f048fc 100644 --- a/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java +++ b/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/DefaultGraphQlServiceConfig.java @@ -17,6 +17,7 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig { private static final String GRAPHQL_URL_PATH = "graphql.urlPath"; private static final String GRAPHQL_CORS_ENABLED = "graphql.corsEnabled"; + private static final String GRAPHQL_TIMEOUT = "graphql.timeout"; private static final String DEFAULT_TENANT_ID = "defaultTenantId"; @@ -40,8 +41,9 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig { String serviceName; int servicePort; - String graphqlUrlPath; + String graphQlUrlPath; boolean corsEnabled; + Duration graphQlTimeout; Optional defaultTenantId; int maxIoThreads; String attributeServiceHost; @@ -60,8 +62,9 @@ class DefaultGraphQlServiceConfig implements HypertraceGraphQlServiceConfig { DefaultGraphQlServiceConfig(Config untypedConfig) { this.serviceName = untypedConfig.getString(SERVICE_NAME_CONFIG); this.servicePort = untypedConfig.getInt(SERVICE_PORT_CONFIG); - this.graphqlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); + this.graphQlUrlPath = untypedConfig.getString(GRAPHQL_URL_PATH); this.corsEnabled = untypedConfig.getBoolean(GRAPHQL_CORS_ENABLED); + this.graphQlTimeout = untypedConfig.getDuration(GRAPHQL_TIMEOUT); this.defaultTenantId = optionallyGet(() -> untypedConfig.getString(DEFAULT_TENANT_ID)); this.maxIoThreads = untypedConfig.getInt(MAX_IO_THREADS_PROPERTY); diff --git a/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/GraphQlServiceImpl.java b/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/GraphQlServiceImpl.java index 00a1cb9a..2f0ce3c4 100644 --- a/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/GraphQlServiceImpl.java +++ b/hypertrace-graphql-service/src/main/java/org/hypertrace/graphql/service/GraphQlServiceImpl.java @@ -23,7 +23,7 @@ public GraphQlServiceImpl(Config appConfig) { if (this.graphQlServiceConfig.isCorsEnabled()) { contextHandler.addFilter( CrossOriginFilter.class, - this.graphQlServiceConfig.getGraphqlUrlPath(), + this.graphQlServiceConfig.getGraphQlUrlPath(), EnumSet.of(DispatcherType.REQUEST)); } @@ -31,7 +31,7 @@ public GraphQlServiceImpl(Config appConfig) { new ServletHolder( new GraphQlServiceHttpServlet( GraphQlFactory.build(this.graphQlServiceConfig, this.serviceLifecycle))), - this.graphQlServiceConfig.getGraphqlUrlPath()); + this.graphQlServiceConfig.getGraphQlUrlPath()); } public GraphQlServiceConfig getGraphQlServiceConfig() { diff --git a/hypertrace-graphql-service/src/main/resources/configs/common/application.conf b/hypertrace-graphql-service/src/main/resources/configs/common/application.conf index fb4fb4b3..0171eed1 100644 --- a/hypertrace-graphql-service/src/main/resources/configs/common/application.conf +++ b/hypertrace-graphql-service/src/main/resources/configs/common/application.conf @@ -5,6 +5,7 @@ service.admin.port = 23432 graphql.urlPath = /graphql graphql.corsEnabled = true +graphql.timeout = 30s defaultTenantId = ${?DEFAULT_TENANT_ID}