This is an automated email from the ASF dual-hosted git repository. nickva pushed a commit to branch sync-data-and-header-on-compactions-and-resets in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit f57e025b12f3c3a548ccc99c034980b615e626ba Author: Nick Vatamaniuc <[email protected]> AuthorDate: Fri Jun 5 12:18:50 2026 -0400 Fsync on reset Let's sync when we truncate/reset headers. In case of truncate that's also a metadata operation so it dirties the inode but doesn't necessarily sync. Calling datasync will write that metadata change to disk [*]. These resets should be very rare so shouldn't be a performance impact. [*] fdatasync despite its name also syncs metadata required for data operations to work correctly, one of those is file size changes when it affects data operations (writes at eof or truncates). --- src/couch/src/couch_bt_engine.erl | 4 ++-- src/couch/src/couch_bt_engine_compactor.erl | 2 +- src/couch_mrview/src/couch_mrview_util.erl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/couch/src/couch_bt_engine.erl b/src/couch/src/couch_bt_engine.erl index 698609865..072a75c74 100644 --- a/src/couch/src/couch_bt_engine.erl +++ b/src/couch/src/couch_bt_engine.erl @@ -172,7 +172,7 @@ init(FilePath, Options) -> delete_compaction_files(FilePath), Header0 = couch_bt_engine_header:new(), Header1 = init_set_props(Fd, Header0, Options), - ok = couch_file:write_header(Fd, Header1), + ok = couch_file:write_header(Fd, Header1, [sync]), Header1; false -> case couch_file:read_header(Fd) of @@ -181,7 +181,7 @@ init(FilePath, Options) -> no_valid_header -> delete_compaction_files(FilePath), Header0 = couch_bt_engine_header:new(), - ok = couch_file:write_header(Fd, Header0), + ok = couch_file:write_header(Fd, Header0, [sync]), Header0 end end, diff --git a/src/couch/src/couch_bt_engine_compactor.erl b/src/couch/src/couch_bt_engine_compactor.erl index 2414285b4..12c1ea3ac 100644 --- a/src/couch/src/couch_bt_engine_compactor.erl +++ b/src/couch/src/couch_bt_engine_compactor.erl @@ -658,7 +658,7 @@ open_compaction_file(FilePath) -> reset_compaction_file(Fd, Header) -> ok = couch_file:truncate(Fd, 0), - ok = couch_file:write_header(Fd, Header). + ok = couch_file:write_header(Fd, Header, [sync]). commit_compaction_data(#comp_st{new_st = St} = CompSt) -> % Compaction needs to write headers to both the data file diff --git a/src/couch_mrview/src/couch_mrview_util.erl b/src/couch_mrview/src/couch_mrview_util.erl index 17f6db34d..f80f93787 100644 --- a/src/couch_mrview/src/couch_mrview_util.erl +++ b/src/couch_mrview/src/couch_mrview_util.erl @@ -926,7 +926,7 @@ delete_file(FName) -> reset_index(Db, Fd, #mrst{sig = Sig} = State) -> ok = couch_file:truncate(Fd, 0), - ok = couch_file:write_header(Fd, {Sig, nil}), + ok = couch_file:write_header(Fd, {Sig, nil}, [sync]), {_Commit, NewSt} = init_state(Db, Fd, reset_state(State), nil), NewSt.
