From 730aceac6d39a94efac38a944db2921e37969292 Mon Sep 17 00:00:00 2001 From: vyzo Date: Fri, 28 Jan 2022 15:55:10 +0200 Subject: [PATCH] immediately flush pending writes when entering critical section --- blockstore/splitstore/markset_badger.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/blockstore/splitstore/markset_badger.go b/blockstore/splitstore/markset_badger.go index b5e7b5497..6f25b9d52 100644 --- a/blockstore/splitstore/markset_badger.go +++ b/blockstore/splitstore/markset_badger.go @@ -93,9 +93,29 @@ func (e *BadgerMarkSetEnv) Close() error { func (s *BadgerMarkSet) BeginCriticalSection() error { s.mx.Lock() - defer s.mx.Unlock() + + if s.persist { + s.mx.Unlock() + return nil + } + + var write bool + var seqno int + if len(s.pend) > 0 { + write = true + seqno := s.seqno + s.seqno++ + s.writing[seqno] = s.pend + s.pend = make(map[string]struct{}) + } s.persist = true + s.mx.Unlock() + + if write { + return s.write(seqno) + } + return nil }