Periodically trigger compaction
This addresses an issue where the compaction triggered on cutting
a new block doesn't find anything as the writers are still active on the
block that should be ready for compaction.
@@ -187,8 +187,16 @@ func Open(dir string, l log.Logger, r prometheus.Registerer, opts *Options) (db
func (db *DB) run() {
defer close(db.donec)
+ tick := time.NewTicker(30 * time.Second)
+ defer tick.Stop()
+
for {
select {
+ case <-tick.C:
+ select {
+ case db.compactc <- struct{}{}:
+ default:
+ }
case <-db.compactc:
db.metrics.compactionsTriggered.Inc()
