[docker-29.x backport] layer: Fix orphan creation in registerWithDescriptor #51703
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
- What I did
Start the metadata transaction before creating the overlay2 directory. This ensures that if
driver.Create()fails, we can properly cancel the transaction. Previously, ifStartTransaction()failed afterdriver.Create()succeeded, the defer cleanup would not run (not registered yet), leaving an orphaned overlay2 directory.Related to #45939
- How I did it
The fix reorders operations so that:
If
driver.Create()fails, the transaction is explicitly cancelled before returning. The nil check for tx in the defer is no longer needed since tx is guaranteed to exist when the defer runs.- How to verify it
go test ./daemon/internal/layer/...