Propose allowing unlink for LocalUnopened files #1735
Draft
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 changed and why?
We encountered an issue when files became permanently stuck and could not be deleted. This happens when a process crashes (or is killed) between the
mknodandopenFUSE calls.The file is created in
LocalUnopenedstate, but since the process never opens it for writing, there's no way to complete or cancel the write, and unlink becomes blocked if we try to delete the stale file.Previously, unlinking any local file (LocalUnopened, LocalOpen, or PendingRename) was blocked with
unlink on local file not allowed until write is complete. However, files in LocalUnopened state have never been opened for writing, so no S3 upload has started. These files exist only in the local inode tree and can be removed without S3 cleanup.This change separates the handling of LocalUnopened from LocalOpen/PendingRename, allowing unlink to succeed for files that were created but never opened.
Does this change impact existing behavior?
Yes. Previously, attempting to unlink a LocalUnopened file returned an error. Now it succeeds.
Does this change need a changelog entry? Does it require a version change?
Yes.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license and I agree to the terms of the Developer Certificate of Origin (DCO).