[JENKINS-75465] Delete RunIdMigrator as it has been 10 years since this migration#10456
Conversation
A bit, but very small, just something along the lines of Files.deleteIfExists(buildDir.resolve("legacyIds"));which I think is justified by reducing the number of inodes consumed by job directories. |
It is difficult to follow what the purpose of this code was (no plugin should ever have needed to know about the format of build directory names since |
|
Looks like you missed some files $ git ls-files|fgrep RunIdMigrator
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index.jelly
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_bg.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_de.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_it.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_pt_BR.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_sr.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_sv_SE.properties
core/src/main/resources/jenkins/model/RunIdMigrator/UnmigrationInstruction/index_zh_TW.properties
test/src/test/java/jenkins/model/RunIdMigratorTest.java |
|
(Not sure about that last one; there are two |
|
Also double-check git ls-files -z | xargs -0 fgrep RunIdMigrator |
The unmigrator and associated jelly file was added in jenkinsci@711b332#diff-0d6badde279147be675402c9ace9f24434ba7942c2bb83ce79f069d0dc5a5eb2 In March 2024, the unmigrator was deleted via jenkinsci#9092; however it appears to have missed to remove the Jelly files. Now deleting the jelly file and other resources.
This test was written as originally the legacyIds were missing when the job was created from CLI or REST API. https://github.com/jenkinsci/jenkins/pull/8758/files Later after the issue was fixed, ensuring CLI and REST API jobs also have legacyIds files, the test was made active, jenkinsci#9303 Now as the entire RunMigrator itself is going away there is no need for this test anymore.
As the arg is of type `String` it is not gauranteed if a non number comes somehow. See https://github.com/jenkinsci/jenkins/pull/10456/files#r2010184507
See jenkinsci#10456 (comment), deleting the legacyIds file help reduce the number of inodes. But when doing the downgrade not having the legacyIds file may impact significantly as mentioned in https://issues.jenkins.io/browse/JENKINS-64356 Currently upon upgrade first time start up will have mesages like, ``` 2025-03-25 05:33:41.971+0000 [id=41] INFO h.p.b.g.GlobalTimeOutConfiguration#load: global timeout not set 2025-03-25 05:33:42.285+0000 [id=40] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded 2025-03-25 05:33:42.285+0000 [id=40] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted 2025-03-25 05:33:42.291+0000 [id=39] INFO hudson.model.Job#onLoad: Deleting legacyIds file in /.../jhome/jobs/fjob_2_502/builds. See https://issues.jenkins.io/browse/JENKINS-75465 for more information. 2025-03-25 05:33:42.291+0000 [id=44] INFO hudson.model.Job#onLoad: Deleting legacyIds file in /.../jhome/jobs/job_2_502/builds. See https://issues.jenkins.io/browse/JENKINS-75465 for more information. 2025-03-25 05:33:42.310+0000 [id=45] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs 2025-03-25 05:33:42.313+0000 [id=54] INFO jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated 2025-03-25 05:33:42.324+0000 [id=33] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization 2025-03-25 05:33:42.342+0000 [id=26] INFO hudson.lifecycle.Lifecycle#onReady: Jenkins is fully up and running ```
| if (Files.deleteIfExists(buildDirPath.resolve("legacyIds"))) { | ||
| LOGGER.info("Deleting legacyIds file in " + buildDirPath + ". See https://issues.jenkins" | ||
| + ".io/browse/JENKINS-75465 for more information."); | ||
| } |
There was a problem hiding this comment.
(👋 @jglick)
Continuing from this comment - legacyIds deletion:
JENKINS-64356 discusses slow startup caused by a missing legacyIds file. This appears to happen because runIdMigrator.migrate(buildDir, Jenkins.get().getRootDir()) iterates through all builds to check for necessary migrations.
CloudBees provided a KB article with a workaround to recreate the legacyIds file when it's missing.
Since the legacyIds file is deleted here, downgrading to an earlier version could result in slow startup.
There was a problem hiding this comment.
I wrote a note in changelog and upgrade guidelines to mention about downgrading.
Nice thanks for these commands, they will be helpful to me forever 😄 thank you. Currently all usages removed. Noted down the past PRs (or commits) that introduced code around RunIdMigrator in the JIRA comment |
<details><summary>Background</summary> Jenkins previously changed the naming convention for build directories from a date-time-based format to a build number-based format. To facilitate this transition, an automated migrator, `RunIdMigrator`, was introduced to rename existing build folders accordingly. [jenkinsci/jenkins/pull/10456](jenkinsci/jenkins#10456) removes `RunIdMigrator` from Jenkins core, meaning direct upgrades from Jenkins 1.596 (or earlier) to the latest version will no longer be supported. Users must first upgrade to an intermediate version before upgrading to the latest release. </details> **Why is it no longer necessary to check legacyIds mapping in this plugin?** The method `recalculateBasePath` previously translated a base path like: `/path/to/jhome/jobs/my-job/builds/2014-12-01-00-01-01/tcreports` to `/path/to/jhome/jobs/my-job/builds/10/tcreports`; where `2014-12-01-00-01-01` mapped to build number `10` using the `legacyIds` file. However, since Jenkins `1.597` (released on 2015-01-19), new jobs no longer populate the `legacyIds` file, it simply empty. This means for any job created in the last 10+ years, the method has been effectively returning `basePath` unchanged. Given that virtually all jobs and controllers in use today fall into this category, the legacy lookup is no longer needed, and this removal simplifies the code while maintaining expected behavior.
right, I tried to check and clean it up, filed jenkinsci/testcomplete-plugin#21 |
|
The changelog and upgrade guidelines seem too verbose. Should I shorten them, perhaps by removing details about requiring an intermediate update? Upgrading from such an old version to the latest may not even be possible due to significant changes over the years. any suggestions about |
|
The two test failures are correct that they are using the builds with previous names. These are zip files, looking into it 👀
Will also look for all other zip files for similar 👀 Edit: Command find . -type d -name "target" -prune -o -type f -path "*/resources/*.zip" -exec sh -c 'echo "Contents of: {}"; unzip -l "{}"; echo ""' \;output |
…mat build dirs
Two archives
---------------
1. actionSerialization.zip
Before
```
→ unzip -l actionSerialization.zip
Archive: actionSerialization.zip
Length Date Time Name
--------- ---------- ----- ----
0 02-11-2017 21:51 jobs/
0 02-11-2017 21:50 jobs/j/
0 02-11-2017 21:51 jobs/j-windows/
0 02-11-2017 21:51 jobs/j-windows/builds/
0 02-11-2017 21:51 jobs/j-windows/builds/2013-06-05_14-30-12/
0 02-11-2017 21:51 jobs/j-windows/builds/2013-06-05_14-30-12/archive/
20 02-11-2017 22:01 jobs/j-windows/builds/2013-06-05_14-30-12/archive/a
996 02-11-2017 22:05 jobs/j-windows/builds/2013-06-05_14-30-12/build.xml
6 06-05-2013 11:30 jobs/j-windows/builds/2013-06-05_14-30-12/changelog.xml
448 06-05-2013 11:30 jobs/j-windows/builds/2013-06-05_14-30-12/log
1002 02-11-2017 21:51 jobs/j-windows/config.xml
2 06-05-2013 11:30 jobs/j-windows/nextBuildNumber
0 02-11-2017 21:50 jobs/j/builds/
0 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/
0 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/archive/
12 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/archive/a
996 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/build.xml
6 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/changelog.xml
448 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/log
993 06-05-2013 11:30 jobs/j/config.xml
2 06-05-2013 11:30 jobs/j/nextBuildNumber
--------- -------
4931 21 files
```
After
```
Archive: actionSerialization.zip
Length Date Time Name
--------- ---------- ----- ----
0 03-25-2025 15:49 jobs/
0 02-11-2017 21:51 jobs/j-windows/
2 06-05-2013 11:30 jobs/j-windows/nextBuildNumber
0 03-25-2025 15:48 jobs/j-windows/builds/
0 03-25-2025 15:48 jobs/j-windows/builds/2/
0 02-11-2017 21:51 jobs/j-windows/builds/2/archive/
20 02-11-2017 22:01 jobs/j-windows/builds/2/archive/a
1015 03-25-2025 15:48 jobs/j-windows/builds/2/build.xml
448 06-05-2013 11:30 jobs/j-windows/builds/2/log
6 06-05-2013 11:30 jobs/j-windows/builds/2/changelog.xml
1002 02-11-2017 21:51 jobs/j-windows/config.xml
0 02-11-2017 21:50 jobs/j/
2 06-05-2013 11:30 jobs/j/nextBuildNumber
0 03-25-2025 15:46 jobs/j/builds/
0 03-25-2025 15:46 jobs/j/builds/2/
0 06-05-2013 11:30 jobs/j/builds/2/archive/
12 06-05-2013 11:30 jobs/j/builds/2/archive/a
1015 03-25-2025 15:46 jobs/j/builds/2/build.xml
448 06-05-2013 11:30 jobs/j/builds/2/log
6 06-05-2013 11:30 jobs/j/builds/2/changelog.xml
993 06-05-2013 11:30 jobs/j/config.xml
--------- -------
4969 21 files
```
2. getArtifactsUpTo.zip
Before
```
Archive: getArtifactsUpTo.zip
Length Date Time Name
--------- ---------- ----- ----
528 11-11-2009 07:05 config.xml
0 11-10-2009 06:38 jobs/
0 04-28-2010 20:55 jobs/testJob/
0 04-28-2010 20:56 jobs/testJob/builds/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/
0 04-28-2010 20:59 jobs/testJob/builds/2010-04-28_08-26-00/archive/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/bar/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/bar/two.txt
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/dir/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/dir/one.txt
0 04-28-2010 20:59 jobs/testJob/builds/2010-04-28_08-26-00/archive/three.txt
255 04-28-2010 20:57 jobs/testJob/builds/2010-04-28_08-26-00/build.xml
0 04-28-2010 20:57 jobs/testJob/builds/2010-04-28_08-26-00/log
311 04-28-2010 20:55 jobs/testJob/config.xml
--------- -------
1094 16 files
```
After
```
Archive: getArtifactsUpTo.zip
Length Date Time Name
--------- ---------- ----- ----
528 11-11-2009 07:05 config.xml
0 11-10-2009 06:38 jobs/
0 04-28-2010 20:55 jobs/testJob/
0 03-25-2025 15:56 jobs/testJob/builds/
0 03-25-2025 15:56 jobs/testJob/builds/1/
0 04-28-2010 20:59 jobs/testJob/builds/1/archive/
0 04-28-2010 20:59 jobs/testJob/builds/1/archive/three.txt
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/dir/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/dir/one.txt
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/bar/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/bar/two.txt
273 03-25-2025 15:56 jobs/testJob/builds/1/build.xml
0 04-28-2010 20:57 jobs/testJob/builds/1/log
311 04-28-2010 20:55 jobs/testJob/config.xml
--------- -------
1112 16 files
```
Git Diffs
----------
1. actionSerialization.zip
```
diff --git a/j-windows/builds/2013-06-05_14-30-12/archive/a b/j-windows/builds/2/archive/a
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/archive/a
rename to j-windows/builds/2/archive/a
diff --git a/j-windows/builds/2013-06-05_14-30-12/build.xml b/j-windows/builds/2/build.xml
similarity index 95%
rename from j-windows/builds/2013-06-05_14-30-12/build.xml
rename to j-windows/builds/2/build.xml
index 0ecfb2f..fc4d2fc 100644
--- a/j-windows/builds/2013-06-05_14-30-12/build.xml
+++ b/j-windows/builds/2/build.xml
@@ -16,7 +16,7 @@
</record>
</hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>
- <number>2</number>
+ <timestamp>1370422812000</timestamp>
<startTime>1370457012935</startTime>
<result>SUCCESS</result>
<duration>178</duration>
@@ -27,4 +27,4 @@
<hudsonVersion>1.519-SNAPSHOT (private-06/05/2013 00:16 GMT-jglick)</hudsonVersion>
<scm class="hudson.scm.NullChangeLogParser"/>
<culprits class="com.google.common.collect.EmptyImmutableSortedSet"/>
-</build>
\ No newline at end of file
+</build>
diff --git a/j-windows/builds/2013-06-05_14-30-12/changelog.xml b/j-windows/builds/2/changelog.xml
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/changelog.xml
rename to j-windows/builds/2/changelog.xml
diff --git a/j-windows/builds/2013-06-05_14-30-12/log b/j-windows/builds/2/log
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/log
rename to j-windows/builds/2/log
diff --git a/j/builds/2013-06-05_14-30-12/archive/a b/j/builds/2/archive/a
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/archive/a
rename to j/builds/2/archive/a
diff --git a/j/builds/2013-06-05_14-30-12/build.xml b/j/builds/2/build.xml
similarity index 95%
rename from j/builds/2013-06-05_14-30-12/build.xml
rename to j/builds/2/build.xml
index 0a4480b..96bc7f2 100644
--- a/j/builds/2013-06-05_14-30-12/build.xml
+++ b/j/builds/2/build.xml
@@ -16,7 +16,7 @@
</record>
</hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>
- <number>2</number>
+ <timestamp>1370422812000</timestamp>
<startTime>1370457012935</startTime>
<result>SUCCESS</result>
<duration>178</duration>
@@ -27,4 +27,4 @@
<hudsonVersion>1.519-SNAPSHOT (private-06/05/2013 00:16 GMT-jglick)</hudsonVersion>
<scm class="hudson.scm.NullChangeLogParser"/>
<culprits class="com.google.common.collect.EmptyImmutableSortedSet"/>
-</build>
\ No newline at end of file
+</build>
diff --git a/j/builds/2013-06-05_14-30-12/changelog.xml b/j/builds/2/changelog.xml
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/changelog.xml
rename to j/builds/2/changelog.xml
diff --git a/j/builds/2013-06-05_14-30-12/log b/j/builds/2/log
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/log
rename to j/builds/2/log
```
2. getArtifactsUpTo.zip
```
diff --git a/builds/2010-04-28_08-26-00/archive/foo/bar/two.txt b/builds/1/archive/foo/bar/two.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/foo/bar/two.txt
rename to builds/1/archive/foo/bar/two.txt
diff --git a/builds/2010-04-28_08-26-00/archive/sub/dir/one.txt b/builds/1/archive/sub/dir/one.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/sub/dir/one.txt
rename to builds/1/archive/sub/dir/one.txt
diff --git a/builds/2010-04-28_08-26-00/archive/three.txt b/builds/1/archive/three.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/three.txt
rename to builds/1/archive/three.txt
diff --git a/builds/2010-04-28_08-26-00/build.xml b/builds/1/build.xml
similarity index 85%
rename from builds/2010-04-28_08-26-00/build.xml
rename to builds/1/build.xml
index 8764092..c65adfe 100644
--- a/builds/2010-04-28_08-26-00/build.xml
+++ b/builds/1/build.xml
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<build>
<actions/>
- <number>1</number>
+ <timestamp>1272423360000</timestamp>
<result>SUCCESS</result>
<duration>100</duration>
<keepLog>false</keepLog>
diff --git a/builds/2010-04-28_08-26-00/log b/builds/1/log
similarity index 100%
rename from builds/2010-04-28_08-26-00/log
rename to builds/1/log
```
There was a problem hiding this comment.
Change
- rename the build directory from timestamp to build number
- update the
build.xml: removed<number>field, added<timestamp>field.
unzip -l actionSerialization.zip
Before
→ unzip -l actionSerialization.zip
Archive: actionSerialization.zip
Length Date Time Name
--------- ---------- ----- ----
0 02-11-2017 21:51 jobs/
0 02-11-2017 21:50 jobs/j/
0 02-11-2017 21:51 jobs/j-windows/
0 02-11-2017 21:51 jobs/j-windows/builds/
0 02-11-2017 21:51 jobs/j-windows/builds/2013-06-05_14-30-12/
0 02-11-2017 21:51 jobs/j-windows/builds/2013-06-05_14-30-12/archive/
20 02-11-2017 22:01 jobs/j-windows/builds/2013-06-05_14-30-12/archive/a
996 02-11-2017 22:05 jobs/j-windows/builds/2013-06-05_14-30-12/build.xml
6 06-05-2013 11:30 jobs/j-windows/builds/2013-06-05_14-30-12/changelog.xml
448 06-05-2013 11:30 jobs/j-windows/builds/2013-06-05_14-30-12/log
1002 02-11-2017 21:51 jobs/j-windows/config.xml
2 06-05-2013 11:30 jobs/j-windows/nextBuildNumber
0 02-11-2017 21:50 jobs/j/builds/
0 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/
0 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/archive/
12 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/archive/a
996 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/build.xml
6 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/changelog.xml
448 06-05-2013 11:30 jobs/j/builds/2013-06-05_14-30-12/log
993 06-05-2013 11:30 jobs/j/config.xml
2 06-05-2013 11:30 jobs/j/nextBuildNumber
--------- -------
4931 21 files
After
Archive: actionSerialization.zip
Length Date Time Name
--------- ---------- ----- ----
0 03-25-2025 15:49 jobs/
0 02-11-2017 21:51 jobs/j-windows/
2 06-05-2013 11:30 jobs/j-windows/nextBuildNumber
0 03-25-2025 15:48 jobs/j-windows/builds/
0 03-25-2025 15:48 jobs/j-windows/builds/2/
0 02-11-2017 21:51 jobs/j-windows/builds/2/archive/
20 02-11-2017 22:01 jobs/j-windows/builds/2/archive/a
1015 03-25-2025 15:48 jobs/j-windows/builds/2/build.xml
448 06-05-2013 11:30 jobs/j-windows/builds/2/log
6 06-05-2013 11:30 jobs/j-windows/builds/2/changelog.xml
1002 02-11-2017 21:51 jobs/j-windows/config.xml
0 02-11-2017 21:50 jobs/j/
2 06-05-2013 11:30 jobs/j/nextBuildNumber
0 03-25-2025 15:46 jobs/j/builds/
0 03-25-2025 15:46 jobs/j/builds/2/
0 06-05-2013 11:30 jobs/j/builds/2/archive/
12 06-05-2013 11:30 jobs/j/builds/2/archive/a
1015 03-25-2025 15:46 jobs/j/builds/2/build.xml
448 06-05-2013 11:30 jobs/j/builds/2/log
6 06-05-2013 11:30 jobs/j/builds/2/changelog.xml
993 06-05-2013 11:30 jobs/j/config.xml
--------- -------
4969 21 files
git-diff of the change
diff --git a/j-windows/builds/2013-06-05_14-30-12/archive/a b/j-windows/builds/2/archive/a
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/archive/a
rename to j-windows/builds/2/archive/a
diff --git a/j-windows/builds/2013-06-05_14-30-12/build.xml b/j-windows/builds/2/build.xml
similarity index 95%
rename from j-windows/builds/2013-06-05_14-30-12/build.xml
rename to j-windows/builds/2/build.xml
index 0ecfb2f..fc4d2fc 100644
--- a/j-windows/builds/2013-06-05_14-30-12/build.xml
+++ b/j-windows/builds/2/build.xml
@@ -16,7 +16,7 @@
</record>
</hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>
- <number>2</number>
+ <timestamp>1370422812000</timestamp>
<startTime>1370457012935</startTime>
<result>SUCCESS</result>
<duration>178</duration>
@@ -27,4 +27,4 @@
<hudsonVersion>1.519-SNAPSHOT (private-06/05/2013 00:16 GMT-jglick)</hudsonVersion>
<scm class="hudson.scm.NullChangeLogParser"/>
<culprits class="com.google.common.collect.EmptyImmutableSortedSet"/>
-</build>
\ No newline at end of file
+</build>
diff --git a/j-windows/builds/2013-06-05_14-30-12/changelog.xml b/j-windows/builds/2/changelog.xml
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/changelog.xml
rename to j-windows/builds/2/changelog.xml
diff --git a/j-windows/builds/2013-06-05_14-30-12/log b/j-windows/builds/2/log
similarity index 100%
rename from j-windows/builds/2013-06-05_14-30-12/log
rename to j-windows/builds/2/log
diff --git a/j/builds/2013-06-05_14-30-12/archive/a b/j/builds/2/archive/a
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/archive/a
rename to j/builds/2/archive/a
diff --git a/j/builds/2013-06-05_14-30-12/build.xml b/j/builds/2/build.xml
similarity index 95%
rename from j/builds/2013-06-05_14-30-12/build.xml
rename to j/builds/2/build.xml
index 0a4480b..96bc7f2 100644
--- a/j/builds/2013-06-05_14-30-12/build.xml
+++ b/j/builds/2/build.xml
@@ -16,7 +16,7 @@
</record>
</hudson.tasks.Fingerprinter_-FingerprintAction>
</actions>
- <number>2</number>
+ <timestamp>1370422812000</timestamp>
<startTime>1370457012935</startTime>
<result>SUCCESS</result>
<duration>178</duration>
@@ -27,4 +27,4 @@
<hudsonVersion>1.519-SNAPSHOT (private-06/05/2013 00:16 GMT-jglick)</hudsonVersion>
<scm class="hudson.scm.NullChangeLogParser"/>
<culprits class="com.google.common.collect.EmptyImmutableSortedSet"/>
-</build>
\ No newline at end of file
+</build>
diff --git a/j/builds/2013-06-05_14-30-12/changelog.xml b/j/builds/2/changelog.xml
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/changelog.xml
rename to j/builds/2/changelog.xml
diff --git a/j/builds/2013-06-05_14-30-12/log b/j/builds/2/log
similarity index 100%
rename from j/builds/2013-06-05_14-30-12/log
rename to j/builds/2/log
There was a problem hiding this comment.
BTW @LocalData supports unpacked directories, which is easier to review changes to going forward.
For that matter, perhaps we should drop support for ZIPped directories, since they are inherently unreviewable. (tukaani-project/xz@e93e13c)
There was a problem hiding this comment.
Change
- rename the build directory from timestamp to build number
- update the build.xml: removed field, added field.
unzip -l getArtifactsUpTo.zip
Before
Archive: getArtifactsUpTo.zip
Length Date Time Name
--------- ---------- ----- ----
528 11-11-2009 07:05 config.xml
0 11-10-2009 06:38 jobs/
0 04-28-2010 20:55 jobs/testJob/
0 04-28-2010 20:56 jobs/testJob/builds/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/
0 04-28-2010 20:59 jobs/testJob/builds/2010-04-28_08-26-00/archive/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/bar/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/foo/bar/two.txt
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/dir/
0 04-28-2010 20:58 jobs/testJob/builds/2010-04-28_08-26-00/archive/sub/dir/one.txt
0 04-28-2010 20:59 jobs/testJob/builds/2010-04-28_08-26-00/archive/three.txt
255 04-28-2010 20:57 jobs/testJob/builds/2010-04-28_08-26-00/build.xml
0 04-28-2010 20:57 jobs/testJob/builds/2010-04-28_08-26-00/log
311 04-28-2010 20:55 jobs/testJob/config.xml
--------- -------
1094 16 files
After
Archive: getArtifactsUpTo.zip
Length Date Time Name
--------- ---------- ----- ----
528 11-11-2009 07:05 config.xml
0 11-10-2009 06:38 jobs/
0 04-28-2010 20:55 jobs/testJob/
0 03-25-2025 15:56 jobs/testJob/builds/
0 03-25-2025 15:56 jobs/testJob/builds/1/
0 04-28-2010 20:59 jobs/testJob/builds/1/archive/
0 04-28-2010 20:59 jobs/testJob/builds/1/archive/three.txt
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/dir/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/sub/dir/one.txt
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/bar/
0 04-28-2010 20:58 jobs/testJob/builds/1/archive/foo/bar/two.txt
273 03-25-2025 15:56 jobs/testJob/builds/1/build.xml
0 04-28-2010 20:57 jobs/testJob/builds/1/log
311 04-28-2010 20:55 jobs/testJob/config.xml
--------- -------
1112 16 files
git-diff of the change
diff --git a/builds/2010-04-28_08-26-00/archive/foo/bar/two.txt b/builds/1/archive/foo/bar/two.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/foo/bar/two.txt
rename to builds/1/archive/foo/bar/two.txt
diff --git a/builds/2010-04-28_08-26-00/archive/sub/dir/one.txt b/builds/1/archive/sub/dir/one.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/sub/dir/one.txt
rename to builds/1/archive/sub/dir/one.txt
diff --git a/builds/2010-04-28_08-26-00/archive/three.txt b/builds/1/archive/three.txt
similarity index 100%
rename from builds/2010-04-28_08-26-00/archive/three.txt
rename to builds/1/archive/three.txt
diff --git a/builds/2010-04-28_08-26-00/build.xml b/builds/1/build.xml
similarity index 85%
rename from builds/2010-04-28_08-26-00/build.xml
rename to builds/1/build.xml
index 8764092..c65adfe 100644
--- a/builds/2010-04-28_08-26-00/build.xml
+++ b/builds/1/build.xml
@@ -1,7 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<build>
<actions/>
- <number>1</number>
+ <timestamp>1272423360000</timestamp>
<result>SUCCESS</result>
<duration>100</duration>
<keepLog>false</keepLog>
diff --git a/builds/2010-04-28_08-26-00/log b/builds/1/log
similarity index 100%
rename from builds/2010-04-28_08-26-00/log
rename to builds/1/log
| throws IOException { | ||
| super.onLoad(parent, name); | ||
|
|
||
| // see https://github.com/jenkinsci/jenkins/pull/10456#issuecomment-2748112449 |
| return getByNumber(Integer.parseInt(id)); | ||
| try { | ||
| return getByNumber(Integer.parseInt(id)); | ||
| } catch (NumberFormatException e) { // see https://issues.jenkins.io/browse/JENKINS-75476 |
There was a problem hiding this comment.
File is: test/src/test/resources/hudson/model/QueueTest/recover_from_legacy_list.zip
Found it by `git ls-files -z | xargs -0 fgrep legacyIds`
Also verified there are no plain files in the repo `find . -type f -name 'legacyIds'`.
Before
```
Archive: recover_from_legacy_list.zip
Length Date Time Name
--------- ---------- ----- ----
1526 02-09-2015 02:53 config.xml
152 02-09-2015 02:53 hudson.model.UpdateCenter.xml
1680 02-09-2015 02:53 identity.key.enc
188 02-09-2015 02:53 jenkins.model.JenkinsLocationConfiguration.xml
0 02-09-2015 02:53 jobs/
0 02-09-2015 02:53 jobs/test/
0 02-09-2015 02:53 jobs/test/builds/
0 02-09-2015 02:53 jobs/test/builds/legacyIds
468 02-09-2015 02:53 jobs/test/config.xml
907 02-09-2015 02:53 nodeMonitors.xml
611 02-09-2015 17:14 queue.xml
64 02-09-2015 02:53 secret.key
0 02-09-2015 02:53 secret.key.not-so-secret
0 02-09-2015 02:53 secrets/
0 02-09-2015 02:53 secrets/filepath-filters.d/
2182 02-09-2015 02:53 secrets/filepath-filters.d/30-default.conf
272 02-09-2015 02:53 secrets/hudson.util.Secret
48 02-09-2015 02:53 secrets/jenkins.security.ApiTokenProperty.seed
256 02-09-2015 02:53 secrets/master.key
272 02-09-2015 02:53 secrets/org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY
0 02-09-2015 02:53 secrets/whitelisted-callables.d/
953 02-09-2015 02:53 secrets/whitelisted-callables.d/default.conf
0 02-09-2015 02:53 userContent/
84 02-09-2015 02:53 userContent/readme.txt
--------- -------
9663 24 files
```
After
```
Archive: recover_from_legacy_list.zip
Length Date Time Name
--------- ---------- ----- ----
1526 02-09-2015 02:53 config.xml
152 02-09-2015 02:53 hudson.model.UpdateCenter.xml
1680 02-09-2015 02:53 identity.key.enc
188 02-09-2015 02:53 jenkins.model.JenkinsLocationConfiguration.xml
0 02-09-2015 02:53 jobs/
0 02-09-2015 02:53 jobs/test/
0 03-26-2025 14:58 jobs/test/builds/
468 02-09-2015 02:53 jobs/test/config.xml
907 02-09-2015 02:53 nodeMonitors.xml
611 02-09-2015 17:14 queue.xml
64 02-09-2015 02:53 secret.key
0 02-09-2015 02:53 secret.key.not-so-secret
0 02-09-2015 02:53 secrets/
272 02-09-2015 02:53 secrets/hudson.util.Secret
0 02-09-2015 02:53 secrets/filepath-filters.d/
2182 02-09-2015 02:53 secrets/filepath-filters.d/30-default.conf
48 02-09-2015 02:53 secrets/jenkins.security.ApiTokenProperty.seed
256 02-09-2015 02:53 secrets/master.key
0 02-09-2015 02:53 secrets/whitelisted-callables.d/
953 02-09-2015 02:53 secrets/whitelisted-callables.d/default.conf
272 02-09-2015 02:53 secrets/org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY
0 02-09-2015 02:53 userContent/
84 02-09-2015 02:53 userContent/readme.txt
--------- -------
9663 23 files
```
There was a problem hiding this comment.
Found the legacyIds inside of this after running,
git ls-files -z | xargs -0 fgrep legacyIds
find . -type f -name 'legacyIds'
fixed now.
unzip -l recover_from_legacy_list.zip
Before
Archive: recover_from_legacy_list.zip
Length Date Time Name
--------- ---------- ----- ----
1526 02-09-2015 02:53 config.xml
152 02-09-2015 02:53 hudson.model.UpdateCenter.xml
1680 02-09-2015 02:53 identity.key.enc
188 02-09-2015 02:53 jenkins.model.JenkinsLocationConfiguration.xml
0 02-09-2015 02:53 jobs/
0 02-09-2015 02:53 jobs/test/
0 02-09-2015 02:53 jobs/test/builds/
0 02-09-2015 02:53 jobs/test/builds/legacyIds
468 02-09-2015 02:53 jobs/test/config.xml
907 02-09-2015 02:53 nodeMonitors.xml
611 02-09-2015 17:14 queue.xml
64 02-09-2015 02:53 secret.key
0 02-09-2015 02:53 secret.key.not-so-secret
0 02-09-2015 02:53 secrets/
0 02-09-2015 02:53 secrets/filepath-filters.d/
2182 02-09-2015 02:53 secrets/filepath-filters.d/30-default.conf
272 02-09-2015 02:53 secrets/hudson.util.Secret
48 02-09-2015 02:53 secrets/jenkins.security.ApiTokenProperty.seed
256 02-09-2015 02:53 secrets/master.key
272 02-09-2015 02:53 secrets/org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY
0 02-09-2015 02:53 secrets/whitelisted-callables.d/
953 02-09-2015 02:53 secrets/whitelisted-callables.d/default.conf
0 02-09-2015 02:53 userContent/
84 02-09-2015 02:53 userContent/readme.txt
--------- -------
9663 24 files
After
Archive: recover_from_legacy_list.zip
Length Date Time Name
--------- ---------- ----- ----
1526 02-09-2015 02:53 config.xml
152 02-09-2015 02:53 hudson.model.UpdateCenter.xml
1680 02-09-2015 02:53 identity.key.enc
188 02-09-2015 02:53 jenkins.model.JenkinsLocationConfiguration.xml
0 02-09-2015 02:53 jobs/
0 02-09-2015 02:53 jobs/test/
0 03-26-2025 14:58 jobs/test/builds/
468 02-09-2015 02:53 jobs/test/config.xml
907 02-09-2015 02:53 nodeMonitors.xml
611 02-09-2015 17:14 queue.xml
64 02-09-2015 02:53 secret.key
0 02-09-2015 02:53 secret.key.not-so-secret
0 02-09-2015 02:53 secrets/
272 02-09-2015 02:53 secrets/hudson.util.Secret
0 02-09-2015 02:53 secrets/filepath-filters.d/
2182 02-09-2015 02:53 secrets/filepath-filters.d/30-default.conf
48 02-09-2015 02:53 secrets/jenkins.security.ApiTokenProperty.seed
256 02-09-2015 02:53 secrets/master.key
0 02-09-2015 02:53 secrets/whitelisted-callables.d/
953 02-09-2015 02:53 secrets/whitelisted-callables.d/default.conf
272 02-09-2015 02:53 secrets/org.jenkinsci.main.modules.instance_identity.InstanceIdentity.KEY
0 02-09-2015 02:53 userContent/
84 02-09-2015 02:53 userContent/readme.txt
--------- -------
9663 23 files
|
Failing test checking 👀 Edit: checking in #10471 |
…archy Test failure The test `hudson.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy` failed in CI with error, <details><summary>failure log</summary> ``` java.lang.NullPointerException: Cannot invoke "org.htmlunit.html.DomElement.getHtmlElementDescendants()" because "doc" is null at org.htmlunit.html.HtmlPage.executeDeferredScriptsIfNeeded(HtmlPage.java:1466) at org.htmlunit.html.HtmlPage.initialize(HtmlPage.java:265) at org.htmlunit.WebClient.loadWebResponseInto(WebClient.java:701) at org.htmlunit.WebClient.loadWebResponseInto(WebClient.java:575) at org.htmlunit.WebClient.getPage(WebClient.java:493) at org.htmlunit.WebClient.getPage(WebClient.java:402) at org.htmlunit.WebClient.getPage(WebClient.java:538) at org.htmlunit.WebClient.getPage(WebClient.java:520) at org.jvnet.hudson.test.JenkinsRule$WebClient.getPage(JenkinsRule.java:2740) at org.jvnet.hudson.test.JenkinsRule.after(JenkinsRule.java:519) at org.jvnet.hudson.test.JenkinsRule$1.evaluate(JenkinsRule.java:677) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.lang.Thread.run(Thread.java:840) ``` </details> This is noticed in couple of PRs failing currently, * jenkinsci#10456 ([ref failed test result](https://ci.jenkins.io/job/Core/job/jenkins/job/PR-10456/7/testReport/)) * jenkinsci#10467 ([ref failed test result](https://ci.jenkins.io/job/Core/job/jenkins/job/PR-10467/2/testReport/)) I haven't been able to reproduce in local, but theory is these below mentioned delays could be the cause, * there is a slowness noticed in calls `wc.goTo(p.getUrl()...)` taking `~10s`. * And once the test is complete the stopping is taking another `10s`. <details><summary>log</summary> ``` [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running hudson.model.FileParameterValueTest === Starting fileParameter_canStillUse_internalHierarchy(hudson.model.FileParameterValueTest) 0.047 [id=21] INFO o.jvnet.hudson.test.WarExploder#explode: Using jenkins.war resources from /.../jenkins/war/target/jenkins 0.304 [id=21] INFO o.jvnet.hudson.test.JenkinsRule#createWebServer2: Running on http://localhost:64862/jenkins/ 0.367 [id=21] INFO jenkins.model.Jenkins#<init>: Starting version 2.504-SNAPSHOT 0.421 [id=36] INFO jenkins.InitReactorRunner$1#onAttained: Started initialization 1.002 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/command-launcher.jpi as a dependency of gradle 1.012 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/apache-httpcomponents-client-4-api.jpi as a dependency of gradle 1.034 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/jdk-tool.jpi as a dependency of gradle 1.052 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/trilead-api.jpi as a dependency of gradle 1.079 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/eddsa-api.jpi as a dependency of gradle 1.084 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/gson-api.jpi as a dependency of gradle 1.098 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/mina-sshd-api-common.jpi as a dependency of gradle 1.109 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/mina-sshd-api-core.jpi as a dependency of gradle 1.134 [id=46] INFO hudson.PluginManager#considerDetachedPlugin: Loading a detached plugin /var/folders/80/w8mmdy513sb3y9fp5fr7vvqc0000gn/T/jenkins1642946911825735225/sshd.jpi as a dependency of gradle 1.353 [id=41] INFO jenkins.InitReactorRunner$1#onAttained: Listed all plugins 1.362 [id=37] INFO j.b.api.BouncyCastlePlugin#start: /.../jenkins/test/target/j h15288515834251035408/plugins/bouncycastle-api/WEB-INF/optional-lib not found; for non RealJenkinsRule this is fine and can be ignored. 1.931 [id=53] INFO jenkins.InitReactorRunner$1#onAttained: Prepared all plugins 1.937 [id=34] INFO jenkins.InitReactorRunner$1#onAttained: Started all plugins 1.937 [id=47] INFO jenkins.InitReactorRunner$1#onAttained: Augmented all extensions 2.254 [id=53] INFO jenkins.InitReactorRunner$1#onAttained: System config loaded 2.255 [id=53] INFO jenkins.InitReactorRunner$1#onAttained: System config adapted 2.255 [id=37] INFO jenkins.InitReactorRunner$1#onAttained: Loaded all jobs 2.255 [id=37] INFO jenkins.InitReactorRunner$1#onAttained: Configuration for all jobs updated 2.307 [id=50] INFO jenkins.InitReactorRunner$1#onAttained: Completed initialization 2.466 [test0 jenkinsci#1] Started by user SYSTEM 2.466 [test0 jenkinsci#1] Running as SYSTEM 2.466 [test0 jenkinsci#1] Building in workspace /.../jenkins/test/target/j h15288515834251035408/workspace/test0 2.466 [test0 jenkinsci#1] Copying file to direct-child1.txt 2.466 [test0 jenkinsci#1] Copying file to parent/child2.txt 2.899 [test0 jenkinsci#1] Finished: SUCCESS 3.046 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: getting ws 14.449 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: got htmlunit for ws 14.450 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: got ws 14.452 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: getting ws/parent 24.720 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: got htmlunit for ws/parent 24.733 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: got ws/parent 24.733 [id=21] INFO h.model.FileParameterValueTest#fileParameter_canStillUse_internalHierarchy: completed 34.767 [id=21] INFO hudson.lifecycle.Lifecycle#onStatusUpdate: Stopping Jenkins WARN: The method class org.apache.commons.logging.impl.SLF4JLogFactory#release() was invoked. WARN: Please see http://www.slf4j.org/codes.html#release for an explanation. 34.799 [id=21] INFO hudson.lifecycle.Lifecycle#onStatusUpdate: Jenkins stopped 34.840 [id=21] INFO o.j.h.t.TemporaryDirectoryAllocator#dispose: deleting /.../jenkins/test/target/j h15288515834251035408 [INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 35.15 s -- in hudson.model.FileParameterValueTest ``` </details>
From my PoV the changelog entry is far too long. This is fine:
Or possibly
Upgrade guide can be longer although personally I think only the downgrade instructions are needed after 10 years... |
Thank you for this. I made the Just checked Jenkins stats (https://stats.jenkins.io/statistics) for versions older than 1.596—about 30 are still in use! 😄 No direct link, so here’s a quick screenshot. |
|
Once #10471 is merged, update this branch to trigger the CI build, which is expected to pass. Edit: this branch is updated after the mentioned PR merged. |
timja
left a comment
There was a problem hiding this comment.
/label ready-for-merge
This PR is now ready for merge, after ~24 hours, we will merge it if there's no negative feedback.
Thanks!

See JENKINS-75465.
This PR proposes to remove
RunIdMigrator, which was required when upgrading the controller from version 1.596 (or earlier) to 1.597 (or later).In Jenkins 1.597, build directories started using build numbers instead of the previous datetime format (
yyyy-MM-dd_HH-mm-ss) for directory naming. Since these versions were released long ago, the migration logic is no longer necessary.All related PRs of various changes around RunIdMigration
how did the migration work
RunIdMigrator handled migration of old build directories to the new format by:
yyyy-MM-dd_HH-mm-ss) directory. Renaming build directories from datetime format to build numbers.build.xmlby changing the<id>field from datetime format to numerical ID and storing the original datetime in the<timestamp>field. Removed the<number>field as it is not longer required the directory itself is the build number.legacyIdsmarker file.deletemethod to remove entries fromlegacyIdswhen a build is deleted.legacyIds marker file
legacyIds(for supported downgrading and undo migration).legacyIdsPresent: These jobs were considered migrated, and no further migration was applied.Plan for
legacyIdsMarker File in Existing JobslegacyIdsmarker file.legacyIdsmarker file will be deleted upon Jenkins upgrade to reduce inode usage.This results in a changelog entry and upgrade guideline warning about downgrading may cause potential slowness in Jenkins startup.
Testing done
Verify code usages
Find usages of legacyIds: search jenkinsci org found in 4 places
unique-id-plugin: theLegacyIdStorementioned in this plugin is for it's own migration, and not to do with thelegacyIdsfile mentioned here. (code ref)Manual testing
Test job execution works after upgrade and later downgrade
Marker file creation no longer happens for now jobs
Old jobs' marker file is deleted in first startup upon upgrade
Marker file gets created for all jobs when downgraded - from 2.503-snapshot to 2.502
The file is getting created in
jenkins/core/src/main/java/jenkins/model/RunIdMigrator.java
Line 149 in ba1219d
Tested that CloudBees KB article's script works during downgrade, and no migration done if `legacyIds` is precreated
command execution
jenkins startup logs
Proposed changelog entries
Proposed changelog category
/label removed
Proposed upgrade guidelines
No action is required. On the first startup after upgrading, you will see an info log:
hudson.model.Job#onLoad: Deleting legacyIds file in /.../JENKINS_HOME/jobs/my-job/builds. See https://issues.jenkins.io/browse/JENKINS-75465 for more information.. However, if you plan to downgrade after upgrading, you may want to manually create thelegacyIdsfile in the builds directory to prevent a potential slow startup. This is because the older version will perform migration checks when the file is missing. For reference, see this CloudBees KB workaround bash script.Submitter checklist
@Restrictedor have@since TODOJavadocs, as appropriate.@Deprecated(since = "TODO")or@Deprecated(forRemoval = true, since = "TODO"), if applicable.evalto ease future introduction of Content Security Policy (CSP) directives (see documentation).Desired reviewers
@mention
Before the changes are marked as
ready-for-merge:Maintainer checklist
upgrade-guide-neededlabel is set and there is a Proposed upgrade guidelines section in the pull request title (see example).lts-candidateto be considered (see query).