reftable/stack: fsync "tables.list" during compaction

In 1df18a1c9a (reftable: honor core.fsync, 2024-01-23), we have added code to fsync both newly written reftables as well as "tables.list" to disk. But there are two code paths where "tables.list" is being written: - When appending a new table due to a normal ref update. - When compacting a range of tables during compaction. We have only addressed the former code path, but do not yet sync the new "tables.list" file in the latter. Fix this omission. Note that we are not yet adding any tests. These tests will be added once the "reftable" backend has been upstreamed. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Jan 30, 2024 at 06:22 UTC 7fa52fdad5065382f2b27b14cc0ecd225ea0ce4d
1 file changed +8
reftable/stack.c
+8
@@ -1018,6 +1018,14 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
1018 unlink(new_table_path.buf);
1019 goto done;
1020 }
1021 +
1022 + err = fsync_component(FSYNC_COMPONENT_REFERENCE, lock_file_fd);
1023 + if (err < 0) {
1024 + err = REFTABLE_IO_ERROR;
1025 + unlink(new_table_path.buf);
1026 + goto done;
1027 + }
1028 +
1029 err = close(lock_file_fd);
1030 lock_file_fd = -1;
1031 if (err < 0) {