fix(dav): finalize upload bookkeeping before downgrading lock#60453
Open
joshtrichards wants to merge 1 commit into
Open
fix(dav): finalize upload bookkeeping before downgrading lock#60453joshtrichards wants to merge 1 commit into
joshtrichards wants to merge 1 commit into
Conversation
Signed-off-by: Josh <josh.t.richards@gmail.com>
Member
Author
|
/backport to stable33 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
Refactor the final upload/publish phase in
apps/dav/lib/Connector/Sabre/File.phpinto a dedicatedfinalizeUpload()helper and keep the exclusive lock until final bookkeeping is complete.What changed
finalizeUpload()Why
This upload path intentionally bypasses the normal view-layer publish path and then reconciles cache/bookkeeping state manually.
Previously, the code downgraded the lock to shared immediately after
getUpdater()->update($internalPath), and only then applied additional metadata and checksum updates. That created a window where the file could be visible at the final path while parts of the visibility/bookkeeping state were still catching up.I believe this is the probable culprit of transient failures, which show up in our CI runs in the FilesDrop integration tests like this:
Since it doesn't always fail (and re-running eventually leads to a it passing), it's not a path handling issue per se, but more a timing matter.
This refactor keeps the existing storage-level behavior but makes the finalization boundary more explicit and narrows that inconsistent window.
Cc: @icewind1991 because you last adjusted the logging scenarios like this in #56166 so may be related to some other work you were doing / problem you encountered.
Scope / non-goals
This change does not alter:
It only tightens ordering during the final publish/finalization phase.
Testing / review focus
Please review especially for:
putFileInfo()Checklist
3. to review, feature component)stable32)AI (if applicable)