[BUG]: fix duplicate DeleteUnusedFiles task in GC for soft-deleted collections #4892
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.
Description of changes
The GC orchestrator has two fields it uses to track pending tasks:
pending_list_files_at_version_tasksandpending_mark_versions_at_sysdb_tasks. All of these tasks must complete before the logic insideadvance_after_list_files_and_mark_version_tasks_complete()runs at which point GC proceeds to delete the enumerated files (DeleteUnusedFiles) and then subsequently delete the marked versions from the SysDb (DeleteVersionsAtSysDb).Prior to this change, the
MarkVersionsAtSysDbtasks spawned when GC'ing soft-deleted collections were not tracked inpending_mark_versions_at_sysdb_tasks. This causedpending_list_files_at_version_tasksto run more than once, which in turn resulted inDeleteUnusedFilesandDeleteVersionsAtSysDbtasks running more than once. Both are safe to run multiple times so this is not a correctness issue. However, runningDeleteUnusedFilesmultiple times causes a slight performance hit andDeleteVersionsAtSysDbwill error if run more than once.Test plan
How are these changes tested?
pytestfor python,yarn testfor js,cargo testfor rustDocumentation Changes
Are all docstrings for user-facing APIs updated if required? Do we need to make documentation changes in the docs section?
n/a