mirror of
https://github.com/quay/quay.git
synced 2026-10-27 22:53:00 +03:00
Every tagged manifest PUT left two rows in `tag`: one expired a few milliseconds after creation and one live. Distribution's manifest handler stores the manifest with its tag (PutManifest -> putTag) and then calls the tag service for the same tag (PutTag -> putTag), and the second write expired the row the first had just created. The manifest middleware now records, in the request-scoped holder, the tag and digest it stored. The tag service skips the store write when it is asked for that same tag and digest within the same request. putTag itself is unchanged: a later push of a tag, identical or retargeted, expires the live row and adds a new one, the way Quay's retarget_tag records tag history. Result is one row per push instead of two. Claude-Session: https://claude.ai/code/session_01K3wbqTw3owBi8RT352YDoP Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>