Skip to content

Commit 7711942

Browse files
samuelAndalonsamvazquez
andauthored
feat: dataloader instrumentations stop using deprecated methods (#1493)
* feat: dataloader instrumentations stop using deprecated methods * feat: computeIfAbsent on instrumentations state Co-authored-by: samvazquez <[email protected]>
1 parent 6cb906d commit 7711942

File tree

7 files changed

+49
-81
lines changed

7 files changed

+49
-81
lines changed

executions/graphql-kotlin-dataloader-instrumentation/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# GraphQL Kotlin Data Loader Instrumentation
2-
[![Maven Central](https://img.shields.io/maven-central/v/com.expediagroup/graphql-kotlin-transaction-batcher-instrumentation.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22com.expediagroup%22%20AND%20a:%22graphql-kotlin-transaction-batcher-instrumentation%22)
3-
[![Javadocs](https://img.shields.io/maven-central/v/com.expediagroup/graphql-kotlin-transaction-batcher-instrumentation.svg?label=javadoc&colorB=brightgreen)](https://www.javadoc.io/doc/com.expediagroup/graphql-kotlin-transaction-batcher-instrumentation)
2+
[![Maven Central](https://img.shields.io/maven-central/v/com.expediagroup/graphql-kotlin-dataloader-instrumentation.svg?label=Maven%20Central)](https://search.maven.org/search?q=g:%22com.expediagroup%22%20AND%20a:%22graphql-kotlin-dataloader-instrumentation%22)
3+
[![Javadocs](https://img.shields.io/maven-central/v/com.expediagroup/graphql-kotlin-dataloader-instrumentation.svg?label=javadoc&colorB=brightgreen)](https://www.javadoc.io/doc/com.expediagroup/graphql-kotlin-dataloader-instrumentation)
44

55
`graphql-kotlin-dataloader-instrumentation` is set of custom instrumentations that will signal when is the right moment
66
to dispatch a `KotlinDataLoaderRegistry`.

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

Lines changed: 0 additions & 31 deletions
This file was deleted.

executions/graphql-kotlin-dataloader-instrumentation/src/main/kotlin/com/expediagroup/graphql/dataloader/instrumentation/level/execution/AbstractExecutionLevelDispatchedInstrumentation.kt

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -16,16 +16,16 @@
1616

1717
package com.expediagroup.graphql.dataloader.instrumentation.level.execution
1818

19-
import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
2019
import com.expediagroup.graphql.dataloader.instrumentation.extensions.isMutation
2120
import com.expediagroup.graphql.dataloader.instrumentation.level.state.ExecutionLevelDispatchedState
2221
import com.expediagroup.graphql.dataloader.instrumentation.level.state.Level
2322
import graphql.ExecutionInput
2423
import graphql.ExecutionResult
24+
import graphql.execution.ExecutionContext
2525
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
26+
import graphql.execution.instrumentation.Instrumentation
2627
import graphql.execution.instrumentation.InstrumentationContext
27-
import graphql.execution.instrumentation.SimpleInstrumentation
28-
import graphql.execution.instrumentation.SimpleInstrumentationContext
28+
import graphql.execution.instrumentation.InstrumentationState
2929
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
3030
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
3131
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
@@ -39,7 +39,7 @@ internal typealias OnLevelDispatchedCallback = (Level, List<ExecutionInput>) ->
3939
* Custom GraphQL [graphql.execution.instrumentation.Instrumentation] that calculate the state of executions
4040
* of all queries sharing the same GraphQLContext map
4141
*/
42-
abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumentation() {
42+
abstract class AbstractExecutionLevelDispatchedInstrumentation : Instrumentation {
4343
/**
4444
* This is invoked each time instrumentation attempts to calculate a level dispatched state, this can be called from either
4545
* `beginFieldField` or `beginExecutionStrategy`.
@@ -53,17 +53,18 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
5353
): OnLevelDispatchedCallback
5454

5555
override fun beginExecuteOperation(
56-
parameters: InstrumentationExecuteOperationParameters
57-
): InstrumentationContext<ExecutionResult> =
58-
parameters.executionContext.takeIf { !it.isMutation() }
56+
parameters: InstrumentationExecuteOperationParameters,
57+
state: InstrumentationState?
58+
): InstrumentationContext<ExecutionResult>? =
59+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
5960
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
6061
?.beginExecuteOperation(parameters)
61-
?: SimpleInstrumentationContext.noOp()
6262

6363
override fun beginExecutionStrategy(
64-
parameters: InstrumentationExecutionStrategyParameters
65-
): ExecutionStrategyInstrumentationContext =
66-
parameters.executionContext.takeIf { !it.isMutation() }
64+
parameters: InstrumentationExecutionStrategyParameters,
65+
state: InstrumentationState?
66+
): ExecutionStrategyInstrumentationContext? =
67+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
6768
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
6869
?.beginExecutionStrategy(
6970
parameters,
@@ -74,12 +75,12 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
7475
)
7576
)
7677
)
77-
?: NoOpExecutionStrategyInstrumentationContext
7878

7979
override fun beginFieldFetch(
80-
parameters: InstrumentationFieldFetchParameters
81-
): InstrumentationContext<Any> =
82-
parameters.executionContext.takeIf { !it.isMutation() }
80+
parameters: InstrumentationFieldFetchParameters,
81+
state: InstrumentationState?
82+
): InstrumentationContext<Any>? =
83+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
8384
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
8485
?.beginFieldFetch(
8586
parameters,
@@ -90,13 +91,13 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
9091
)
9192
)
9293
)
93-
?: SimpleInstrumentationContext.noOp()
9494

9595
override fun instrumentDataFetcher(
9696
dataFetcher: DataFetcher<*>,
97-
parameters: InstrumentationFieldFetchParameters
97+
parameters: InstrumentationFieldFetchParameters,
98+
state: InstrumentationState?
9899
): DataFetcher<*> =
99-
parameters.executionContext.takeIf { !it.isMutation() }
100+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
100101
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
101102
?.instrumentDataFetcher(dataFetcher, parameters)
102103
?: dataFetcher

executions/graphql-kotlin-dataloader-instrumentation/src/main/kotlin/com/expediagroup/graphql/dataloader/instrumentation/level/state/ExecutionLevelDispatchedState.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import graphql.ExecutionResult
2424
import graphql.execution.FieldValueInfo
2525
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
2626
import graphql.execution.instrumentation.InstrumentationContext
27-
import graphql.execution.instrumentation.SimpleInstrumentationContext
2827
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
2928
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
3029
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
@@ -49,12 +48,11 @@ class ExecutionLevelDispatchedState(
4948
*/
5049
fun beginExecuteOperation(
5150
parameters: InstrumentationExecuteOperationParameters
52-
): InstrumentationContext<ExecutionResult> {
53-
val executionState = ExecutionBatchState(parameters.executionContext.getDocumentHeight())
51+
): InstrumentationContext<ExecutionResult>? {
5452
executions.computeIfAbsent(parameters.executionContext.executionInput) {
55-
executionState
53+
ExecutionBatchState(parameters.executionContext.getDocumentHeight())
5654
}
57-
return SimpleInstrumentationContext.noOp()
55+
return null
5856
}
5957

6058
/**

executions/graphql-kotlin-dataloader-instrumentation/src/main/kotlin/com/expediagroup/graphql/dataloader/instrumentation/syncexhaustion/execution/AbstractSyncExecutionExhaustedInstrumentation.kt

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,16 @@
1616

1717
package com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.execution
1818

19-
import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
2019
import com.expediagroup.graphql.dataloader.instrumentation.extensions.isMutation
2120
import com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.state.SyncExecutionExhaustedState
2221
import graphql.ExecutionInput
2322
import graphql.ExecutionResult
2423
import graphql.GraphQLContext
24+
import graphql.execution.ExecutionContext
2525
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
2626
import graphql.execution.instrumentation.Instrumentation
2727
import graphql.execution.instrumentation.InstrumentationContext
28-
import graphql.execution.instrumentation.SimpleInstrumentation
29-
import graphql.execution.instrumentation.SimpleInstrumentationContext
28+
import graphql.execution.instrumentation.InstrumentationState
3029
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
3130
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
3231
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
@@ -40,7 +39,7 @@ internal typealias OnSyncExecutionExhaustedCallback = (List<ExecutionInput>) ->
4039
* Custom GraphQL [Instrumentation] that calculate the synchronous execution exhaustion
4140
* of all GraphQL operations sharing the same [GraphQLContext]
4241
*/
43-
abstract class AbstractSyncExecutionExhaustedInstrumentation : SimpleInstrumentation() {
42+
abstract class AbstractSyncExecutionExhaustedInstrumentation : Instrumentation {
4443
/**
4544
* This is invoked each time instrumentation attempts to calculate exhaustion state, this can be called from either
4645
* `beginFieldField.dispatch` or `beginFieldFetch.complete`.
@@ -53,31 +52,31 @@ abstract class AbstractSyncExecutionExhaustedInstrumentation : SimpleInstrumenta
5352
): OnSyncExecutionExhaustedCallback
5453

5554
override fun beginExecuteOperation(
56-
parameters: InstrumentationExecuteOperationParameters
57-
): InstrumentationContext<ExecutionResult> =
58-
parameters.executionContext.takeIf { !it.isMutation() }
55+
parameters: InstrumentationExecuteOperationParameters,
56+
state: InstrumentationState?
57+
): InstrumentationContext<ExecutionResult>? =
58+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
5959
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
6060
?.beginExecuteOperation(parameters)
61-
?: SimpleInstrumentationContext.noOp()
6261

6362
override fun beginExecutionStrategy(
64-
parameters: InstrumentationExecutionStrategyParameters
65-
): ExecutionStrategyInstrumentationContext =
66-
parameters.executionContext.takeIf { !it.isMutation() }
63+
parameters: InstrumentationExecutionStrategyParameters,
64+
state: InstrumentationState?
65+
): ExecutionStrategyInstrumentationContext? =
66+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
6767
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
6868
?.beginExecutionStrategy(parameters)
69-
?: NoOpExecutionStrategyInstrumentationContext
7069

7170
override fun beginFieldFetch(
72-
parameters: InstrumentationFieldFetchParameters
73-
): InstrumentationContext<Any> =
74-
parameters.executionContext.takeIf { !it.isMutation() }
71+
parameters: InstrumentationFieldFetchParameters,
72+
state: InstrumentationState?
73+
): InstrumentationContext<Any>? =
74+
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
7575
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
7676
?.beginFieldFetch(
7777
parameters,
7878
this.getOnSyncExecutionExhaustedCallback(
7979
SyncExecutionExhaustedInstrumentationParameters(parameters.executionContext)
8080
)
8181
)
82-
?: SimpleInstrumentationContext.noOp()
8382
}

executions/graphql-kotlin-dataloader-instrumentation/src/main/kotlin/com/expediagroup/graphql/dataloader/instrumentation/syncexhaustion/state/SyncExecutionExhaustedState.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@
1717
package com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.state
1818

1919
import com.expediagroup.graphql.dataloader.KotlinDataLoaderRegistry
20-
import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
2120
import com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.execution.OnSyncExecutionExhaustedCallback
2221
import graphql.ExecutionInput
2322
import graphql.ExecutionResult
2423
import graphql.GraphQLContext
2524
import graphql.execution.MergedField
2625
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
2726
import graphql.execution.instrumentation.InstrumentationContext
28-
import graphql.execution.instrumentation.SimpleInstrumentationContext
2927
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
3028
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
3129
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
@@ -51,9 +49,11 @@ class SyncExecutionExhaustedState(
5149
*/
5250
fun beginExecuteOperation(
5351
parameters: InstrumentationExecuteOperationParameters
54-
): InstrumentationContext<ExecutionResult> {
55-
executions[parameters.executionContext.executionInput] = ExecutionBatchState()
56-
return SimpleInstrumentationContext.noOp()
52+
): InstrumentationContext<ExecutionResult>? {
53+
executions.computeIfAbsent(parameters.executionContext.executionInput) {
54+
ExecutionBatchState()
55+
}
56+
return null
5757
}
5858

5959
/**
@@ -65,7 +65,7 @@ class SyncExecutionExhaustedState(
6565
*/
6666
fun beginExecutionStrategy(
6767
parameters: InstrumentationExecutionStrategyParameters
68-
): ExecutionStrategyInstrumentationContext {
68+
): ExecutionStrategyInstrumentationContext? {
6969
val executionInput = parameters.executionContext.executionInput
7070

7171
executions.computeIfPresent(executionInput) { _, executionState ->
@@ -79,7 +79,8 @@ class SyncExecutionExhaustedState(
7979
executionState.addExecutionStrategyState(field, path, selectionFields, parentGraphQLType)
8080
executionState
8181
}
82-
return NoOpExecutionStrategyInstrumentationContext
82+
83+
return null
8384
}
8485

8586
/**
@@ -129,7 +130,7 @@ class SyncExecutionExhaustedState(
129130
/**
130131
* Provide the information about when all [ExecutionInput] sharing a [GraphQLContext] exhausted their execution
131132
* A Synchronous Execution is considered Exhausted when all [DataFetcher]s of all paths were executed up until
132-
* an scalar leaf or a [DataFetcher] that returns a [CompletableFuture]
133+
* a scalar leaf or a [DataFetcher] that returns a [CompletableFuture]
133134
*/
134135
fun allSyncExecutionsExhausted(): Boolean = synchronized(executions) {
135136
when {

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ androidPluginVersion = 7.1.2
2323
classGraphVersion = 4.8.143
2424
federationGraphQLVersion = 0.9.0
2525
graphQLJavaVersion = 19.0
26-
graphQLJavaDataLoaderVersion = 3.1.3
26+
graphQLJavaDataLoaderVersion = 3.2.0
2727
jacksonVersion = 2.13.2
2828
kotlinPoetVersion = 1.11.0
2929
ktorVersion = 2.0.0

0 commit comments

Comments
 (0)