From a8db1d73228b09736445e99c4e9037a1a86d68bf Mon Sep 17 00:00:00 2001 From: Derek Collison Date: Mon, 1 Mar 2021 04:42:11 -0800 Subject: [PATCH] Write snapshots without lock held Signed-off-by: Derek Collison --- server/raft.go | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/server/raft.go b/server/raft.go index 9c304d25..2327144e 100644 --- a/server/raft.go +++ b/server/raft.go @@ -775,19 +775,16 @@ func (n *raft) InstallSnapshot(data []byte) error { snapDir := path.Join(n.sd, snapshotsDir) sn := fmt.Sprintf(snapFileT, snap.lastTerm, snap.lastIndex) sfile := path.Join(snapDir, sn) - - if err := ioutil.WriteFile(sfile, n.encodeSnapshot(snap), 0640); err != nil { - n.setWriteErrLocked(err) - n.Unlock() - return err - } - // Remember our latest snapshot file. n.snapfile = sfile n.Unlock() - _, err := n.wal.Compact(snap.lastIndex) - if err != nil { + if err := ioutil.WriteFile(sfile, n.encodeSnapshot(snap), 0640); err != nil { + n.setWriteErr(err) + return err + } + + if _, err := n.wal.Compact(snap.lastIndex); err != nil { n.setWriteErr(err) return err } @@ -801,7 +798,7 @@ func (n *raft) InstallSnapshot(data []byte) error { } } - return err + return nil } const (