Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[JENKINS-15156] Found a problem with uninitialized run maps in new Ma…
…ven modules.

Not observed in actual usage, but reproducible (for me at least, though apparently not ci.jenkins-ci.org) in a test:
java.lang.AssertionError: null
    at jenkins.model.lazy.AbstractLazyLoadRunMap.load(AbstractLazyLoadRunMap.java:628)
    at jenkins.model.lazy.AbstractLazyLoadRunMap.all(AbstractLazyLoadRunMap.java:581)
    at jenkins.model.lazy.AbstractLazyLoadRunMap.entrySet(AbstractLazyLoadRunMap.java:243)
    at java.util.AbstractMap$2$1.<init>(AbstractMap.java:378)
    at java.util.AbstractMap$2.iterator(AbstractMap.java:377)
    at hudson.util.RunList.iterator(RunList.java:103)
    at hudson.util.RunList.size(RunList.java:114)
    at hudson.maven.MavenProjectTest.testDeleteSetBuildDeletesModuleBuilds(MavenProjectTest.java:159)
  • Loading branch information
jglick committed Feb 21, 2013
1 parent fd0657e commit 09c7cf6
Show file tree
Hide file tree
Showing 3 changed files with 13 additions and 1 deletion.
2 changes: 1 addition & 1 deletion core/src/main/java/hudson/model/AbstractProject.java
Expand Up @@ -88,7 +88,6 @@
import jenkins.scm.SCMCheckoutStrategyDescriptor;
import jenkins.util.TimeDuration;
import net.sf.json.JSONObject;
import org.apache.tools.ant.taskdefs.email.Mailer;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
import org.kohsuke.args4j.Argument;
Expand Down Expand Up @@ -989,6 +988,7 @@ public BuildAuthorizationToken getAuthToken() {

@Override
public RunMap<R> _getRuns() {
assert builds.baseDirInitialized() : "neither onCreatedFromScratch nor onLoad called on " + this + " yet";
return builds;
}

Expand Down
11 changes: 11 additions & 0 deletions core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java
Expand Up @@ -23,7 +23,9 @@
*/
package jenkins.model.lazy;

import hudson.model.Job;
import hudson.model.Run;
import hudson.model.RunMap;
import org.apache.commons.collections.keyvalue.DefaultMapEntry;
import org.kohsuke.accmod.Restricted;
import org.kohsuke.accmod.restrictions.NoExternalUse;
Expand Down Expand Up @@ -200,6 +202,14 @@ protected void initBaseDir(File dir) {
loadIdOnDisk();
}

/**
* @return true if {@link AbstractLazyLoadRunMap#AbstractLazyLoadRunMap} was called with a non-null param, or {@link RunMap#load(Job, RunMap.Constructor)} was called
*/
@Restricted(NoExternalUse.class)
public final boolean baseDirInitialized() {
return dir != null;
}

private void loadIdOnDisk() {
String[] buildDirs = dir.list(createDirectoryFilter());
if (buildDirs==null) {
Expand Down Expand Up @@ -240,6 +250,7 @@ public boolean isEmpty() {

@Override
public Set<Entry<Integer, R>> entrySet() {
assert baseDirInitialized();
return Collections.unmodifiableSet(new BuildReferenceMapAdapter<R>(this,all()).entrySet());
}

Expand Down
Expand Up @@ -905,6 +905,7 @@ private void parsePoms(BuildListener listener, PrintStream logger, EnvVars envVa
} else {// this looks like a new module
logger.println(Messages.MavenModuleSetBuild_DiscoveredModule(pom.name,pom.displayName));
mm = new MavenModule(project,pom,getNumber());
mm.onCreatedFromScratch();
modules.put(mm.getModuleName(),mm);
needsDependencyGraphRecalculation = true;
}
Expand Down

0 comments on commit 09c7cf6

Please sign in to comment.