Is your feature request related to a problem? Please describe.
Since PR goharbor/community#265, Harbor no longer lands tag files in the storage backend. I rely on a standby native Distribution registry reading from the same S3 backend for disaster recovery. Without tag files in S3, the failover registry cannot resolve images by tag and becomes unusable.
Describe the solution you'd like
Add a configurable option (e.g. registry_store_tags_in_storage: true|false, default false) that allows users to opt into keeping tag files in the storage backend, accepting the GC performance trade-off.
Describe the main design/architecture of your solution
A configuration flag in harbor.yml (or equivalent env variable). When enabled, Harbor preserves the pre-#22507 behavior: tag files are written to the storage backend during push. When disabled (default), current behavior applies (tags not landed in storage).
Describe the development plan you've considered
Conditional check in the push path where the tag file write was removed by #22507. If the flag is enabled, execute the original write. No changes to GC logic needed, the existing tag deletion in GC already handles cleaning up tag files in storage.
Additional context
Another user reported the same need: @jsingleton785 here : goharbor/community#265 (comment). This also aligns with @reasonerjt's suggestion (r2380819844) to provide an option for users who want tags in storage, and with Option 1 from the original proposal.
Is your feature request related to a problem? Please describe.
Since PR goharbor/community#265, Harbor no longer lands tag files in the storage backend. I rely on a standby native Distribution registry reading from the same S3 backend for disaster recovery. Without tag files in S3, the failover registry cannot resolve images by tag and becomes unusable.
Describe the solution you'd like
Add a configurable option (e.g. registry_store_tags_in_storage: true|false, default false) that allows users to opt into keeping tag files in the storage backend, accepting the GC performance trade-off.
Describe the main design/architecture of your solution
A configuration flag in harbor.yml (or equivalent env variable). When enabled, Harbor preserves the pre-#22507 behavior: tag files are written to the storage backend during push. When disabled (default), current behavior applies (tags not landed in storage).
Describe the development plan you've considered
Conditional check in the push path where the tag file write was removed by #22507. If the flag is enabled, execute the original write. No changes to GC logic needed, the existing tag deletion in GC already handles cleaning up tag files in storage.
Additional context
Another user reported the same need: @jsingleton785 here : goharbor/community#265 (comment). This also aligns with @reasonerjt's suggestion (r2380819844) to provide an option for users who want tags in storage, and with Option 1 from the original proposal.