Skip to content

Commit

Permalink
Merge pull request #2127 from Netflix/feature/gh-2126
Browse files Browse the repository at this point in the history
feature/gh-2126
  • Loading branch information
paulbakker authored Feb 20, 2025
2 parents ad0b610 + b5affde commit 60667e0
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,20 @@ import com.netflix.graphql.dgs.context.DgsCustomContextBuilderWithRequest
import com.netflix.graphql.dgs.context.GraphQLContextContributor
import com.netflix.graphql.dgs.context.GraphQLContextContributorInstrumentation
import com.netflix.graphql.dgs.exceptions.DefaultDataFetcherExceptionHandler
import com.netflix.graphql.dgs.internal.*
import com.netflix.graphql.dgs.internal.DataFetcherResultProcessor
import com.netflix.graphql.dgs.internal.DefaultDataLoaderOptionsProvider
import com.netflix.graphql.dgs.internal.DefaultDgsGraphQLContextBuilder
import com.netflix.graphql.dgs.internal.DgsDataLoaderInstrumentationDataLoaderCustomizer
import com.netflix.graphql.dgs.internal.DgsDataLoaderProvider
import com.netflix.graphql.dgs.internal.DgsQueryExecutorRequestCustomizer
import com.netflix.graphql.dgs.internal.DgsSchemaProvider
import com.netflix.graphql.dgs.internal.DgsWrapWithContextDataLoaderCustomizer
import com.netflix.graphql.dgs.internal.EntityFetcherRegistry
import com.netflix.graphql.dgs.internal.FlowDataFetcherResultProcessor
import com.netflix.graphql.dgs.internal.FluxDataFetcherResultProcessor
import com.netflix.graphql.dgs.internal.GraphQLJavaErrorInstrumentation
import com.netflix.graphql.dgs.internal.MonoDataFetcherResultProcessor
import com.netflix.graphql.dgs.internal.QueryValueCustomizer
import com.netflix.graphql.dgs.internal.method.ArgumentResolver
import com.netflix.graphql.dgs.internal.method.MethodDataFetcherFactory
import com.netflix.graphql.dgs.mvc.internal.method.HandlerMethodArgumentResolverAdapter
Expand Down Expand Up @@ -74,15 +87,15 @@ import org.springframework.beans.factory.config.ConfigurableBeanFactory
import org.springframework.boot.autoconfigure.AutoConfiguration
import org.springframework.boot.autoconfigure.ImportAutoConfiguration
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass
import org.springframework.boot.autoconfigure.condition.ConditionalOnJava
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication
import org.springframework.boot.autoconfigure.graphql.GraphQlProperties
import org.springframework.boot.autoconfigure.graphql.GraphQlSourceBuilderCustomizer
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration
import org.springframework.boot.autoconfigure.thread.Threading
import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.boot.system.JavaVersion
import org.springframework.context.ApplicationContext
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
Expand Down Expand Up @@ -374,7 +387,7 @@ open class DgsSpringGraphQLAutoConfiguration(
*/
@Bean
@Qualifier("dgsAsyncTaskExecutor")
@ConditionalOnThreading(Threading.VIRTUAL)
@ConditionalOnJava(value = JavaVersion.TWENTY_ONE)
@ConditionalOnMissingBean(name = ["dgsAsyncTaskExecutor"])
@ConditionalOnProperty(prefix = "${AUTO_CONF_PREFIX}.virtualthreads", name = ["enabled"], havingValue = "true", matchIfMissing = false)
open fun virtualThreadsTaskExecutor(): AsyncTaskExecutor {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,12 @@ class DgsSpringGraphQLEnvironmentPostProcessor : EnvironmentPostProcessor {
properties["spring.graphql.websocket.path"] = websocketPath
}

if (environment.getProperty("dgs.graphql.virtualthreads.enabled") == null &&
environment.getProperty("spring.threads.virtual.enabled") == "true"
) {
properties["dgs.graphql.virtualthreads.enabled"] = true
}

environment.propertySources.addLast(
MapPropertySource(
"dgs-spring-graphql-defaults",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,23 @@ class DgsSpringGraphQLEnvironmentPostProcessorTest {

Assertions.assertThat(env.getProperty("spring.graphql.websocket.connection-init-timeout")).isEqualTo("30s")
}

@Test
fun `DGS virtual threads should by default be enabled when Spring virtual threads are enabled`() {
env.setProperty("spring.threads.virtual.enabled", "true")

DgsSpringGraphQLEnvironmentPostProcessor().postProcessEnvironment(env, application)

Assertions.assertThat(env.getProperty("dgs.graphql.virtualthreads.enabled")).isEqualTo("true")
}

@Test
fun `DGS virtual threads should be disabled when explicitly set to false`() {
env.setProperty("spring.threads.virtual.enabled", "true")
env.setProperty("dgs.graphql.virtualthreads.enabled", "false")

DgsSpringGraphQLEnvironmentPostProcessor().postProcessEnvironment(env, application)

Assertions.assertThat(env.getProperty("dgs.graphql.virtualthreads.enabled")).isEqualTo("false")
}
}

0 comments on commit 60667e0

Please sign in to comment.