Description
While working on #2344 I noticed some possible issues with the blob conversion.
When new blob variant is added it is added as a label to the original blob. I think the labels should always be in all blobs. Eg. if there is a gzip blob that gets converted to zstd, now when a pull happens to the same zstd the same blob is used and connected to another ref. If that second ref is exported as gzip it should notice that this conversion already exists.
When there are multiple refs that share one of the blobs(main blob of one ref is secondary to another), now when one ref gets released the second one may have a link to it through blob label but not through lease. That means that between the blob lookup and add to the lease the blob might get deleted. One possibility would be to tie the different compressions of blob with gc labels so they can only be released together even if only some of them are part of a specific ref lease. There might be simpler solutions. Notice that Info()
request does not guarantee that the return value still exists after it has returned.