Hi,

Trying to debug JENKINS-15156 it seems that after creating a new job,
the 'dir' member of its 'AbstractLazyLoadRunMap' of builds is null
until Jenkins is restarted/reload. After the map's members get
garbage-collected, reloading them fails because dir is null, giving
the missing builds.

Below is a patch against revision ce170a60be which for me seems to
solve this.

Regards,
Julian


diff --git a/core/src/main/java/hudson/model/AbstractProject.java 
b/core/src/main/java/hudson/model/AbstractProject.java
index b0a8a19..6b1448f 100644
--- a/core/src/main/java/hudson/model/AbstractProject.java
+++ b/core/src/main/java/hudson/model/AbstractProject.java
@@ -162,7 +162,7 @@ public abstract class AbstractProject<P extends 
AbstractProject<P,R>,R extends A
      * {@link Run#getPreviousBuild()}
      */
     @Restricted(NoExternalUse.class)
-    protected transient RunMap<R> builds = new RunMap<R>();
+    protected transient RunMap<R> builds;
 
     /**
      * The quiet period. Null to delegate to the system default.
@@ -271,6 +271,12 @@ public abstract class AbstractProject<P extends 
AbstractProject<P,R>,R extends A
         super.onCreatedFromScratch();
         // solicit initial contributions, especially from 
TransientProjectActionFactory
         updateTransientActions();
+        assert builds==null;
+        builds = new RunMap<R>(getBuildDir(), new Constructor<R>() {
+            public R create(File dir) throws IOException {
+               return loadBuild(dir);
+            }
+        });
     }
 
     @Override
diff --git a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java 
b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
index 2129030..3deaf03 100644
--- a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
+++ b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
@@ -203,8 +203,8 @@ public abstract class AbstractLazyLoadRunMap<R> extends 
AbstractMap<Integer,R> i
     private void loadIdOnDisk() {
         String[] buildDirs = dir.list(createDirectoryFilter());
         if (buildDirs==null) {
+           // the job may just have been created
             buildDirs=EMPTY_STRING_ARRAY;
-            LOGGER.log(Level.WARNING, "failed to load list of builds from 
{0}", dir);
         }
         // wrap into ArrayList to enable mutation
         Arrays.sort(buildDirs);
@@ -625,6 +625,7 @@ public abstract class AbstractLazyLoadRunMap<R> extends 
AbstractMap<Integer,R> i
 
 
     protected R load(String id, Index editInPlace) {
+        assert dir != null;
         R v = load(new File(dir, id), editInPlace);
         if (v==null && editInPlace!=null) {
             // remember the failure.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Developers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to