Stop using the formatted timestamp to compute Run.id, and just use the build number as the directory name, so that

      r.getId().equals(String.valueOf(r.number))

      in which case the timestamp would have to be made a nontransient field (but number could be transient). Then build number symlinks could be dispensed with, saving some hassle and overhead; and AbstractLazyLoadRunMap could be greatly simplified, since the disk location would be immediately predictable from the number, which is what most API calls care about.

      The downside is that there would have to be a one-time migration, which could be slow on a big installation, and not reversible.

          [JENKINS-24380] Use build numbers as IDs

          Jesse Glick added a comment -

          Would allow an easy fix of JENKINS-24376 and JENKINS-19977.

          Jesse Glick added a comment - Would allow an easy fix of JENKINS-24376 and JENKINS-19977 .

          Jesse Glick added a comment -

          And issues like JENKINS-22767 would either go away or be easier to fix.

          Jesse Glick added a comment - And issues like JENKINS-22767 would either go away or be easier to fix.

          Jesse Glick added a comment -

          Filed PR 1379 to play with this.

          Jesse Glick added a comment - Filed PR 1379 to play with this.

          Kohsuke Kawaguchi added a comment - - edited

          Copying the IRC conversation:

          (11:39:48 AM) jglick: kohsuke: I know you are alive https://github.com/jenkinsci/jenkins/pull/1379 do not try to hide from me :-)
          (11:40:17 AM) kohsuke: Yes, I'm alive
          (11:41:34 AM) kohsuke: This is a scary change
          (11:43:29 AM) kohsuke: jglick: you sure about automatically running the migration script? I assume it means it won't be downgradable
          (11:44:16 AM) jglick: kohsuke: correct it is not downgradable (well, without losing build records I mean). But that is necessary to get the benefits of code simplification.
          (11:46:12 AM) jglick: And yes it is a scary change, but then again the current situation is to me scarier.
          (11:46:35 AM) kohsuke: does it try to create symlink from build ID to the number dir?
          (11:47:01 AM) jglick: kohsuke: no. Why?
          (11:47:02 AM) kohsuke: Looks like not. The ID as timestamp is completely gone
          (11:47:21 AM) jglick: The timestamp becomes a regular field in build.xml.
          (11:47:54 AM) kohsuke: I thought perhaps the way to go is to start switching around timestamp=dir & number=symlink
          (11:48:17 AM) kohsuke: presumably that would still allow you for lazy loading to try to find a match deterministically in one go
          (11:48:18 AM) jglick: What is the advantage to having symlinks for the timestamp?
          (11:48:29 AM) kohsuke: for compatibility
          (11:48:34 AM) jglick: The five mentioned plugins need to be updated anyway.
          (11:48:42 AM) jglick: So there is no compatibility concern for them.
          (11:49:26 AM) jglick: (Once they are fixed to expect the new layout, I mean.)
          (11:51:21 AM) kohsuke: I'm trying to think of ways to avoid doing large irreversible edits to $JENKINS_HOME
          (11:51:50 AM) kohsuke: Leaving the timestamp as symlink and not renaming existing directories would let you do that
          (11:52:51 AM) jglick: How does that help anything? Any tools relying on a specific build format will need to be updated anyway.
          (11:53:24 AM) jglick: And note that the original impetus for this PR (https://github.com/jenkinsci/jenkins/issues/1376) pointed out several problems with the timestamp format on its own.
          (11:54:45 AM) jglick: The worst that happens after downgrading is that historical build records are invisible, which is not exactly fatal.
          (12:34:50 PM) danielbeck: jglick: It's pretty bad for workflows that rely on access to older builds (Copy Artifact, Promoted Builds, etc.)
          (01:01:20 PM) kohsuke: jglick: symlinks behave like directories, so anyone looking for directories by timestamp will find them, including earlier versions of Jenkins
          (01:03:50 PM) jglick: kohsuke: is your only point to lessen the impact of migration after downgrading?
          (01:04:14 PM) kohsuke: Yes, that's my main concern with this PR
          (01:04:15 PM) jglick: Do not want to create symlinks for *new* builds certainly.
          (01:04:36 PM) kohsuke: Why not?
          (01:04:41 PM) jglick: Adds noise forever/.
          (01:04:44 PM) jglick: forever.
          (01:04:58 PM) jglick: And given the problems we have had with symlinks, would be better to use them less.
          (01:05:15 PM) kohsuke: It doesn't have to be forever but for a while I'd think it'd be a good thing to do
          (01:05:58 PM) kohsuke: But anyway, that's a lesser point compared to not shuffling stuff in $JENKINS_HOME
          (01:09:04 PM) jglick: So what is your suggestion? During migration, swap symlink vs. dir status for existing builds, adjusting build.xml as I already do; then for a while (say one LTS cycle) continue to create timestamp symlinks for new builds, provided of course that they do not clash with those of earlier builds (which is possible now that there is no enforced 1s delay), but do not read them? I kind of doubt this really works anyway, since older versions
          (01:09:04 PM) jglick: of Jenkins will try to delete the number when a build is deleted, assuming it is a symlink, and fail because it is not a symlink.
          (01:13:41 PM) jglick: kohsuke ^
          jgeboski jglick jgornick 
          (01:14:41 PM) kohsuke: jglick: Yeah, something like that.
          (01:15:51 PM) jglick: Since I do not think earlier versions would actually be able to handle the new format even w/ the addition of a symlink, would rather just provide a script to reverse the migration if you really need to downgrade.
          (01:15:57 PM) kohsuke: I don't think failing to delete build records is as big of a problem, if it fails --- its impact is limited too
          (01:16:19 PM) kohsuke: I can do that experiment quickly
          (01:17:06 PM) kohsuke: And one correction: I wasn't suggesting you swap symlink vs dir but I guess that's needed to keep the newer versions simpler?
          (01:22:50 PM) jglick: kohsuke: yes I think you to swap symlink vs. dir for existing records
          (01:23:25 PM) jglick: Either way, keeping a mixture of old and new layouts seems error-prone. Have not studied what impact this would have.
          (01:23:57 PM) jglick: Still personally prefer a simple migration, with an advertised script to revert if desired (which would work for new builds too).
          (01:25:14 PM) kohsuke: OK, perhaps you are right about mixing layout
          jgeboski jglick jgornick 
          (01:25:44 PM) kohsuke: jglick: let me see if the older version can read timestamp as symlink and build number as dir
          (01:25:51 PM) kohsuke: I think it's a worthy experiment
          (01:26:01 PM) jglick: Worth experimenting.
          

          Kohsuke Kawaguchi added a comment - - edited Copying the IRC conversation: (11:39:48 AM) jglick: kohsuke: I know you are alive https://github.com/jenkinsci/jenkins/pull/1379 do not try to hide from me :-) (11:40:17 AM) kohsuke: Yes, I'm alive (11:41:34 AM) kohsuke: This is a scary change (11:43:29 AM) kohsuke: jglick: you sure about automatically running the migration script? I assume it means it won't be downgradable (11:44:16 AM) jglick: kohsuke: correct it is not downgradable (well, without losing build records I mean). But that is necessary to get the benefits of code simplification. (11:46:12 AM) jglick: And yes it is a scary change, but then again the current situation is to me scarier. (11:46:35 AM) kohsuke: does it try to create symlink from build ID to the number dir? (11:47:01 AM) jglick: kohsuke: no. Why? (11:47:02 AM) kohsuke: Looks like not. The ID as timestamp is completely gone (11:47:21 AM) jglick: The timestamp becomes a regular field in build.xml. (11:47:54 AM) kohsuke: I thought perhaps the way to go is to start switching around timestamp=dir & number=symlink (11:48:17 AM) kohsuke: presumably that would still allow you for lazy loading to try to find a match deterministically in one go (11:48:18 AM) jglick: What is the advantage to having symlinks for the timestamp? (11:48:29 AM) kohsuke: for compatibility (11:48:34 AM) jglick: The five mentioned plugins need to be updated anyway. (11:48:42 AM) jglick: So there is no compatibility concern for them. (11:49:26 AM) jglick: (Once they are fixed to expect the new layout, I mean.) (11:51:21 AM) kohsuke: I'm trying to think of ways to avoid doing large irreversible edits to $JENKINS_HOME (11:51:50 AM) kohsuke: Leaving the timestamp as symlink and not renaming existing directories would let you do that (11:52:51 AM) jglick: How does that help anything? Any tools relying on a specific build format will need to be updated anyway. (11:53:24 AM) jglick: And note that the original impetus for this PR (https://github.com/jenkinsci/jenkins/issues/1376) pointed out several problems with the timestamp format on its own. (11:54:45 AM) jglick: The worst that happens after downgrading is that historical build records are invisible, which is not exactly fatal. (12:34:50 PM) danielbeck: jglick: It's pretty bad for workflows that rely on access to older builds (Copy Artifact, Promoted Builds, etc.) (01:01:20 PM) kohsuke: jglick: symlinks behave like directories, so anyone looking for directories by timestamp will find them, including earlier versions of Jenkins (01:03:50 PM) jglick: kohsuke: is your only point to lessen the impact of migration after downgrading? (01:04:14 PM) kohsuke: Yes, that's my main concern with this PR (01:04:15 PM) jglick: Do not want to create symlinks for *new* builds certainly. (01:04:36 PM) kohsuke: Why not? (01:04:41 PM) jglick: Adds noise forever/. (01:04:44 PM) jglick: forever. (01:04:58 PM) jglick: And given the problems we have had with symlinks, would be better to use them less. (01:05:15 PM) kohsuke: It doesn't have to be forever but for a while I'd think it'd be a good thing to do (01:05:58 PM) kohsuke: But anyway, that's a lesser point compared to not shuffling stuff in $JENKINS_HOME (01:09:04 PM) jglick: So what is your suggestion? During migration, swap symlink vs. dir status for existing builds, adjusting build.xml as I already do; then for a while (say one LTS cycle) continue to create timestamp symlinks for new builds, provided of course that they do not clash with those of earlier builds (which is possible now that there is no enforced 1s delay), but do not read them? I kind of doubt this really works anyway, since older versions (01:09:04 PM) jglick: of Jenkins will try to delete the number when a build is deleted, assuming it is a symlink, and fail because it is not a symlink. (01:13:41 PM) jglick: kohsuke ^ jgeboski jglick jgornick (01:14:41 PM) kohsuke: jglick: Yeah, something like that. (01:15:51 PM) jglick: Since I do not think earlier versions would actually be able to handle the new format even w/ the addition of a symlink, would rather just provide a script to reverse the migration if you really need to downgrade. (01:15:57 PM) kohsuke: I don't think failing to delete build records is as big of a problem, if it fails --- its impact is limited too (01:16:19 PM) kohsuke: I can do that experiment quickly (01:17:06 PM) kohsuke: And one correction: I wasn't suggesting you swap symlink vs dir but I guess that's needed to keep the newer versions simpler? (01:22:50 PM) jglick: kohsuke: yes I think you to swap symlink vs. dir for existing records (01:23:25 PM) jglick: Either way, keeping a mixture of old and new layouts seems error-prone. Have not studied what impact this would have. (01:23:57 PM) jglick: Still personally prefer a simple migration, with an advertised script to revert if desired (which would work for new builds too). (01:25:14 PM) kohsuke: OK, perhaps you are right about mixing layout jgeboski jglick jgornick (01:25:44 PM) kohsuke: jglick: let me see if the older version can read timestamp as symlink and build number as dir (01:25:51 PM) kohsuke: I think it's a worthy experiment (01:26:01 PM) jglick: Worth experimenting.

          Jesse Glick added a comment -

          And continued:

          [14:52:57] <jglick> How does that help anything? Any tools relying on a specific build format will need to be updated anyway.
          [14:53:30] <jglick> And note that the original impetus for this PR (https://github.com/jenkinsci/jenkins/issues/1376) pointed out several problems with the timestamp format on its own.
          [14:54:51] <jglick> The worst that happens after downgrading is that historical build records are invisible, which is not exactly fatal.
          

          Jesse Glick added a comment - And continued: [14:52:57] <jglick> How does that help anything? Any tools relying on a specific build format will need to be updated anyway. [14:53:30] <jglick> And note that the original impetus for this PR (https://github.com/jenkinsci/jenkins/issues/1376) pointed out several problems with the timestamp format on its own. [14:54:51] <jglick> The worst that happens after downgrading is that historical build records are invisible, which is not exactly fatal.

          Experimented what happens if I swap the directory vs symlink.

          Before:

          % ls -la
          total 16
          drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 .
          drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 ..
          lrwxrwxrwx 1 kohsuke kohsuke   19 Apr 18 10:42 1 -> 2014-04-18_10-42-35
          lrwxrwxrwx 1 kohsuke kohsuke   19 Sep 15 17:51 2 -> 2014-09-15_17-51-46
          drwxrwxr-x 2 kohsuke kohsuke 4096 Apr 18 10:42 2014-04-18_10-42-35
          drwxrwxr-x 2 kohsuke kohsuke 4096 Sep 15 17:51 2014-09-15_17-51-46
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastFailedBuild -> -1
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:51 lastStableBuild -> 2
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:51 lastSuccessfulBuild -> 2
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastUnstableBuild -> -1
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastUnsuccessfulBuild -> -1
          

          After:

          total 16
          drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:52 .
          drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 ..
          drwxrwxr-x 2 kohsuke kohsuke 4096 Apr 18 10:42 1
          drwxrwxr-x 2 kohsuke kohsuke 4096 Sep 15 17:51 2
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:52 2014-04-18_10-42-35 -> 1
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:52 2014-09-15_17-51-46 -> 2
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastFailedBuild -> -1
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:51 lastStableBuild -> 2
          lrwxrwxrwx 1 kohsuke kohsuke    1 Sep 15 17:51 lastSuccessfulBuild -> 2
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastUnstableBuild -> -1
          lrwxrwxrwx 1 kohsuke kohsuke    2 Apr 18 10:39 lastUnsuccessfulBuild -> -1
          

          When I started, the build record did not load as I got the following error:

          Sep 15, 2014 5:53:08 PM hudson.model.RunMap retrieve
          WARNING: skipping non-build directory /files/kohsuke/ws/jenkins/jenkins/war/work/jobs/foo/builds/2014-09-15_17-51-46
          Sep 15, 2014 5:53:08 PM hudson.model.RunMap retrieve
          WARNING: skipping non-build directory /files/kohsuke/ws/jenkins/jenkins/war/work/jobs/foo/builds/2014-04-18_10-42-35
          

          This is because of the way the Run.parseTimestampFromBuildDir method is implemented:

              /*package*/ static long parseTimestampFromBuildDir(@Nonnull File buildDir) 
                      throws IOException, InvalidDirectoryNameException {
                  try {
                      if(Util.isSymlink(buildDir)) {
                          // "Util.resolveSymlink(file)" resolves NTFS symlinks. 
                          File target = Util.resolveSymlinkToFile(buildDir);
                          if(target != null)
                              buildDir = target;
                      }
                      // canonicalization to ensure we are looking at the ID in the directory name
                      // as opposed to build numbers which are used in symlinks
                      // (just in case the symlink check above did not work)
                      buildDir = buildDir.getCanonicalFile();
                      return ID_FORMATTER.get().parse(buildDir.getName()).getTime();
                  } catch (ParseException e) {
                      throw new InvalidDirectoryNameException(buildDir);
                  } catch (InterruptedException e) {
                      throw new IOException("Interrupted while resolving symlink directory "+buildDir,e);
                  }
              }
          

          The canonical path in this case is build number and not timestamp, ID_FORMATTER.get().parse(...) fails and the above code results in InvalidDirectoryNameException.

          The bottom line, the downgradable data migration through swapping dir vs symlink doesn't work.

          So perhaps we are really back to the "provide downgrade script" idea.

          Or we'll leave the complexity a bit by leaving the existing data as-is, and only add new builds in the new layout.

          What if we make new build directory names different from all the existing patterns, for example b123? The migrator could leave old directories intact, and just add b123 -> 2014-04-18_10-42-35 kind of symlink in place, which leaves existing build records intact. Could something like that let us keep most of the code simplification while protecting existing build records?

          Kohsuke Kawaguchi added a comment - Experimented what happens if I swap the directory vs symlink. Before: % ls -la total 16 drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 . drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 .. lrwxrwxrwx 1 kohsuke kohsuke 19 Apr 18 10:42 1 -> 2014-04-18_10-42-35 lrwxrwxrwx 1 kohsuke kohsuke 19 Sep 15 17:51 2 -> 2014-09-15_17-51-46 drwxrwxr-x 2 kohsuke kohsuke 4096 Apr 18 10:42 2014-04-18_10-42-35 drwxrwxr-x 2 kohsuke kohsuke 4096 Sep 15 17:51 2014-09-15_17-51-46 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastFailedBuild -> -1 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:51 lastStableBuild -> 2 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:51 lastSuccessfulBuild -> 2 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastUnstableBuild -> -1 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastUnsuccessfulBuild -> -1 After: total 16 drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:52 . drwxrwxr-x 4 kohsuke kohsuke 4096 Sep 15 17:51 .. drwxrwxr-x 2 kohsuke kohsuke 4096 Apr 18 10:42 1 drwxrwxr-x 2 kohsuke kohsuke 4096 Sep 15 17:51 2 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:52 2014-04-18_10-42-35 -> 1 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:52 2014-09-15_17-51-46 -> 2 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastFailedBuild -> -1 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:51 lastStableBuild -> 2 lrwxrwxrwx 1 kohsuke kohsuke 1 Sep 15 17:51 lastSuccessfulBuild -> 2 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastUnstableBuild -> -1 lrwxrwxrwx 1 kohsuke kohsuke 2 Apr 18 10:39 lastUnsuccessfulBuild -> -1 When I started, the build record did not load as I got the following error: Sep 15, 2014 5:53:08 PM hudson.model.RunMap retrieve WARNING: skipping non-build directory /files/kohsuke/ws/jenkins/jenkins/war/work/jobs/foo/builds/2014-09-15_17-51-46 Sep 15, 2014 5:53:08 PM hudson.model.RunMap retrieve WARNING: skipping non-build directory /files/kohsuke/ws/jenkins/jenkins/war/work/jobs/foo/builds/2014-04-18_10-42-35 This is because of the way the Run.parseTimestampFromBuildDir method is implemented: /*package*/ static long parseTimestampFromBuildDir(@Nonnull File buildDir) throws IOException, InvalidDirectoryNameException { try { if(Util.isSymlink(buildDir)) { // "Util.resolveSymlink(file)" resolves NTFS symlinks. File target = Util.resolveSymlinkToFile(buildDir); if(target != null) buildDir = target; } // canonicalization to ensure we are looking at the ID in the directory name // as opposed to build numbers which are used in symlinks // (just in case the symlink check above did not work) buildDir = buildDir.getCanonicalFile(); return ID_FORMATTER.get().parse(buildDir.getName()).getTime(); } catch (ParseException e) { throw new InvalidDirectoryNameException(buildDir); } catch (InterruptedException e) { throw new IOException("Interrupted while resolving symlink directory "+buildDir,e); } } The canonical path in this case is build number and not timestamp, ID_FORMATTER.get().parse(...) fails and the above code results in InvalidDirectoryNameException . The bottom line, the downgradable data migration through swapping dir vs symlink doesn't work. So perhaps we are really back to the "provide downgrade script" idea. Or we'll leave the complexity a bit by leaving the existing data as-is, and only add new builds in the new layout. What if we make new build directory names different from all the existing patterns, for example b123 ? The migrator could leave old directories intact, and just add b123 -> 2014-04-18_10-42-35 kind of symlink in place, which leaves existing build records intact. Could something like that let us keep most of the code simplification while protecting existing build records?

          Jesse Glick added a comment -

          danielbeck (ref: ZD-22496) noted that the current code behaves poorly if build directories are deleted but broken numeric symlinks are left behind. Need to check that behavior in the context of the revised code, where the symlinks would be the timestamps.

          Jesse Glick added a comment - danielbeck (ref: ZD-22496) noted that the current code behaves poorly if build directories are deleted but broken numeric symlinks are left behind. Need to check that behavior in the context of the revised code, where the symlinks would be the timestamps.

          Jesse Glick added a comment -

          What if we make new build directory names […and] leave old directories intact […]

          Cannot see a straightforward way to make this work. We cannot rely on symlinks because of Windows users. The new code expects timestamp to be persistent, and number to be computed, which clashes with the format expected by older versions of Jenkins.

          Providing a tool to reverse the migration for anyone who needs to downgrade seems less risky than managing mixed-format records.

          Jesse Glick added a comment - What if we make new build directory names […and] leave old directories intact […] Cannot see a straightforward way to make this work. We cannot rely on symlinks because of Windows users. The new code expects timestamp to be persistent, and number to be computed, which clashes with the format expected by older versions of Jenkins. Providing a tool to reverse the migration for anyone who needs to downgrade seems less risky than managing mixed-format records.

          Jesse Glick added a comment -

          check that behavior in the context of the revised code, where the symlinks would be the timestamps

          Correction: after the migration, there are not any timestamp symlinks. The only symlinks that remain inside builds are lastStableBuild and the like. So whatever bug existed previously should become obsolete.

          Jesse Glick added a comment - check that behavior in the context of the revised code, where the symlinks would be the timestamps Correction: after the migration, there are not any timestamp symlinks. The only symlinks that remain inside builds are lastStableBuild and the like. So whatever bug existed previously should become obsolete.

          Code changed in jenkins
          User: Kohsuke Kawaguchi
          Path:
          changelog.html
          core/src/main/java/jenkins/model/RunIdMigrator.java
          core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index.jelly
          http://jenkins-ci.org/commit/jenkins/711b3325adf629585d60aa5a2bcac1d49b8324ae
          Log:
          JENKINS-24380

          • Recorded the fix in changelog.
          • Added a separate screen to show the unmigration instruction, which
            makes it easier for people to find it than search logs.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Kohsuke Kawaguchi Path: changelog.html core/src/main/java/jenkins/model/RunIdMigrator.java core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index.jelly http://jenkins-ci.org/commit/jenkins/711b3325adf629585d60aa5a2bcac1d49b8324ae Log: JENKINS-24380 Recorded the fix in changelog. Added a separate screen to show the unmigration instruction, which makes it easier for people to find it than search logs.

          dogfood added a comment -

          Integrated in jenkins_main_trunk #3891
          JENKINS-24380 (Revision 711b3325adf629585d60aa5a2bcac1d49b8324ae)

          Result = UNSTABLE
          kohsuke : 711b3325adf629585d60aa5a2bcac1d49b8324ae
          Files :

          • core/src/main/java/jenkins/model/RunIdMigrator.java
          • core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index.jelly
          • changelog.html

          dogfood added a comment - Integrated in jenkins_main_trunk #3891 JENKINS-24380 (Revision 711b3325adf629585d60aa5a2bcac1d49b8324ae) Result = UNSTABLE kohsuke : 711b3325adf629585d60aa5a2bcac1d49b8324ae Files : core/src/main/java/jenkins/model/RunIdMigrator.java core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index.jelly changelog.html

          Code changed in jenkins
          User: Jesse Glick
          Path:
          src/main/java/com/cloudbees/jenkins/support/impl/AboutJenkins.java
          http://jenkins-ci.org/commit/support-core-plugin/ffb47e151f50cf1ce0618e339b8e4a592d96845d
          Log:
          JENKINS-24380 Updated to handle proposed new build directory format.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: src/main/java/com/cloudbees/jenkins/support/impl/AboutJenkins.java http://jenkins-ci.org/commit/support-core-plugin/ffb47e151f50cf1ce0618e339b8e4a592d96845d Log: JENKINS-24380 Updated to handle proposed new build directory format.

          Jesse Glick added a comment -

          kohsuke merged without using the magic keyword, so this did not get autoclosed.

          Jesse Glick added a comment - kohsuke merged without using the magic keyword, so this did not get autoclosed.

          Code changed in jenkins
          User: Jesse Glick
          Path:
          core/src/main/java/jenkins/model/RunIdMigrator.java
          http://jenkins-ci.org/commit/jenkins/bacca38aac1320d2a571a3fab1c7decbd7170f62
          Log:
          JENKINS-24380 Linking to Wiki from log message too.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: core/src/main/java/jenkins/model/RunIdMigrator.java http://jenkins-ci.org/commit/jenkins/bacca38aac1320d2a571a3fab1c7decbd7170f62 Log: JENKINS-24380 Linking to Wiki from log message too.

          dogfood added a comment -

          Integrated in jenkins_main_trunk #3898
          JENKINS-24380 Linking to Wiki from log message too. (Revision bacca38aac1320d2a571a3fab1c7decbd7170f62)

          Result = UNSTABLE
          jesse glick : bacca38aac1320d2a571a3fab1c7decbd7170f62
          Files :

          • core/src/main/java/jenkins/model/RunIdMigrator.java

          dogfood added a comment - Integrated in jenkins_main_trunk #3898 JENKINS-24380 Linking to Wiki from log message too. (Revision bacca38aac1320d2a571a3fab1c7decbd7170f62) Result = UNSTABLE jesse glick : bacca38aac1320d2a571a3fab1c7decbd7170f62 Files : core/src/main/java/jenkins/model/RunIdMigrator.java

          Hans Baer added a comment -

          After update to 1.597 my jobs fail with an Opss exception.

          Executing the unmigrate job will cause
          Exception in thread "main" java.lang.NullPointerException
          at jenkins.model.RunIdMigrator.unmigrateJobsDir(RunIdMigrator.java:310)
          at jenkins.model.RunIdMigrator.unmigrateJobsDir(RunIdMigrator.java:323)
          at jenkins.model.RunIdMigrator.main(RunIdMigrator.java:307)

          Now I stuck with not being able to downgrade nor being able to use 1.597

          Hans Baer added a comment - After update to 1.597 my jobs fail with an Opss exception. Executing the unmigrate job will cause Exception in thread "main" java.lang.NullPointerException at jenkins.model.RunIdMigrator.unmigrateJobsDir(RunIdMigrator.java:310) at jenkins.model.RunIdMigrator.unmigrateJobsDir(RunIdMigrator.java:323) at jenkins.model.RunIdMigrator.main(RunIdMigrator.java:307) Now I stuck with not being able to downgrade nor being able to use 1.597

          John Miller added a comment -

          I am having this issue also.. I get the oops page when I upgrade to 1.597 but can not downgrade

          javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar:file:/export/jenkins/.jenkins/war/WEB-INF/lib/jenkins-core-1.597.jar!/lib/hudson/project/projectActionFloatingBox.jelly:38:74: <st:include> hudson.model.Run.getIDFormatter()Ljava/text/DateFormat;
          at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:117)
          at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:127)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:735)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249)
          at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53)
          at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876)
          at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
          at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
          at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
          at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:123)
          at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120)
          at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:117)
          at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120)
          at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:114)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
          at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
          at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
          at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
          at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76)
          at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482)
          at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
          at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474)
          at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
          at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533)
          at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
          at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
          at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428)
          at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
          at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
          at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
          at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
          at org.eclipse.jetty.server.Server.handle(Server.java:370)
          at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
          at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949)
          at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011)
          at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
          at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
          at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668)
          at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52)
          at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77)
          at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
          at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
          at java.lang.Thread.run(Thread.java:744)
          Caused by: org.apache.commons.jelly.JellyTagException: jar:file:/export/jenkins/.jenkins/war/WEB-INF/lib/jenkins-core-1.597.jar!/lib/hudson/project/projectActionFloatingBox.jelly:38:74: <st:include> hudson.model.Run.getIDFormatter()Ljava/text/DateFormat;
          at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:745)
          at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:289)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161)
          at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150)
          at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
          at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
          at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
          at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
          at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99)
          at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91)
          at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
          at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
          at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
          at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63)
          at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53)
          at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112)
          ... 69 more
          Caused by: java.lang.NoSuchMethodError: hudson.model.Run.getIDFormatter()Ljava/text/DateFormat;
          at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsageAllSubItems(ProjectDiskUsageAction.java:165)
          at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsage(ProjectDiskUsageAction.java:226)
          at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsage(ProjectDiskUsageAction.java:203)
          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
          at java.lang.reflect.Method.invoke(Method.java:606)
          at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:258)
          at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:104)
          at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83)
          at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57)
          at org.apache.commons.jexl.parser.ASTExpression.value(ASTExpression.java:54)
          at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:81)
          at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83)
          at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57)
          at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51)
          at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80)
          at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74)
          at org.apache.commons.jelly.impl.ExpressionScript.run(ExpressionScript.java:66)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98)
          at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95)
          at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105)
          at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95)
          at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147)
          at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269)
          ... 107 more

          John Miller added a comment - I am having this issue also.. I get the oops page when I upgrade to 1.597 but can not downgrade javax.servlet.ServletException: org.apache.commons.jelly.JellyTagException: jar: file:/export/jenkins/.jenkins/war/WEB-INF/lib/jenkins-core-1.597.jar!/lib/hudson/project/projectActionFloatingBox.jelly:38:74: <st:include> hudson.model.Run.getIDFormatter()Ljava/text/DateFormat; at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:117) at org.kohsuke.stapler.jelly.JellyFacet.handleIndexRequest(JellyFacet.java:127) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:735) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) at org.kohsuke.stapler.MetaClass$6.doDispatch(MetaClass.java:249) at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:53) at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:746) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:876) at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649) at org.kohsuke.stapler.Stapler.service(Stapler.java:238) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:686) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1494) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:123) at hudson.plugins.greenballs.GreenBallFilter.doFilter(GreenBallFilter.java:58) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120) at jenkins.metrics.impl.MetricsFilter.doFilter(MetricsFilter.java:117) at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:120) at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:114) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:48) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84) at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:93) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249) at hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67) at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87) at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:76) at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:164) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:81) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1482) at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30) at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1474) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:499) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:533) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:428) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:370) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:949) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1011) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:668) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) at winstone.BoundedExecutorService$1.run(BoundedExecutorService.java:77) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:744) Caused by: org.apache.commons.jelly.JellyTagException: jar: file:/export/jenkins/.jenkins/war/WEB-INF/lib/jenkins-core-1.597.jar!/lib/hudson/project/projectActionFloatingBox.jelly:38:74: <st:include> hudson.model.Run.getIDFormatter()Ljava/text/DateFormat; at org.apache.commons.jelly.impl.TagScript.handleException(TagScript.java:745) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:289) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.TagSupport.invokeBody(TagSupport.java:161) at org.apache.commons.jelly.tags.core.ForEachTag.doTag(ForEachTag.java:150) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.CallTagLibScript$1.run(CallTagLibScript.java:99) at org.apache.commons.jelly.tags.define.InvokeBodyTag.doTag(InvokeBodyTag.java:91) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.CallTagLibScript.run(CallTagLibScript.java:120) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:63) at org.kohsuke.stapler.jelly.DefaultScriptInvoker.invokeScript(DefaultScriptInvoker.java:53) at org.kohsuke.stapler.jelly.JellyClassTearOff.serveIndexJelly(JellyClassTearOff.java:112) ... 69 more Caused by: java.lang.NoSuchMethodError: hudson.model.Run.getIDFormatter()Ljava/text/DateFormat; at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsageAllSubItems(ProjectDiskUsageAction.java:165) at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsage(ProjectDiskUsageAction.java:226) at hudson.plugins.disk_usage.ProjectDiskUsageAction.getBuildsDiskUsage(ProjectDiskUsageAction.java:203) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.apache.commons.jexl.util.introspection.UberspectImpl$VelMethodImpl.invoke(UberspectImpl.java:258) at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:104) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTExpression.value(ASTExpression.java:54) at org.apache.commons.jexl.parser.ASTMethod.execute(ASTMethod.java:81) at org.apache.commons.jexl.parser.ASTReference.execute(ASTReference.java:83) at org.apache.commons.jexl.parser.ASTReference.value(ASTReference.java:57) at org.apache.commons.jexl.parser.ASTReferenceExpression.value(ASTReferenceExpression.java:51) at org.apache.commons.jexl.ExpressionImpl.evaluate(ExpressionImpl.java:80) at hudson.ExpressionFactory2$JexlExpression.evaluate(ExpressionFactory2.java:74) at org.apache.commons.jelly.impl.ExpressionScript.run(ExpressionScript.java:66) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.kohsuke.stapler.jelly.ReallyStaticTagLibrary$1.run(ReallyStaticTagLibrary.java:99) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$1.run(CoreTagLibrary.java:98) at org.apache.commons.jelly.impl.ScriptBlock.run(ScriptBlock.java:95) at org.apache.commons.jelly.tags.core.CoreTagLibrary$2.run(CoreTagLibrary.java:105) at org.kohsuke.stapler.jelly.JellyViewScript.run(JellyViewScript.java:95) at org.kohsuke.stapler.jelly.IncludeTag.doTag(IncludeTag.java:147) at org.apache.commons.jelly.impl.TagScript.run(TagScript.java:269) ... 107 more

          Cameron Horn added a comment -

          Got a ton of messages like this:
          Jan 20, 2015 1:24:00 PM jenkins.model.RunIdMigrator doMigrate
          WARNING: failed to rename 2014-12-05_14-18-42 to 1

          Ended up with every job timestamp set to 1970. Was able to downgrade.

          Cameron Horn added a comment - Got a ton of messages like this: Jan 20, 2015 1:24:00 PM jenkins.model.RunIdMigrator doMigrate WARNING: failed to rename 2014-12-05_14-18-42 to 1 Ended up with every job timestamp set to 1970. Was able to downgrade.

          Jesse Glick added a comment -

          Please file blocking issues as needed rather than reopening this one.

          The “failed to rename” is already filed as JENKINS-26519 and will be fixed in 1.598; you need to delete legacyId files and rerun the migration, as described in that issue.

          Jesse Glick added a comment - Please file blocking issues as needed rather than reopening this one. The “failed to rename” is already filed as JENKINS-26519 and will be fixed in 1.598; you need to delete legacyId files and rerun the migration, as described in that issue.

          Jesse Glick added a comment -

          The Disk Usage plugin issue is already filed in JENKINS-26496; disable that plugin until its maintainer merges my PR, unless you want to run a snapshot build.

          The NPE from unmigrateJobsDir I have not seen. Apparently there is a file f for which f.isDirectory() && f.listFiles() == null, which seems anomalous (usually null from listFiles means the directory does not really exist), but prior to Java 7 there is no way to get a detailed exception from a file listing so I can only speculate about what that might have been. Anyway I can make that code more robust in 1.599.

          Jesse Glick added a comment - The Disk Usage plugin issue is already filed in JENKINS-26496 ; disable that plugin until its maintainer merges my PR, unless you want to run a snapshot build. The NPE from unmigrateJobsDir I have not seen. Apparently there is a file f for which f.isDirectory() && f.listFiles() == null , which seems anomalous (usually null from listFiles means the directory does not really exist), but prior to Java 7 there is no way to get a detailed exception from a file listing so I can only speculate about what that might have been. Anyway I can make that code more robust in 1.599.

          Code changed in jenkins
          User: Jesse Glick
          Path:
          src/main/java/hudson/plugins/disk_usage/BuildDiskUsageAction.java
          src/main/java/hudson/plugins/disk_usage/DiskUsageBuildInformation.java
          src/main/java/hudson/plugins/disk_usage/DiskUsageUtil.java
          src/main/java/hudson/plugins/disk_usage/ProjectDiskUsage.java
          src/main/java/hudson/plugins/disk_usage/ProjectDiskUsageAction.java
          http://jenkins-ci.org/commit/disk-usage-plugin/19e500d2a168a1dfedf8987c618b4a4d0c9be8a0
          Log:
          JENKINS-24380 Stop relying on the format of Run.id.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: src/main/java/hudson/plugins/disk_usage/BuildDiskUsageAction.java src/main/java/hudson/plugins/disk_usage/DiskUsageBuildInformation.java src/main/java/hudson/plugins/disk_usage/DiskUsageUtil.java src/main/java/hudson/plugins/disk_usage/ProjectDiskUsage.java src/main/java/hudson/plugins/disk_usage/ProjectDiskUsageAction.java http://jenkins-ci.org/commit/disk-usage-plugin/19e500d2a168a1dfedf8987c618b4a4d0c9be8a0 Log: JENKINS-24380 Stop relying on the format of Run.id.

          Code changed in jenkins
          User: Oliver Gondža
          Path:
          src/main/java/hudson/plugins/disk_usage/BuildDiskUsageAction.java
          src/main/java/hudson/plugins/disk_usage/DiskUsageBuildInformation.java
          src/main/java/hudson/plugins/disk_usage/DiskUsageUtil.java
          src/main/java/hudson/plugins/disk_usage/ProjectDiskUsage.java
          src/main/java/hudson/plugins/disk_usage/ProjectDiskUsageAction.java
          http://jenkins-ci.org/commit/disk-usage-plugin/e1555569bfb43cde12816de9abe08039ea043e48
          Log:
          Merge pull request #26 from jglick/build-number-is-id-JENKINS-24380

          JENKINS-24380 Stop relying on the format of Run.id

          Compare: https://github.com/jenkinsci/disk-usage-plugin/compare/f9c0ef96b19a...e1555569bfb4

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Oliver Gondža Path: src/main/java/hudson/plugins/disk_usage/BuildDiskUsageAction.java src/main/java/hudson/plugins/disk_usage/DiskUsageBuildInformation.java src/main/java/hudson/plugins/disk_usage/DiskUsageUtil.java src/main/java/hudson/plugins/disk_usage/ProjectDiskUsage.java src/main/java/hudson/plugins/disk_usage/ProjectDiskUsageAction.java http://jenkins-ci.org/commit/disk-usage-plugin/e1555569bfb43cde12816de9abe08039ea043e48 Log: Merge pull request #26 from jglick/build-number-is-id- JENKINS-24380 JENKINS-24380 Stop relying on the format of Run.id Compare: https://github.com/jenkinsci/disk-usage-plugin/compare/f9c0ef96b19a...e1555569bfb4

          Code changed in jenkins
          User: Jesse Glick
          Path:
          src/main/java/hudson/plugins/build_publisher/ExternalProjectProperty.java
          src/main/java/hudson/plugins/build_publisher/HTTPBuildTransmitter.java
          http://jenkins-ci.org/commit/build-publisher-plugin/9a44c001e80cb5575aae92db53642667fd419e6c
          Log:
          JENKINS-24380 Stop relying on the format of Run.id.

          SCM/JIRA link daemon added a comment - Code changed in jenkins User: Jesse Glick Path: src/main/java/hudson/plugins/build_publisher/ExternalProjectProperty.java src/main/java/hudson/plugins/build_publisher/HTTPBuildTransmitter.java http://jenkins-ci.org/commit/build-publisher-plugin/9a44c001e80cb5575aae92db53642667fd419e6c Log: JENKINS-24380 Stop relying on the format of Run.id.

          Adding link to wiki

          Yoann Dubreuil added a comment - Adding link to wiki

            jglick Jesse Glick
            jglick Jesse Glick
            Votes:
            3 Vote for this issue
            Watchers:
            10 Start watching this issue

              Created:
              Updated:
              Resolved: