cryostatio / cryostat

Secure JDK Flight Recorder management for containerized JVMs
https://cryostat.io
Other
12 stars 9 forks source link

[Bug] GraphQL `deleteRecording` mutation fails #432

Closed andrewazores closed 5 months ago

andrewazores commented 5 months ago

Current Behavior

$ ./smoketest.bash -OGp -s localstack # run smoketest with just Cryostat itself, no Grafana, no auth proxy, and with localstack for fast startup
$ http --form :8080/api/v3/targets/1/recordings recordingName=test events=template=Profiling # start a new recording
$ http :8080/api/v3/graphql query='query { targetNodes(filter: { name: "service:jmx:rmi:///jndi/rmi://localhost:0/jmxrmi" }) { name target { activeRecordings { data { name } } } } }' # use GraphQL to check the available active recordings

Then try using the deleteRecording mutation to delete recordings:

$ http :8080/api/v3/graphql query='mutation { deleteRecording(nodes: { name: "service:jmx:rmi:///jndi/rmi://localhost:0/jmxrmi" }, recordings: { name: "test" }) { name state } }'

HTTP/1.1 200 OK
content-length: 191
content-type: application/json

{
    "data": {
        "deleteRecording": null
    },
    "errors": [
        {
            "extensions": {
                "classification": "DataFetchingException"
            },
            "locations": [
                {
                    "column": 12,
                    "line": 1
                }
            ],
            "message": "System error",
            "path": [
                "deleteRecording"
            ]
        }
    ]
}

This request fails with the stack trace below in the server logs.


Deleting one of the pre-existing recordings in the same way succeeds:

$ http :8080/api/v3/graphql query='mutation { deleteRecording(nodes: { name: "service:jmx:rmi:///jndi/rmi://localhost:0/jmxrmi" }, recordings: { name: "startup" }) { name state } }'
HTTP/1.1 200 OK
content-length: 67
content-type: application/json

{
    "data": {
        "deleteRecording": [
            {
                "name": "startup",
                "state": "STOPPED"
            }
        ]
    }
}

$ http :8080/api/v3/graphql query='mutation { deleteRecording(nodes: { name: "service:jmx:rmi:///jndi/rmi://localhost:0/jmxrmi" }, recordings: { name: "onstart" }) { name state } }'
HTTP/1.1 200 OK
content-length: 67
content-type: application/json

{
    "data": {
        "deleteRecording": [
            {
                "name": "onstart",
                "state": "RUNNING"
            }
        ]
    }
}

Expected Behavior

No response

Steps To Reproduce

No response

Environment

No response

Anything else?

cryostat_1  | 2024-05-03 21:23:23,673 DEBUG [not.gra.exe.ExecutionStrategy] (executor-thread-3) '97680713213', field '/deleteRecording' fetch threw exception: java.util.ConcurrentModificationException
cryostat_1  |   at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
cryostat_1  |   at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
cryostat_1  |   at org.hibernate.collection.spi.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:917)
cryostat_1  |   at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
cryostat_1  |   at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
cryostat_1  |   at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
cryostat_1  |   at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings.deleteRecording(ActiveRecordings.java:200)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass.deleteRecording$$superforward(Unknown Source)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass$$function$$8.apply(Unknown Source)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
cryostat_1  |   at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
cryostat_1  |   at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass.deleteRecording(Unknown Source)
cryostat_1  |   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
cryostat_1  |   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
cryostat_1  |   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
cryostat_1  |   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.helper.ReflectionInvoker.invoke(ReflectionInvoker.java:97)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.DefaultDataFetcher.invokeAndTransform(DefaultDataFetcher.java:33)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.spi.datafetcher.QuarkusDefaultDataFetcher.invokeAndTransform(QuarkusDefaultDataFetcher.java:45)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.AbstractDataFetcher.get(AbstractDataFetcher.java:66)
cryostat_1  |   at graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation.lambda$instrumentDataFetcher$0(DataLoaderDispatcherInstrumentation.java:90)
cryostat_1  |   at graphql.execution.ExecutionStrategy.invokeDataFetcher(ExecutionStrategy.java:309)
cryostat_1  |   at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:286)
cryostat_1  |   at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:212)
cryostat_1  |   at graphql.execution.ExecutionStrategy.resolveField(ExecutionStrategy.java:184)
cryostat_1  |   at graphql.execution.AsyncSerialExecutionStrategy.lambda$execute$1(AsyncSerialExecutionStrategy.java:47)
cryostat_1  |   at graphql.execution.Async.eachSequentiallyImpl(Async.java:167)
cryostat_1  |   at graphql.execution.Async.eachSequentially(Async.java:156)
cryostat_1  |   at graphql.execution.AsyncSerialExecutionStrategy.execute(AsyncSerialExecutionStrategy.java:42)
cryostat_1  |   at graphql.execution.Execution.executeOperation(Execution.java:161)
cryostat_1  |   at graphql.execution.Execution.execute(Execution.java:104)
cryostat_1  |   at graphql.GraphQL.execute(GraphQL.java:557)
cryostat_1  |   at graphql.GraphQL.lambda$parseValidateAndExecute$11(GraphQL.java:476)
cryostat_1  |   at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)
cryostat_1  |   at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)
cryostat_1  |   at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:471)
cryostat_1  |   at graphql.GraphQL.executeAsync(GraphQL.java:439)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.lambda$writeAsync$0(ExecutionService.java:214)
cryostat_1  |   at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
cryostat_1  |   at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage.subscribe(UniCreateFromCompletionStage.java:24)
cryostat_1  |   at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:88)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.writeAsync(ExecutionService.java:216)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.execute(ExecutionService.java:183)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.executeAsync(ExecutionService.java:119)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.doRequest(SmallRyeGraphQLExecutionHandler.java:326)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.handlePost(SmallRyeGraphQLExecutionHandler.java:124)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.doHandle(SmallRyeGraphQLExecutionHandler.java:85)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handleWithIdentity(SmallRyeGraphQLAbstractHandler.java:95)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handle(SmallRyeGraphQLAbstractHandler.java:76)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handle(SmallRyeGraphQLAbstractHandler.java:30)
cryostat_1  |   at io.vertx.ext.web.impl.BlockingHandlerDecorator.lambda$handle$0(BlockingHandlerDecorator.java:48)
cryostat_1  |   at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:180)
cryostat_1  |   at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:277)
cryostat_1  |   at io.vertx.core.impl.ContextBase.lambda$internalExecuteBlocking$2(ContextBase.java:199)
cryostat_1  |   at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576)
cryostat_1  |   at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
cryostat_1  |   at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
cryostat_1  |   at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
cryostat_1  |   at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
cryostat_1  |   at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat_1  |   at java.base/java.lang.Thread.run(Thread.java:840)

