diff --git a/temporal-sdk/src/main/java/io/temporal/internal/sync/WorkflowLockImpl.java b/temporal-sdk/src/main/java/io/temporal/internal/sync/WorkflowLockImpl.java index d29d7ce7d4..9cf6d34e21 100644 --- a/temporal-sdk/src/main/java/io/temporal/internal/sync/WorkflowLockImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/internal/sync/WorkflowLockImpl.java @@ -74,4 +74,9 @@ public void unlock() { Preconditions.checkState(locked, "WorkflowLock.unlock called when not locked"); locked = false; } + + @Override + public boolean isHeld() { + return locked; + } } diff --git a/temporal-sdk/src/main/java/io/temporal/workflow/WorkflowLock.java b/temporal-sdk/src/main/java/io/temporal/workflow/WorkflowLock.java index 3b76d35596..a13ac52f2e 100644 --- a/temporal-sdk/src/main/java/io/temporal/workflow/WorkflowLock.java +++ b/temporal-sdk/src/main/java/io/temporal/workflow/WorkflowLock.java @@ -57,4 +57,11 @@ public interface WorkflowLock { /** Releases the lock. */ void unlock(); + + /** + * Checks if a lock is held. + * + * @return true if the lock is held and false otherwise. + */ + boolean isHeld(); } diff --git a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java index 0b9911499f..f0408238ba 100644 --- a/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java +++ b/temporal-sdk/src/test/java/io/temporal/internal/sync/WorkflowInternalLockTest.java @@ -66,6 +66,8 @@ public void testThreadInterleaving() { WorkflowLock l2 = WorkflowInternal.newWorkflowLock(); trace.add("root begin"); l2.lock(); + trace.add("l1.isHeld " + l1.isHeld()); + trace.add("l2.isHeld " + l2.isHeld()); WorkflowThread.newThread( () -> { trace.add("thread1 begin"); @@ -96,6 +98,8 @@ public void testThreadInterleaving() { String[] expected = new String[] { "root begin", + "l1.isHeld false", + "l2.isHeld true", "root done", "thread1 begin", "thread1 lock 1 success",