diff --git a/light/store/db/db.go b/light/store/db/db.go index fb9e04cce..14db0115e 100644 --- a/light/store/db/db.go +++ b/light/store/db/db.go @@ -243,12 +243,14 @@ func (s *dbs) Prune(size uint16) error { b := s.db.NewBatch() defer b.Close() + var pruned uint16 = 0 for itr.Valid() && numToPrune > 0 { if err = b.Delete(itr.Key()); err != nil { return err } itr.Next() numToPrune-- + pruned++ } if err = itr.Error(); err != nil { return err @@ -256,11 +258,12 @@ func (s *dbs) Prune(size uint16) error { // 3) // update size s.mtx.Lock() - s.size = size + s.size -= pruned + newSize := s.size s.mtx.Unlock() - if wErr := b.Set(s.sizeKey(), marshalSize(size)); wErr != nil { - return fmt.Errorf("failed to persist size: %w", wErr) + if err := b.Set(s.sizeKey(), marshalSize(newSize)); err != nil { + return fmt.Errorf("failed to persist size: %w", err) } // 4) write batch deletion to disk diff --git a/light/store/db/db_test.go b/light/store/db/db_test.go index d0dbe2896..7276c23eb 100644 --- a/light/store/db/db_test.go +++ b/light/store/db/db_test.go @@ -148,6 +148,13 @@ func Test_Concurrency(t *testing.T) { t.Log(err) } + if i > 2 { + _, err = dbStore.LightBlockBefore(i - 1) + if err != nil { + t.Log(err) + } + } + _, err = dbStore.LastLightBlockHeight() if err != nil { t.Log(err) @@ -157,16 +164,19 @@ func Test_Concurrency(t *testing.T) { t.Log(err) } - err = dbStore.Prune(2) + err = dbStore.Prune(3) if err != nil { t.Log(err) } _ = dbStore.Size() - err = dbStore.DeleteLightBlock(1) - if err != nil { - t.Log(err) + if i > 2 && i%2 == 0 { + err = dbStore.DeleteLightBlock(i - 1) + if err != nil { + t.Log(err) + } } + }(int64(i)) }