From 5a8876593cda04b7c901788c1ad600436bdf4778 Mon Sep 17 00:00:00 2001 From: Chris Foote Date: Wed, 23 Oct 2024 03:02:16 +1300 Subject: [PATCH] Reinstate the released lock messages for freestyle builds (removed by #673) --- .../LockableResourcesManager.java | 22 +++++++++++++------ .../queue/LockRunListener.java | 21 ++++++++++++++---- .../FreeStyleProjectTest.java | 1 + .../lockableresources/NodesMirrorTest.java | 2 +- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java b/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java index 94dddd59..d8eb8321 100644 --- a/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java +++ b/src/main/java/org/jenkins/plugins/lockableresources/LockableResourcesManager.java @@ -643,19 +643,27 @@ private void freeResources(List unlockResources, Run bui removeResources(toBeRemoved); } - public void unlockBuild(@Nullable Run build) { + @NonNull + public List unlockBuild2(@Nullable Run build) { if (build == null) { - return; + return Collections.emptyList(); } - List resourcesInUse = - LockedResourcesBuildAction.findAndInitAction(build).getCurrentUsedResourceNames(); + List resourcesInUse = new ArrayList<>( + LockedResourcesBuildAction.findAndInitAction(build).getCurrentUsedResourceNames()); - if (resourcesInUse.size() == 0) { - return; + if (!resourcesInUse.isEmpty()) { + unlockNames(resourcesInUse, build); } - unlockNames(resourcesInUse, build); + return resourcesInUse; + } + + /** @deprecated Use unlockBuild2 */ + @Deprecated + public void unlockBuild(@Nullable Run build) { + + unlockBuild2(build); } // --------------------------------------------------------------------------- diff --git a/src/main/java/org/jenkins/plugins/lockableresources/queue/LockRunListener.java b/src/main/java/org/jenkins/plugins/lockableresources/queue/LockRunListener.java index caceece3..07aeaebf 100644 --- a/src/main/java/org/jenkins/plugins/lockableresources/queue/LockRunListener.java +++ b/src/main/java/org/jenkins/plugins/lockableresources/queue/LockRunListener.java @@ -97,8 +97,15 @@ public void onCompleted(Run build, @NonNull TaskListener listener) { // Skip unlocking for multiple configuration projects, // only the child jobs will actually unlock resources. if (build instanceof MatrixBuild) return; - LOGGER.info(build.getFullDisplayName()); - LockableResourcesManager.get().unlockBuild(build); + + List unlocked = LockableResourcesManager.get().unlockBuild2(build); + if (!unlocked.isEmpty()) { + listener.getLogger().printf("%s released lock on %s%n", LOG_PREFIX, unlocked); + LOGGER.info(build.getFullDisplayName() + + " released lock on " + + unlocked + + ", because the build has finished."); + } } @Override @@ -106,7 +113,13 @@ public void onDeleted(Run build) { // Skip unlocking for multiple configuration projects, // only the child jobs will actually unlock resources. if (build instanceof MatrixBuild) return; - LOGGER.info(build.getFullDisplayName()); - LockableResourcesManager.get().unlockBuild(build); + + List unlocked = LockableResourcesManager.get().unlockBuild2(build); + if (!unlocked.isEmpty()) { + LOGGER.warning(build.getFullDisplayName() + + " released lock on " + + unlocked + + ", because the build has been deleted."); + } } } diff --git a/src/test/java/org/jenkins/plugins/lockableresources/FreeStyleProjectTest.java b/src/test/java/org/jenkins/plugins/lockableresources/FreeStyleProjectTest.java index a23e9d62..4d8fdeba 100644 --- a/src/test/java/org/jenkins/plugins/lockableresources/FreeStyleProjectTest.java +++ b/src/test/java/org/jenkins/plugins/lockableresources/FreeStyleProjectTest.java @@ -260,6 +260,7 @@ public boolean perform(AbstractBuild build, Launcher launcher, BuildListen QueueTaskFuture fb2q = f2.scheduleBuild2(0); semaphore.release(); + j.waitForMessage("released lock on [shared]", fb0); j.waitForCompletion(fb0); // fb1 or fb2 might run first, it shouldn't matter as long as they both get the resource FreeStyleBuild fb1 = fb1q.waitForStart(); diff --git a/src/test/java/org/jenkins/plugins/lockableresources/NodesMirrorTest.java b/src/test/java/org/jenkins/plugins/lockableresources/NodesMirrorTest.java index 3a70d4eb..f5fada39 100644 --- a/src/test/java/org/jenkins/plugins/lockableresources/NodesMirrorTest.java +++ b/src/test/java/org/jenkins/plugins/lockableresources/NodesMirrorTest.java @@ -16,7 +16,7 @@ public class NodesMirrorTest { - private static final Logger LOGGER = Logger.getLogger(NodesMirror.class.getName()); + private static final Logger LOGGER = Logger.getLogger(NodesMirrorTest.class.getName()); @Rule public final JenkinsRule j = new JenkinsRule();