Skip to content

Commit bc8ee25

Browse files
fix: grab kotlinDataLoaderRegistry from environment (#1767)
1 parent 70a4279 commit bc8ee25

File tree

2 files changed

+18
-6
lines changed

2 files changed

+18
-6
lines changed

executions/graphql-kotlin-dataloader-instrumentation/src/main/kotlin/com/expediagroup/graphql/dataloader/instrumentation/extensions/CompletableFutureExtensions.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,12 @@ import java.util.concurrent.CompletableFuture
2929
/**
3030
* Check if all futures collected on [KotlinDataLoaderRegistry.dispatchAll] were handled
3131
* and if we have more futures than we had when we started to dispatch, if so,
32-
* means that [DataLoader]s were chained so we need to dispatch the dataLoaderRegistry.
32+
* means that [DataLoader]s were chained, so we need to dispatch the dataLoaderRegistry.
3333
*/
3434
fun <V> CompletableFuture<V>.dispatchIfNeeded(
3535
environment: DataFetchingEnvironment
3636
): CompletableFuture<V> {
37-
val dataLoaderRegistry =
38-
environment
39-
.graphQlContext.get<KotlinDataLoaderRegistry>(KotlinDataLoaderRegistry::class)
40-
?: throw MissingKotlinDataLoaderRegistryException()
37+
val dataLoaderRegistry = environment.dataLoaderRegistry as? KotlinDataLoaderRegistry ?: throw MissingKotlinDataLoaderRegistryException()
4138

4239
if (dataLoaderRegistry.dataLoadersInvokedOnDispatch()) {
4340
val cantContinueExecution = when {

executions/graphql-kotlin-dataloader-instrumentation/src/test/kotlin/com/expediagroup/graphql/dataloader/instrumentation/syncexhaustion/DataLoaderSyncExecutionExhaustedInstrumentationTest.kt

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2022 Expedia, Inc
2+
* Copyright 2023 Expedia, Inc
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -24,6 +24,7 @@ import io.mockk.verify
2424
import org.junit.jupiter.api.BeforeEach
2525
import org.junit.jupiter.api.Test
2626
import kotlin.test.assertEquals
27+
import kotlin.test.assertTrue
2728

2829
class DataLoaderSyncExecutionExhaustedInstrumentationTest {
2930
private val dataLoaderSyncExecutionExhaustedInstrumentation = DataLoaderSyncExecutionExhaustedInstrumentation()
@@ -387,6 +388,10 @@ class DataLoaderSyncExecutionExhaustedInstrumentationTest {
387388

388389
assertEquals(3, results.size)
389390

391+
results.forEach { result ->
392+
assertTrue(result.errors.isEmpty())
393+
}
394+
390395
val missionStatistics = kotlinDataLoaderRegistry.dataLoadersMap["MissionDataLoader"]?.statistics
391396
val planetStatistics = kotlinDataLoaderRegistry.dataLoadersMap["PlanetsByMissionDataLoader"]?.statistics
392397

@@ -424,10 +429,15 @@ class DataLoaderSyncExecutionExhaustedInstrumentationTest {
424429
)
425430

426431
assertEquals(3, results.size)
432+
results.forEach { result ->
433+
assertTrue(result.errors.isEmpty())
434+
}
427435

436+
val astronautStatistics = kotlinDataLoaderRegistry.dataLoadersMap["AstronautDataLoader"]?.statistics
428437
val missionsByAstronautStatistics = kotlinDataLoaderRegistry.dataLoadersMap["MissionsByAstronautDataLoader"]?.statistics
429438
val planetStatistics = kotlinDataLoaderRegistry.dataLoadersMap["PlanetsByMissionDataLoader"]?.statistics
430439

440+
assertEquals(1, astronautStatistics?.batchInvokeCount)
431441
assertEquals(1, missionsByAstronautStatistics?.batchInvokeCount)
432442
assertEquals(1, planetStatistics?.batchInvokeCount)
433443
}
@@ -466,11 +476,16 @@ class DataLoaderSyncExecutionExhaustedInstrumentationTest {
466476
DataLoaderInstrumentationStrategy.SYNC_EXHAUSTION
467477
)
468478

479+
val astronautStatistics = kotlinDataLoaderRegistry.dataLoadersMap["AstronautDataLoader"]?.statistics
469480
val missionsByAstronautStatistics = kotlinDataLoaderRegistry.dataLoadersMap["MissionsByAstronautDataLoader"]?.statistics
470481
val planetStatistics = kotlinDataLoaderRegistry.dataLoadersMap["PlanetsByMissionDataLoader"]?.statistics
471482

472483
assertEquals(2, results.size)
484+
results.forEach { result ->
485+
assertTrue(result.errors.isEmpty())
486+
}
473487

488+
assertEquals(1, astronautStatistics?.batchInvokeCount)
474489
assertEquals(1, missionsByAstronautStatistics?.batchInvokeCount)
475490
assertEquals(1, planetStatistics?.batchInvokeCount)
476491
}

0 commit comments

Comments
 (0)