Skip to content

Commit

Permalink
feat: dataloader instrumentations stop using deprecated methods (#1493)
Browse files Browse the repository at this point in the history
* feat: dataloader instrumentations stop using deprecated methods

* feat: computeIfAbsent on instrumentations state

Co-authored-by: samvazquez <samvazquez@expedia.com>
  • Loading branch information
samuelAndalon and samvazquez authored Jul 28, 2022
1 parent 6cb906d commit 7711942
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 81 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# GraphQL Kotlin Data Loader Instrumentation
[![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)
[![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)
[![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)
[![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)

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

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,16 +16,16 @@

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

import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
import com.expediagroup.graphql.dataloader.instrumentation.extensions.isMutation
import com.expediagroup.graphql.dataloader.instrumentation.level.state.ExecutionLevelDispatchedState
import com.expediagroup.graphql.dataloader.instrumentation.level.state.Level
import graphql.ExecutionInput
import graphql.ExecutionResult
import graphql.execution.ExecutionContext
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
import graphql.execution.instrumentation.Instrumentation
import graphql.execution.instrumentation.InstrumentationContext
import graphql.execution.instrumentation.SimpleInstrumentation
import graphql.execution.instrumentation.SimpleInstrumentationContext
import graphql.execution.instrumentation.InstrumentationState
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
Expand All @@ -39,7 +39,7 @@ internal typealias OnLevelDispatchedCallback = (Level, List<ExecutionInput>) ->
* Custom GraphQL [graphql.execution.instrumentation.Instrumentation] that calculate the state of executions
* of all queries sharing the same GraphQLContext map
*/
abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumentation() {
abstract class AbstractExecutionLevelDispatchedInstrumentation : Instrumentation {
/**
* This is invoked each time instrumentation attempts to calculate a level dispatched state, this can be called from either
* `beginFieldField` or `beginExecutionStrategy`.
Expand All @@ -53,17 +53,18 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
): OnLevelDispatchedCallback

override fun beginExecuteOperation(
parameters: InstrumentationExecuteOperationParameters
): InstrumentationContext<ExecutionResult> =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationExecuteOperationParameters,
state: InstrumentationState?
): InstrumentationContext<ExecutionResult>? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
?.beginExecuteOperation(parameters)
?: SimpleInstrumentationContext.noOp()

override fun beginExecutionStrategy(
parameters: InstrumentationExecutionStrategyParameters
): ExecutionStrategyInstrumentationContext =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationExecutionStrategyParameters,
state: InstrumentationState?
): ExecutionStrategyInstrumentationContext? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
?.beginExecutionStrategy(
parameters,
Expand All @@ -74,12 +75,12 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
)
)
)
?: NoOpExecutionStrategyInstrumentationContext

override fun beginFieldFetch(
parameters: InstrumentationFieldFetchParameters
): InstrumentationContext<Any> =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationFieldFetchParameters,
state: InstrumentationState?
): InstrumentationContext<Any>? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
?.beginFieldFetch(
parameters,
Expand All @@ -90,13 +91,13 @@ abstract class AbstractExecutionLevelDispatchedInstrumentation : SimpleInstrumen
)
)
)
?: SimpleInstrumentationContext.noOp()

override fun instrumentDataFetcher(
dataFetcher: DataFetcher<*>,
parameters: InstrumentationFieldFetchParameters
parameters: InstrumentationFieldFetchParameters,
state: InstrumentationState?
): DataFetcher<*> =
parameters.executionContext.takeIf { !it.isMutation() }
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<ExecutionLevelDispatchedState>(ExecutionLevelDispatchedState::class)
?.instrumentDataFetcher(dataFetcher, parameters)
?: dataFetcher
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ import graphql.ExecutionResult
import graphql.execution.FieldValueInfo
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
import graphql.execution.instrumentation.InstrumentationContext
import graphql.execution.instrumentation.SimpleInstrumentationContext
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
Expand All @@ -49,12 +48,11 @@ class ExecutionLevelDispatchedState(
*/
fun beginExecuteOperation(
parameters: InstrumentationExecuteOperationParameters
): InstrumentationContext<ExecutionResult> {
val executionState = ExecutionBatchState(parameters.executionContext.getDocumentHeight())
): InstrumentationContext<ExecutionResult>? {
executions.computeIfAbsent(parameters.executionContext.executionInput) {
executionState
ExecutionBatchState(parameters.executionContext.getDocumentHeight())
}
return SimpleInstrumentationContext.noOp()
return null
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,16 @@

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

import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
import com.expediagroup.graphql.dataloader.instrumentation.extensions.isMutation
import com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.state.SyncExecutionExhaustedState
import graphql.ExecutionInput
import graphql.ExecutionResult
import graphql.GraphQLContext
import graphql.execution.ExecutionContext
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
import graphql.execution.instrumentation.Instrumentation
import graphql.execution.instrumentation.InstrumentationContext
import graphql.execution.instrumentation.SimpleInstrumentation
import graphql.execution.instrumentation.SimpleInstrumentationContext
import graphql.execution.instrumentation.InstrumentationState
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
Expand All @@ -40,7 +39,7 @@ internal typealias OnSyncExecutionExhaustedCallback = (List<ExecutionInput>) ->
* Custom GraphQL [Instrumentation] that calculate the synchronous execution exhaustion
* of all GraphQL operations sharing the same [GraphQLContext]
*/
abstract class AbstractSyncExecutionExhaustedInstrumentation : SimpleInstrumentation() {
abstract class AbstractSyncExecutionExhaustedInstrumentation : Instrumentation {
/**
* This is invoked each time instrumentation attempts to calculate exhaustion state, this can be called from either
* `beginFieldField.dispatch` or `beginFieldFetch.complete`.
Expand All @@ -53,31 +52,31 @@ abstract class AbstractSyncExecutionExhaustedInstrumentation : SimpleInstrumenta
): OnSyncExecutionExhaustedCallback

override fun beginExecuteOperation(
parameters: InstrumentationExecuteOperationParameters
): InstrumentationContext<ExecutionResult> =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationExecuteOperationParameters,
state: InstrumentationState?
): InstrumentationContext<ExecutionResult>? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
?.beginExecuteOperation(parameters)
?: SimpleInstrumentationContext.noOp()

override fun beginExecutionStrategy(
parameters: InstrumentationExecutionStrategyParameters
): ExecutionStrategyInstrumentationContext =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationExecutionStrategyParameters,
state: InstrumentationState?
): ExecutionStrategyInstrumentationContext? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
?.beginExecutionStrategy(parameters)
?: NoOpExecutionStrategyInstrumentationContext

override fun beginFieldFetch(
parameters: InstrumentationFieldFetchParameters
): InstrumentationContext<Any> =
parameters.executionContext.takeIf { !it.isMutation() }
parameters: InstrumentationFieldFetchParameters,
state: InstrumentationState?
): InstrumentationContext<Any>? =
parameters.executionContext.takeUnless(ExecutionContext::isMutation)
?.graphQLContext?.get<SyncExecutionExhaustedState>(SyncExecutionExhaustedState::class)
?.beginFieldFetch(
parameters,
this.getOnSyncExecutionExhaustedCallback(
SyncExecutionExhaustedInstrumentationParameters(parameters.executionContext)
)
)
?: SimpleInstrumentationContext.noOp()
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,13 @@
package com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.state

import com.expediagroup.graphql.dataloader.KotlinDataLoaderRegistry
import com.expediagroup.graphql.dataloader.instrumentation.NoOpExecutionStrategyInstrumentationContext
import com.expediagroup.graphql.dataloader.instrumentation.syncexhaustion.execution.OnSyncExecutionExhaustedCallback
import graphql.ExecutionInput
import graphql.ExecutionResult
import graphql.GraphQLContext
import graphql.execution.MergedField
import graphql.execution.instrumentation.ExecutionStrategyInstrumentationContext
import graphql.execution.instrumentation.InstrumentationContext
import graphql.execution.instrumentation.SimpleInstrumentationContext
import graphql.execution.instrumentation.parameters.InstrumentationExecuteOperationParameters
import graphql.execution.instrumentation.parameters.InstrumentationExecutionStrategyParameters
import graphql.execution.instrumentation.parameters.InstrumentationFieldFetchParameters
Expand All @@ -51,9 +49,11 @@ class SyncExecutionExhaustedState(
*/
fun beginExecuteOperation(
parameters: InstrumentationExecuteOperationParameters
): InstrumentationContext<ExecutionResult> {
executions[parameters.executionContext.executionInput] = ExecutionBatchState()
return SimpleInstrumentationContext.noOp()
): InstrumentationContext<ExecutionResult>? {
executions.computeIfAbsent(parameters.executionContext.executionInput) {
ExecutionBatchState()
}
return null
}

/**
Expand All @@ -65,7 +65,7 @@ class SyncExecutionExhaustedState(
*/
fun beginExecutionStrategy(
parameters: InstrumentationExecutionStrategyParameters
): ExecutionStrategyInstrumentationContext {
): ExecutionStrategyInstrumentationContext? {
val executionInput = parameters.executionContext.executionInput

executions.computeIfPresent(executionInput) { _, executionState ->
Expand All @@ -79,7 +79,8 @@ class SyncExecutionExhaustedState(
executionState.addExecutionStrategyState(field, path, selectionFields, parentGraphQLType)
executionState
}
return NoOpExecutionStrategyInstrumentationContext

return null
}

/**
Expand Down Expand Up @@ -129,7 +130,7 @@ class SyncExecutionExhaustedState(
/**
* Provide the information about when all [ExecutionInput] sharing a [GraphQLContext] exhausted their execution
* A Synchronous Execution is considered Exhausted when all [DataFetcher]s of all paths were executed up until
* an scalar leaf or a [DataFetcher] that returns a [CompletableFuture]
* a scalar leaf or a [DataFetcher] that returns a [CompletableFuture]
*/
fun allSyncExecutionsExhausted(): Boolean = synchronized(executions) {
when {
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ androidPluginVersion = 7.1.2
classGraphVersion = 4.8.143
federationGraphQLVersion = 0.9.0
graphQLJavaVersion = 19.0
graphQLJavaDataLoaderVersion = 3.1.3
graphQLJavaDataLoaderVersion = 3.2.0
jacksonVersion = 2.13.2
kotlinPoetVersion = 1.11.0
ktorVersion = 2.0.0
Expand Down

0 comments on commit 7711942

Please sign in to comment.