git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] reftable/stack: fsync "tables.list" during compaction

From
Patrick Steinhardt <ps@pks.im>
Date
Jan 30, 2024, 05:22 UTC
Message-ID
<7bdafc9bd7f53f38a24d69a563615b6ad484e1ba.1706592127.git.ps@pks.im>

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 ommission.

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>
---
 reftable/stack.c | 8 ++++++++
 1 file changed, 8 insertions(+)
diff --git a/reftable/stack.c b/reftable/stack.c
index ab295341cc..01d05933f6 100644
--- a/reftable/stack.c
+++ b/reftable/stack.c
@@ -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) {
-- 
2.43.GIT
Next: Justin Tobler
Message 1 of 3 in “reftable/stack: fsync "tables.list" during compaction”
  1. reftable/stack: fsync "tables.list" during compactionPatrick Steinhardt, Jan 30, 2024
  2. Justin ToblerJan 30, 2024
  3. Patrick SteinhardtJan 31, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.