This changes the implementation of ReplaceFiles. Previously,
ReplaceFiles used BaseReplaceFiles, which was only used by ReplaceFiles.
Now it uses MergingSnapshotUpdate, the same base class that is used for
deletes, merge appends, and overwrites.
The new implementation adds automatic merging when replacing files and
takes advantage of caching that makes retries much faster.
To use MergingSnapshotUpdate for ReplaceFiles, this adds a mode that
will fail when any specific paths to delete are not found in the table's
current manifests. Filtered manifests are cached and reused in this mode
by tracking the files that were deleted in a filtered manifest.
This changes the implementation of ReplaceFiles. Previously, ReplaceFiles used BaseReplaceFiles, which was only used by ReplaceFiles. Now it uses MergingSnapshotUpdate, the same base class that is used for deletes, merge appends, and overwrites.
The new implementation adds automatic merging when replacing files and takes advantage of caching that makes retries much faster.
To use MergingSnapshotUpdate for ReplaceFiles, this adds a mode that will fail when any specific paths to delete are not found in the table's current manifests. Filtered manifests are cached and reused in this mode by tracking the files that were deleted in a filtered manifest.