From fda65f0ca94d55cd5cfaba8adc54d5fde2c02496 Mon Sep 17 00:00:00 2001 From: Quinn Klassen <klassenq@gmail.com> Date: Mon, 8 Jul 2024 10:10:31 -0700 Subject: [PATCH] Add isHeld to lock interface --- .../java/io/temporal/internal/sync/WorkflowLockImpl.java | 5 +++++ .../src/main/java/io/temporal/workflow/WorkflowLock.java | 7 +++++++ .../temporal/internal/sync/WorkflowInternalLockTest.java | 4 ++++ 3 files changed, 16 insertions(+) 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",