Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Backporting LTS 2.426.3 #8843

Conversation

krisstern
Copy link
Member

@krisstern krisstern commented Jan 8, 2024

Latest core version: jenkins-2.439

Fixed
-----

JENKINS-72469           Minor                   2.439
        Tool downloads repeatedly if HTTP server does not send last-modified HTTP header
        https://issues.jenkins.io/browse/JENKINS-72469

JENKINS-71737           Minor                   2.435
        Bad redirect when cloud node name is changed
        https://issues.jenkins.io/browse/JENKINS-71737

Desired reviewers

@jenkinsci/core-pr-reviewers

Before the changes are marked as ready-for-merge:

Maintainer checklist

car-roll and others added 2 commits January 8, 2024 22:56
… servers (jenkinsci#8814)

* [JENKINS-72469] Avoid repeated tool downloads from misconfigured HTTP servers

The Azul Systems content delivery network stopped providing the
last-modified header in their URL responses.  They only provide the
ETag header.

Add ETag support to the Jenkins FilePath URL download method so that if ETag is
provided, we use the ETag value.  If last-modified is provided and matches, we
continue to honor it as well.

https://issues.jenkins.io/browse/JENKINS-72469 has more details.

https://community.jenkins.io/t/job-stuck-on-unpacking-global-jdk-tool/11272
also includes more details.

Testing done

* Automated test added to FilePathTest for code changes on the controller.
  The automated test confirms that even without a last-modified value,
  the later downloads are skipped if a matching ETag is received.
  The automated test also confirms that download is skipped if OK is
  received with a matching ETag.  No automated test was added to confirm
  download on the agent because that path is not tested by any of the
  other test automation of this class.

* Interactive test with the Azul Systems JDK installer on the controller.
  I created a tool installer for the Azul JDK.  I verified that before
  this change it was downloaded each time the job was run.  I verified
  that after the change it was downloaded only once.

* Interactive test with the Azul Systems JDK installer on an agent.
  I created a tool installer for the Azul JDK.  I verified that before
  this change it was downloaded each time the job was run.  I verified
  that after the change it was downloaded only once.

* Interactive test on the controller with a file download from an NGINX
  web server confirmed that the tool is downloaded once and then later
  runs of the job did not download the file again.

* Use equals instead of contains to check ETag

Don't risk that a substring of an earlier ETag might cause a later
ETag to incorrectly assume it does not need to download a modified
installer.

* Use weak comparison for ETag values

https://httpwg.org/specs/rfc9110.html#field.etag describes weak comparison
cases and notes that content providers may provide weak or strong entity
tags.  Updated code to correctly compare weak and strong entity tags.

Also improves the null checks based on the suggestions from @mawinter69
in jenkinsci#8814 (comment)

* Test comparison of weak and strong validators

* Do not duplicate test args, more readable

* Use better variable names in test

Cover more branches in the equalEtags method as well

* Fix variable declaration order

(cherry picked from commit c8156d4)
@krisstern krisstern changed the base branch from master to stable-2.426 January 8, 2024 15:03
@krisstern krisstern added the into-lts This PR is filed against an LTS branch label Jan 8, 2024
Copy link
Contributor

@MarkEWaite MarkEWaite left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed and confirmed that the two changes listed in the description are the two changes included in the pull request. Thanks!

)

Infrastructure issue that we don't want to allow to delay the release
candidate of 2.426.3.

jenkins-infra/helpdesk#3890 is the issue

(cherry picked from commit 3dbbf26)
@NotMyFault NotMyFault merged commit 96dc95a into jenkinsci:stable-2.426 Jan 9, 2024
17 checks passed
@krisstern krisstern deleted the feat/stable-2.426/backporting-2.426.3-1 branch January 10, 2024 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
into-lts This PR is filed against an LTS branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants