From 99eb5cdfdbc460e7b7ecb05ef712a77a6451fe75 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Sat, 25 Apr 2020 11:08:39 -0700 Subject: [PATCH] wal: close the directory when Fsync() encounters error Signed-off-by: Ted Yu --- wal/wal.go | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/wal/wal.go b/wal/wal.go index 604b6c9c8..9c2cc3f5d 100644 --- a/wal/wal.go +++ b/wal/wal.go @@ -198,8 +198,21 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) { ) return nil, perr } + dirCloser := func() error { + if perr = pdir.Close(); perr != nil { + lg.Warn( + "failed to close the parent data directory file", + zap.String("parent-dir-path", filepath.Dir(w.dir)), + zap.String("dir-path", w.dir), + zap.Error(perr), + ) + return perr + } + return nil + } start := time.Now() if perr = fileutil.Fsync(pdir); perr != nil { + dirCloser() lg.Warn( "failed to fsync the parent data directory file", zap.String("parent-dir-path", filepath.Dir(w.dir)), @@ -209,15 +222,8 @@ func Create(lg *zap.Logger, dirpath string, metadata []byte) (*WAL, error) { return nil, perr } walFsyncSec.Observe(time.Since(start).Seconds()) - - if perr = pdir.Close(); perr != nil { - lg.Warn( - "failed to close the parent data directory file", - zap.String("parent-dir-path", filepath.Dir(w.dir)), - zap.String("dir-path", w.dir), - zap.Error(perr), - ) - return nil, perr + if err = dirCloser(); err != nil { + return nil, err } return w, nil