From e46ec89de67d3d8fc91720ae3cba6f9c7a3320b0 Mon Sep 17 00:00:00 2001 From: Krasi Georgiev Date: Mon, 1 Apr 2019 16:23:45 +0300 Subject: [PATCH] use fsync to force persisting the meta file. (#573) * use fsync to force persisting the meta file. Signed-off-by: Krasi Georgiev --- CHANGELOG.md | 1 + block.go | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51858f3cb7..80f5023041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ - [REMOVED] `chunks.NewReader` is removed as it wasn't used anywhere. - [REMOVED] `FromData` is considered unused so was removed. - [FEATURE] Added option WALSegmentSize -1 to disable the WAL. + - [BUGFIX] Fsync the meta file to persist it on disk to avoid data loss in case of a host crash. ## 0.6.1 - [BUGFIX] Update `last` after appending a non-overlapping chunk in `chunks.MergeOverlappingChunks`. [#539](https://github.com/prometheus/tsdb/pull/539) diff --git a/block.go b/block.go index 2d9c81df91..e08503b641 100644 --- a/block.go +++ b/block.go @@ -251,6 +251,11 @@ func writeMetaFile(dir string, meta *BlockMeta) error { merr.Add(f.Close()) return merr.Err() } + // Force the kernel to persist the file on disk to avoid data loss if the host crashes. + if merr.Add(f.Sync()); merr.Err() != nil { + merr.Add(f.Close()) + return merr.Err() + } if err := f.Close(); err != nil { return err }