diff --git a/compaction.go b/compaction.go index fcc840dd39..77c95e1ea4 100644 --- a/compaction.go +++ b/compaction.go @@ -2071,7 +2071,6 @@ func (d *DB) flush1() (bytesFlushed uint64, err error) { d.clearCompactingState(c, err != nil) delete(d.mu.compact.inProgress, c) d.mu.versions.incrementCompactions(c.kind, c.extraLevels) - d.mu.versions.incrementCompactionBytes(-c.bytesWritten) var flushed flushableList if err == nil { @@ -2850,10 +2849,12 @@ func (d *DB) runCompaction( Path: d.objProvider.Path(objMeta), FileNum: fileNum, }) - writable = &compactionWritable{ - Writable: writable, - versions: d.mu.versions, - written: &c.bytesWritten, + if c.kind != compactionKindFlush { + writable = &compactionWritable{ + Writable: writable, + versions: d.mu.versions, + written: &c.bytesWritten, + } } createdFiles = append(createdFiles, fileNum.DiskFileNum()) cacheOpts := private.SSTableCacheOpts(d.cacheID, fileNum.DiskFileNum()).(sstable.WriterOption) diff --git a/db.go b/db.go index a12ee567b3..0cc2f3c695 100644 --- a/db.go +++ b/db.go @@ -1523,6 +1523,16 @@ func (d *DB) Close() error { d.mu.Unlock() d.deleters.Wait() d.compactionSchedulers.Wait() + + // Sanity check metrics. + if invariants.Enabled { + m := d.Metrics() + if m.Compact.NumInProgress > 0 || m.Compact.InProgressBytes > 0 { + d.mu.Lock() + panic(fmt.Sprintf("invalid metrics on close:\n%s", m)) + } + } + d.mu.Lock() // As a sanity check, ensure that there are no zombie tables. A non-zero count