mirror of
https://github.com/honeymoose/OpenSearch.git
synced 2025-03-09 14:34:43 +00:00
Today when we reset a recovery because of the source not being ready or the shard is getting removed on the source (for whatever reason) we wipe all temp files and reset the recovery without respecting any reference counting or locking etc. all streams are closed and files are wiped. Yet, this is problematic since we assert that some files are on disk etc. when we finish writing a file. These assertions don't hold anymore if we concurrently wipe the tmp files. This change moves the logic out of RecoveryTarget into RecoveriesCollection which basically clones the RecoveryTarget on reset instead which allows in-flight operations to finish gracefully. This means we now have a single path for cleanups in RecoveryTarget and can safely use assertions in the class since files won't be removed unless the recovery is either canceled, failed or finished. Closes #19473