diff --git a/db/db_impl_compaction_flush.cc b/db/db_impl_compaction_flush.cc index e9a5eee5e23e2ff1ef09bdcd208153b14bed9865..16b0f12c6119ab21759e198fd22f5be11c26c28f 100644 --- a/db/db_impl_compaction_flush.cc +++ b/db/db_impl_compaction_flush.cc @@ -1668,6 +1668,7 @@ Status DBImpl::BackgroundCompaction(bool* made_progress, // Don't need to sleep here, because BackgroundCallCompaction // will sleep if !s.ok() status = Status::CompactionTooLarge(); + RecordTick(stats_, COMPACTION_CANCELLED, 1); } else { // update statistics MeasureTime(stats_, NUM_FILES_IN_SINGLE_COMPACTION, diff --git a/db/db_sst_test.cc b/db/db_sst_test.cc index c48d789e6b338dd0a34a55d10f0d42ec8a93182c..b6d55e27d8b063e71c2ba262bb122daa1c601c8d 100644 --- a/db/db_sst_test.cc +++ b/db/db_sst_test.cc @@ -547,13 +547,12 @@ TEST_F(DBSSTTest, CancellingCompactionsWorks) { Options options = CurrentOptions(); options.sst_file_manager = sst_file_manager; options.level0_file_num_compaction_trigger = 2; + options.statistics = CreateDBStatistics(); DestroyAndReopen(options); - int cancelled_compaction = 0; int completed_compactions = 0; rocksdb::SyncPoint::GetInstance()->SetCallBack( "DBImpl::BackgroundCompaction():CancelledCompaction", [&](void* arg) { - cancelled_compaction++; sfm->SetMaxAllowedSpaceUsage(0); }); rocksdb::SyncPoint::GetInstance()->SetCallBack( @@ -580,9 +579,10 @@ TEST_F(DBSSTTest, CancellingCompactionsWorks) { ASSERT_OK(Flush()); dbfull()->TEST_WaitForCompact(true); - ASSERT_GT(cancelled_compaction, 0); ASSERT_GT(completed_compactions, 0); ASSERT_EQ(sfm->GetCompactionsReservedSize(), 0); + // Make sure the stat is bumped + ASSERT_GT(dbfull()->immutable_db_options().statistics.get()->getTickerCount(COMPACTION_CANCELLED), 0); rocksdb::SyncPoint::GetInstance()->DisableProcessing(); } diff --git a/include/rocksdb/statistics.h b/include/rocksdb/statistics.h index 8cf8b7d3e60547ce3e685c79c7cb444593b79fce..7fa287f0bd1d495106689fcc8280342feac5dae0 100644 --- a/include/rocksdb/statistics.h +++ b/include/rocksdb/statistics.h @@ -108,6 +108,8 @@ enum Tickers : uint32_t { COMPACTION_RANGE_DEL_DROP_OBSOLETE, // all keys in range were deleted. // Deletions obsoleted before bottom level due to file gap optimization. COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE, + // If a compaction was cancelled in sfm to prevent ENOSPC + COMPACTION_CANCELLED, // Number of keys written to the database via the Put and Write call's NUMBER_KEYS_WRITTEN, @@ -347,6 +349,8 @@ const std::vector> TickersNameMap = { "rocksdb.compaction.range_del.drop.obsolete"}, {COMPACTION_OPTIMIZED_DEL_DROP_OBSOLETE, "rocksdb.compaction.optimized.del.drop.obsolete"}, + {COMPACTION_CANCELLED, + "rocksdb.compaction.cancelled"}, {NUMBER_KEYS_WRITTEN, "rocksdb.number.keys.written"}, {NUMBER_KEYS_READ, "rocksdb.number.keys.read"}, {NUMBER_KEYS_UPDATED, "rocksdb.number.keys.updated"},