]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reftable/stack: fsync "tables.list" during compaction
authorPatrick Steinhardt <ps@pks.im>
Tue, 30 Jan 2024 05:22:47 +0000 (06:22 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 30 Jan 2024 19:56:15 +0000 (11:56 -0800)
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>
reftable/stack.c

index ab295341cc4de4357c6e4944f833c6b501323752..01d05933f6e675f1ebe7bf8f37b54db8bf2d8608 100644 (file)
@@ -1018,6 +1018,14 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last,
                unlink(new_table_path.buf);
                goto done;
        }
+
+       err = fsync_component(FSYNC_COMPONENT_REFERENCE, lock_file_fd);
+       if (err < 0) {
+               err = REFTABLE_IO_ERROR;
+               unlink(new_table_path.buf);
+               goto done;
+       }
+
        err = close(lock_file_fd);
        lock_file_fd = -1;
        if (err < 0) {