|
|
|
@ -317,7 +317,6 @@ func decodeData(addr Address, data []byte) (*chunk, error) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (s *LDBStore) collectGarbage() error { |
|
|
|
|
|
|
|
|
|
// prevent duplicate gc from starting when one is already running
|
|
|
|
|
select { |
|
|
|
|
case <-s.gc.runC: |
|
|
|
@ -335,7 +334,6 @@ func (s *LDBStore) collectGarbage() error { |
|
|
|
|
s.startGC(int(entryCnt)) |
|
|
|
|
log.Debug("collectGarbage", "target", s.gc.target, "entryCnt", entryCnt) |
|
|
|
|
|
|
|
|
|
var totalDeleted int |
|
|
|
|
for s.gc.count < s.gc.target { |
|
|
|
|
it := s.db.NewIterator() |
|
|
|
|
ok := it.Seek([]byte{keyGCIdx}) |
|
|
|
@ -371,15 +369,15 @@ func (s *LDBStore) collectGarbage() error { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
s.writeBatch(s.gc.batch, wEntryCnt) |
|
|
|
|
log.Trace("garbage collect batch done", "batch", singleIterationCount, "total", s.gc.count) |
|
|
|
|
s.lock.Unlock() |
|
|
|
|
it.Release() |
|
|
|
|
log.Trace("garbage collect batch done", "batch", singleIterationCount, "total", s.gc.count) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
s.gc.runC <- struct{}{} |
|
|
|
|
metrics.GetOrRegisterCounter("ldbstore.collectgarbage.delete", nil).Inc(int64(s.gc.count)) |
|
|
|
|
log.Debug("garbage collect done", "c", s.gc.count) |
|
|
|
|
s.gc.runC <- struct{}{} |
|
|
|
|
|
|
|
|
|
metrics.GetOrRegisterCounter("ldbstore.collectgarbage.delete", nil).Inc(int64(totalDeleted)) |
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|