From cfbd376ccf70772c587c20ae102e92c27bd11416 Mon Sep 17 00:00:00 2001 From: "Sangyeop.lee" Date: Thu, 10 Jun 2021 12:43:43 +0900 Subject: [PATCH 1/2] perf: flush wal asynchronously --- consensus/state.go | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index e7a8c1b06..d051a1351 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -813,13 +813,18 @@ func (cs *State) receiveRoutine(maxSteps int) { cs.handleMsg(mi) case mi = <-cs.internalMsgQueue: - err := cs.wal.WriteSync(mi) // NOTE: fsync - if err != nil { - panic(fmt.Sprintf( - "failed to write %v msg to consensus WAL due to %v; check your file system and restart the node", - mi, err, - )) + if err := cs.wal.Write(mi); err != nil { + cs.Logger.Error("failed writing to WAL", "err", err) } + go func() { + if err := cs.wal.FlushAndSync(); err != nil { + cs.Logger.Error("CONSENSUS FAILURE!!!", "err", fmt.Sprintf( + "failed to write %v msg to consensus WAL due to %v; check your file system and restart the node", + mi, err, + ), "stack", string(debug.Stack())) + onExit(cs) + } + }() if _, ok := mi.Msg.(*VoteMessage); ok { // we actually want to simulate failing during From 7b6e766124312e98cab8c3bf771378915fbe00a1 Mon Sep 17 00:00:00 2001 From: "Sangyeop.lee" Date: Thu, 10 Jun 2021 15:32:15 +0900 Subject: [PATCH 2/2] perf: do not flush wal when receive consensus msgs --- consensus/state.go | 9 --------- 1 file changed, 9 deletions(-) diff --git a/consensus/state.go b/consensus/state.go index d051a1351..9acf2a29d 100644 --- a/consensus/state.go +++ b/consensus/state.go @@ -816,15 +816,6 @@ func (cs *State) receiveRoutine(maxSteps int) { if err := cs.wal.Write(mi); err != nil { cs.Logger.Error("failed writing to WAL", "err", err) } - go func() { - if err := cs.wal.FlushAndSync(); err != nil { - cs.Logger.Error("CONSENSUS FAILURE!!!", "err", fmt.Sprintf( - "failed to write %v msg to consensus WAL due to %v; check your file system and restart the node", - mi, err, - ), "stack", string(debug.Stack())) - onExit(cs) - } - }() if _, ok := mi.Msg.(*VoteMessage); ok { // we actually want to simulate failing during