cryostat_1  | May 03, 2024 9:23:23 PM io.smallrye.graphql.execution.error.ExceptionHandler onException
cryostat_1  | ERROR: SRGQL012000: Data Fetching Error
cryostat_1  | java.util.ConcurrentModificationException
cryostat_1  |   at java.base/java.util.ArrayList$Itr.checkForComodification(ArrayList.java:1013)
cryostat_1  |   at java.base/java.util.ArrayList$Itr.next(ArrayList.java:967)
cryostat_1  |   at org.hibernate.collection.spi.AbstractPersistentCollection$IteratorProxy.next(AbstractPersistentCollection.java:917)
cryostat_1  |   at java.base/java.util.Iterator.forEachRemaining(Iterator.java:133)
cryostat_1  |   at java.base/java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1845)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
cryostat_1  |   at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
cryostat_1  |   at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
cryostat_1  |   at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
cryostat_1  |   at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
cryostat_1  |   at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings.deleteRecording(ActiveRecordings.java:200)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass.deleteRecording$$superforward(Unknown Source)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass$$function$$8.apply(Unknown Source)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:73)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.proceed(AroundInvokeInvocationContext.java:62)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:136)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.invokeInOurTx(TransactionalInterceptorBase.java:107)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.doIntercept(TransactionalInterceptorRequired.java:38)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorBase.intercept(TransactionalInterceptorBase.java:61)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired.intercept(TransactionalInterceptorRequired.java:32)
cryostat_1  |   at io.quarkus.narayana.jta.runtime.interceptor.TransactionalInterceptorRequired_Bean.intercept(Unknown Source)
cryostat_1  |   at io.quarkus.arc.impl.InterceptorInvocation.invoke(InterceptorInvocation.java:42)
cryostat_1  |   at io.quarkus.arc.impl.AroundInvokeInvocationContext.perform(AroundInvokeInvocationContext.java:30)
cryostat_1  |   at io.quarkus.arc.impl.InvocationContexts.performAroundInvoke(InvocationContexts.java:27)
cryostat_1  |   at io.cryostat.graphql.ActiveRecordings_Subclass.deleteRecording(Unknown Source)
cryostat_1  |   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
cryostat_1  |   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
cryostat_1  |   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
cryostat_1  |   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.helper.ReflectionInvoker.invoke(ReflectionInvoker.java:97)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.DefaultDataFetcher.invokeAndTransform(DefaultDataFetcher.java:33)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.spi.datafetcher.QuarkusDefaultDataFetcher.invokeAndTransform(QuarkusDefaultDataFetcher.java:45)
cryostat_1  |   at io.smallrye.graphql.execution.datafetcher.AbstractDataFetcher.get(AbstractDataFetcher.java:66)
cryostat_1  |   at graphql.execution.instrumentation.dataloader.DataLoaderDispatcherInstrumentation.lambda$instrumentDataFetcher$0(DataLoaderDispatcherInstrumentation.java:90)
cryostat_1  |   at graphql.execution.ExecutionStrategy.invokeDataFetcher(ExecutionStrategy.java:309)
cryostat_1  |   at graphql.execution.ExecutionStrategy.fetchField(ExecutionStrategy.java:286)
cryostat_1  |   at graphql.execution.ExecutionStrategy.resolveFieldWithInfo(ExecutionStrategy.java:212)
cryostat_1  |   at graphql.execution.ExecutionStrategy.resolveField(ExecutionStrategy.java:184)
cryostat_1  |   at graphql.execution.AsyncSerialExecutionStrategy.lambda$execute$1(AsyncSerialExecutionStrategy.java:47)
cryostat_1  |   at graphql.execution.Async.eachSequentiallyImpl(Async.java:167)
cryostat_1  |   at graphql.execution.Async.eachSequentially(Async.java:156)
cryostat_1  |   at graphql.execution.AsyncSerialExecutionStrategy.execute(AsyncSerialExecutionStrategy.java:42)
cryostat_1  |   at graphql.execution.Execution.executeOperation(Execution.java:161)
cryostat_1  |   at graphql.execution.Execution.execute(Execution.java:104)
cryostat_1  |   at graphql.GraphQL.execute(GraphQL.java:557)
cryostat_1  |   at graphql.GraphQL.lambda$parseValidateAndExecute$11(GraphQL.java:476)
cryostat_1  |   at java.base/java.util.concurrent.CompletableFuture.uniComposeStage(CompletableFuture.java:1187)
cryostat_1  |   at java.base/java.util.concurrent.CompletableFuture.thenCompose(CompletableFuture.java:2309)
cryostat_1  |   at graphql.GraphQL.parseValidateAndExecute(GraphQL.java:471)
cryostat_1  |   at graphql.GraphQL.executeAsync(GraphQL.java:439)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.lambda$writeAsync$0(ExecutionService.java:214)
cryostat_1  |   at io.smallrye.context.impl.wrappers.SlowContextualSupplier.get(SlowContextualSupplier.java:21)
cryostat_1  |   at io.smallrye.mutiny.operators.uni.builders.UniCreateFromCompletionStage.subscribe(UniCreateFromCompletionStage.java:24)
cryostat_1  |   at io.smallrye.mutiny.operators.AbstractUni.subscribe(AbstractUni.java:36)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.withSubscriber(UniSubscribe.java:51)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:110)
cryostat_1  |   at io.smallrye.mutiny.groups.UniSubscribe.with(UniSubscribe.java:88)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.writeAsync(ExecutionService.java:216)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.execute(ExecutionService.java:183)
cryostat_1  |   at io.smallrye.graphql.execution.ExecutionService.executeAsync(ExecutionService.java:119)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.doRequest(SmallRyeGraphQLExecutionHandler.java:326)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.handlePost(SmallRyeGraphQLExecutionHandler.java:124)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLExecutionHandler.doHandle(SmallRyeGraphQLExecutionHandler.java:85)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handleWithIdentity(SmallRyeGraphQLAbstractHandler.java:95)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handle(SmallRyeGraphQLAbstractHandler.java:76)
cryostat_1  |   at io.quarkus.smallrye.graphql.runtime.SmallRyeGraphQLAbstractHandler.handle(SmallRyeGraphQLAbstractHandler.java:30)
cryostat_1  |   at io.vertx.ext.web.impl.BlockingHandlerDecorator.lambda$handle$0(BlockingHandlerDecorator.java:48)
cryostat_1  |   at io.vertx.core.impl.ContextBase.lambda$executeBlocking$1(ContextBase.java:180)
cryostat_1  |   at io.vertx.core.impl.ContextInternal.dispatch(ContextInternal.java:277)
cryostat_1  |   at io.vertx.core.impl.ContextBase.lambda$internalExecuteBlocking$2(ContextBase.java:199)
cryostat_1  |   at io.quarkus.vertx.core.runtime.VertxCoreRecorder$14.runWith(VertxCoreRecorder.java:576)
cryostat_1  |   at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
cryostat_1  |   at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1538)
cryostat_1  |   at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
cryostat_1  |   at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
cryostat_1  |   at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
cryostat_1  |   at java.base/java.lang.Thread.run(Thread.java:840)
cryostat_1  | 
cryostat_1  | 2024-05-03 21:23:23,677 DEBUG [gra.exe.ExecutionStrategy] (executor-thread-3) '97680713213' completing field '/deleteRecording'...
cryostat_1  | 2024-05-03 21:23:23,678 DEBUG [gra.GraphQL] (executor-thread-3) Execution '97680713213' completed with '1' errors
cryostat_1  | May 03, 2024 9:23:23 PM io.smallrye.graphql.execution.ExecutionService notifyAndWrite
cryostat_1  | INFO: SRGQL011006: Payload Out [ExecutionResponse->ExecutionResultImpl{errors=[ExceptionWhileDataFetching{path=[deleteRecording], exception=java.util.ConcurrentModificationException, locations=[SourceLocation{line=1, column=12}]}], data={deleteRecording=null}, dataPresent=true, extensions=null}]
andrewazores commented 5 months ago

Possibly related #415