From b76e7bf9988ebf5b3b7e2c5e588d5ce6dbde957e Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Mon, 17 Nov 2014 17:48:48 -0500 Subject: [PATCH] [FIXED JENKINS-25655] Incorrect caching from entrySet sometimes caused incorrect results. Caused a failure in hudson.plugins.promoted_builds.conditions.ManualConditionTest.testManualPromotionProcessViaWebClient when run against 1.580.1. --- .../java/jenkins/model/lazy/AbstractLazyLoadRunMap.java | 4 ++++ .../java/jenkins/model/lazy/LazyLoadRunMapEntrySet.java | 4 ++++ .../jenkins/model/lazy/AbstractLazyLoadRunMapTest.java | 7 +++++++ 3 files changed, 15 insertions(+) diff --git a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java index 33ba98c598..f299d598d0 100644 --- a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java +++ b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java @@ -585,6 +585,8 @@ public abstract class AbstractLazyLoadRunMap extends AbstractMap i numberOnDisk = a; } + entrySet.clearCache(); + return unwrap(old); } @@ -742,6 +744,8 @@ public abstract class AbstractLazyLoadRunMap extends AbstractMap i BuildReference old = copy.byId.remove(getIdOf(run)); this.index = copy; + entrySet.clearCache(); + return unwrap(old)!=null; } diff --git a/core/src/main/java/jenkins/model/lazy/LazyLoadRunMapEntrySet.java b/core/src/main/java/jenkins/model/lazy/LazyLoadRunMapEntrySet.java index b3910b51ae..48aada93e0 100644 --- a/core/src/main/java/jenkins/model/lazy/LazyLoadRunMapEntrySet.java +++ b/core/src/main/java/jenkins/model/lazy/LazyLoadRunMapEntrySet.java @@ -32,6 +32,10 @@ class LazyLoadRunMapEntrySet extends AbstractSet> { return all; } + synchronized void clearCache() { + all = null; + } + @Override public int size() { return all().size(); diff --git a/core/src/test/java/jenkins/model/lazy/AbstractLazyLoadRunMapTest.java b/core/src/test/java/jenkins/model/lazy/AbstractLazyLoadRunMapTest.java index 55bd0bdfde..6cb55b6e7d 100644 --- a/core/src/test/java/jenkins/model/lazy/AbstractLazyLoadRunMapTest.java +++ b/core/src/test/java/jenkins/model/lazy/AbstractLazyLoadRunMapTest.java @@ -414,6 +414,13 @@ public class AbstractLazyLoadRunMapTest extends Assert { assertEquals(0, b.entrySet().size()); } + @Issue("JENKINS-25655") + @Test public void entrySetChanges() { + assertEquals(3, a.entrySet().size()); + a.put(new Build(7, "D")); + assertEquals(4, a.entrySet().size()); + } + @Issue("JENKINS-18065") @Test public void entrySetContains() {