[go: up one dir, main page]

Skip to content

Maven virtual registry: allow digests request without a file in the cache

Everyone can contribute. Help move this issue forward while earning points, leveling up and collecting rewards.

🔥 Problem

The Maven virtual registry expects a specific requests order for a given file:

  1. The file itself (.jar for example).
  2. The digests of the file. We could have multiple requests here (.md5 or .sha1 for example).

As such, the cache entry is created for (1.) but not for (2.) because the expectation was that (1.) was always the first request to hit the virtual registry.

Well, that is not entirely true.

Under some conditions (for example, the file already exists in the local cache ~/.m2/repository), maven clients can decide to re-use that file but verify the integrity. To do so, they will skip (1.) and go for (2.) directly.

The virtual registry will answer 404 not found as (1.) was not executed first = the cache entry doesn't exist = we can't locate the requested digest.

🚒 Solution

Requesting a digest, such as .md5 should:

  • walk the list of upstreams and locate where the file is.
  • return the digest to the requesting client.
  • cache the actual file. By doing so, all the digests will become available.

Example:

The virtual registry receives a request to /my_package.pom.md5. We need to:

  1. locate the upstream that has the my_package.pom file.
  2. download and return the my_package.pom.md5 contents to the client.
  3. download and cache the my_package.pom file. By doing so, all the digests of this file will be created in the cache too.

(1.) is the current logic that walks the list of upstreams. (2.) can be taken care by workhorse (sendurl instruction). (3.) could be done in a background job.

Edited by 🤖 GitLab Bot 🤖