Hi, in our worker application I see several threads in WAITING state, for workflows that already completed, like this one.
Do you know how to avoid this? Thanks!
This is part of the output from jstack
:
"workflow-method-MyWorkflow" #179 [294] prio=5 os_prio=0 cpu=90.92ms elapsed=22651.97s tid=0x00007f5ff80a3570 nid=294 waiting on condition [0x00007f5fb29f1000]
java.lang.Thread.State: WAITING (parking)
at jdk.internal.misc.Unsafe.park(java.base@21.0.2/Native Method)
- parking to wait for <0x0000000767c29b60> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(java.base@21.0.2/LockSupport.java:371)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionNode.block(java.base@21.0.2/AbstractQueuedSynchronizer.java:519)
at java.util.concurrent.ForkJoinPool.unmanagedBlock(java.base@21.0.2/ForkJoinPool.java:3780)
at java.util.concurrent.ForkJoinPool.managedBlock(java.base@21.0.2/ForkJoinPool.java:3725)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(java.base@21.0.2/AbstractQueuedSynchronizer.java:1707)
at io.temporal.internal.sync.WorkflowThreadScheduler.yieldLocked(WorkflowThreadScheduler.java:57)
at io.temporal.internal.sync.WorkflowThreadContext.yield(WorkflowThreadContext.java:90)
at io.temporal.internal.sync.WorkflowThreadImpl.yield(WorkflowThreadImpl.java:393)
at io.temporal.internal.sync.WorkflowThread.await(WorkflowThread.java:47)
at io.temporal.internal.sync.CompletablePromiseImpl.getImpl(CompletablePromiseImpl.java:85)
at io.temporal.internal.sync.CompletablePromiseImpl.get(CompletablePromiseImpl.java:75)
at io.temporal.internal.sync.ActivityStubBase.execute(ActivityStubBase.java:45)
at io.temporal.internal.sync.ActivityInvocationHandler.lambda$getActivityFunc$0(ActivityInvocationHandler.java:83)
at io.temporal.internal.sync.ActivityInvocationHandler$$Lambda/0x00007f6028c23968.apply(Unknown Source)
at io.temporal.internal.sync.ActivityInvocationHandlerBase.invoke(ActivityInvocationHandlerBase.java:68)
at jdk.proxy2.$Proxy71.update(jdk.proxy2/Unknown Source)
...
In this case, for example, the activity method is update
. From the Temporal UI, I don’t see any problem in the call to this method.