From 399af6b0c4e9448e07d3d61007bbaea0cb3ef54e Mon Sep 17 00:00:00 2001 From: James Yin Date: Thu, 5 Jan 2023 19:06:31 +0800 Subject: [PATCH] fix(store): missing data in async store Signed-off-by: James Yin --- internal/store/meta/async.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/internal/store/meta/async.go b/internal/store/meta/async.go index 41642c296..1d70b1d6b 100644 --- a/internal/store/meta/async.go +++ b/internal/store/meta/async.go @@ -178,28 +178,34 @@ func (s *AsyncStore) commit() { span.End() }() + s.mu.Lock() + if s.pending.Len() == 0 { + s.mu.Unlock() return } - // Write WAL. - s.mu.RLock() + // Marshal changed data. data, err := s.marshaler.Marshal(SkiplistRange(s.pending)) - s.mu.RUnlock() if err != nil { panic(err) } + + // Update state. + merge(s.committed, s.pending) + s.pending.Init() + + s.mu.Unlock() + + // Write WAL. r, err := s.wal.AppendOne(ctx, data, walog.WithoutBatching()).Wait() if err != nil { panic(err) } - // Update state. s.mu.Lock() defer s.mu.Unlock() - merge(s.committed, s.pending) s.version = r.EO - s.pending.Init() } func merge(dst, src *skiplist.SkipList) {