From 5cb26280b455acbbe245feee8640bb6ed253b335 Mon Sep 17 00:00:00 2001 From: Michael Trimarchi Date: Sun, 18 Feb 2024 13:10:34 +0100 Subject: [PATCH 1/2] RunningJobs: Fix name matching including job path The matching was working on a flat project organization. Jira-Id: JENKINS-70162 Signed-off-by: Michael Trimarchi --- .../plugins/gerrit/trigger/hudsontrigger/RunningJobs.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java index d9eb9b93a..2d3aaf741 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/RunningJobs.java @@ -13,6 +13,7 @@ import hudson.model.Computer; import hudson.model.Executor; import hudson.model.Item; +import hudson.model.Job; import hudson.model.Queue; import hudson.model.Result; import hudson.model.Run; @@ -242,7 +243,8 @@ private void cancelMatchingJobs(GerritTriggeredEvent event, String jobName, Caus List itemsInQueue = Queue.getInstance().getItems((Queue.Task)getJob()); for (Queue.Item item : itemsInQueue) { if (checkCausedByGerrit(event, item.getCauses())) { - if (jobName.equals(item.task.getName())) { + Job tJob = (Job)item.task; + if (jobName.equals(tJob.getFullName())) { Queue.getInstance().cancel(item); } } From f410332953df5e3cf279efe3d65168de9bde5ad4 Mon Sep 17 00:00:00 2001 From: Michael Trimarchi Date: Sun, 18 Feb 2024 13:11:17 +0100 Subject: [PATCH 2/2] EventListener: Syncronyze the AbortJob and the add new scheduled job If lot of patches are sent the removing on the queue is not working and job that must be aborted are not aborted. Suppose to have activated abortTopic and we want to push: patch A->B->C We would like that only the last patch is build and not B and A Jira-Id: JENKINS-70162 Jira-Id: JENKINS-72193 Jira-Id: JENKINS-71328 Jira-Id: JENKINS-70539 Jira-Id: JENKINS-69338 Signed-off-by: Michael Trimarchi --- .../trigger/hudsontrigger/EventListener.java | 54 ++++++++++--------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/EventListener.java b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/EventListener.java index 9bdedb242..36a48e6db 100644 --- a/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/EventListener.java +++ b/src/main/java/com/sonyericsson/hudson/plugins/gerrit/trigger/hudsontrigger/EventListener.java @@ -124,15 +124,17 @@ public void gerritEvent(GerritEvent event) { } if (event instanceof GerritTriggeredEvent) { GerritTriggeredEvent triggeredEvent = (GerritTriggeredEvent)event; - if (t.isInteresting(triggeredEvent)) { - logger.trace("The event is interesting."); - abortBuild(t, triggeredEvent); - if (t.isOnlyAbortRunningBuild(triggeredEvent)) { - logger.trace("Just aborting build based on event not scheduling new one."); - return; + synchronized (this) { + if (t.isInteresting(triggeredEvent)) { + logger.trace("The event is interesting."); + abortBuild(t, triggeredEvent); + if (t.isOnlyAbortRunningBuild(triggeredEvent)) { + logger.trace("Just aborting build based on event not scheduling new one."); + return; + } + notifyOnTriggered(t, triggeredEvent); + schedule(t, new GerritCause(triggeredEvent, t.isSilentMode()), triggeredEvent); } - notifyOnTriggered(t, triggeredEvent); - schedule(t, new GerritCause(triggeredEvent, t.isSilentMode()), triggeredEvent); } } } @@ -162,15 +164,17 @@ public void gerritEvent(ManualPatchsetCreated event) { // to just return now without processing the event. return; } - if (t.isInteresting(event)) { - logger.trace("The event is interesting."); - abortBuild(t, event); - if (t.isOnlyAbortRunningBuild(event)) { - logger.trace("Just aborting build based on event not scheduling new one."); - return; + synchronized (this) { + if (t.isInteresting(event)) { + logger.trace("The event is interesting."); + abortBuild(t, event); + if (t.isOnlyAbortRunningBuild(event)) { + logger.trace("Just aborting build based on event not scheduling new one."); + return; + } + notifyOnTriggered(t, event); + schedule(t, new GerritManualCause(event, t.isSilentMode()), event); } - notifyOnTriggered(t, event); - schedule(t, new GerritManualCause(event, t.isSilentMode()), event); } } @@ -206,15 +210,17 @@ public void gerritEvent(CommentAdded event) { // to just return now without processing the event. return; } - if (t.isInteresting(event) && t.commentAddedMatch(event)) { - logger.trace("The event is interesting."); - abortBuild(t, event); - if (t.isOnlyAbortRunningBuild(event)) { - logger.trace("Just aborting build based on event not scheduling new one."); - return; + synchronized (this) { + if (t.isInteresting(event) && t.commentAddedMatch(event)) { + logger.trace("The event is interesting."); + abortBuild(t, event); + if (t.isOnlyAbortRunningBuild(event)) { + logger.trace("Just aborting build based on event not scheduling new one."); + return; + } + notifyOnTriggered(t, event); + schedule(t, new GerritCause(event, t.isSilentMode()), event); } - notifyOnTriggered(t, event); - schedule(t, new GerritCause(event, t.isSilentMode()), event); } }