Skip to content

Commit 098a553

Browse files
committed
Refactor: Skip BloomFilter stats if non-existent
Magma buckets don't enable the VBucket level BloomFilter and cbcollects for such buckets include the following superfluous output for every bucket/vbucket which can be skipped. vb_0:bloom_filter: DOESN'T EXIST vb_0:bloom_filter_key_count: 0 vb_0:bloom_filter_memory: 0 vb_0:bloom_filter_size: 0 vb_1:bloom_filter: DOESN'T EXIST vb_1:bloom_filter_key_count: 0 vb_1:bloom_filter_memory: 0 vb_1:bloom_filter_size: 0 ... Change-Id: I9504bb7bf9d3971fb6e058e4e2622657c3f8fcd0 Reviewed-on: https://review.couchbase.org/c/kv_engine/+/189743 Reviewed-by: Trond Norbye <[email protected]> Tested-by: Jim Walker <[email protected]>
1 parent 712454c commit 098a553

File tree

5 files changed

+44
-14
lines changed

5 files changed

+44
-14
lines changed

engines/ep/src/bloomfilter.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ bfilter_status_t BloomFilter::getStatus() {
9191
return status;
9292
}
9393

94-
std::string BloomFilter::getStatusString() {
94+
std::string BloomFilter::getStatusString() const {
9595
switch (status) {
9696
case BFILTER_DISABLED:
9797
return "DISABLED";
@@ -135,15 +135,15 @@ bool BloomFilter::maybeKeyExists(const DocKey& key) {
135135
return true;
136136
}
137137

138-
size_t BloomFilter::getNumOfKeysInFilter() {
138+
size_t BloomFilter::getNumOfKeysInFilter() const {
139139
if (status == BFILTER_COMPACTING || status == BFILTER_ENABLED) {
140140
return keyCounter;
141141
} else {
142142
return 0;
143143
}
144144
}
145145

146-
size_t BloomFilter::getFilterSize() {
146+
size_t BloomFilter::getFilterSize() const {
147147
if (status == BFILTER_COMPACTING || status == BFILTER_ENABLED) {
148148
return filterSize;
149149
} else {

engines/ep/src/bloomfilter.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,15 +36,15 @@ class BloomFilter {
3636

3737
void setStatus(bfilter_status_t to);
3838
bfilter_status_t getStatus();
39-
std::string getStatusString();
39+
std::string getStatusString() const;
4040

4141
void addKey(const DocKey& key);
4242
bool maybeKeyExists(const DocKey& key);
4343

44-
size_t getNumOfKeysInFilter();
44+
size_t getNumOfKeysInFilter() const;
4545

4646
/// @returns the filter size (in bits).
47-
size_t getFilterSize();
47+
size_t getFilterSize() const;
4848
size_t getNoOfHashes() const;
4949

5050
/// @returns the filter memory footprint in bytes.

engines/ep/src/vbucket.cc

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1290,6 +1290,27 @@ size_t VBucket::getFilterMemoryFootprint() {
12901290
return memFootprint;
12911291
}
12921292

1293+
void VBucket::addBloomFilterStats(const AddStatFn& add_stat, CookieIface& c) {
1294+
std::lock_guard<std::mutex> lh(bfMutex);
1295+
if (bFilter) {
1296+
addBloomFilterStats_UNLOCKED(add_stat, c, *bFilter);
1297+
} else if (tempFilter) {
1298+
addBloomFilterStats_UNLOCKED(add_stat, c, *tempFilter);
1299+
}
1300+
}
1301+
1302+
void VBucket::addBloomFilterStats_UNLOCKED(const AddStatFn& add_stat,
1303+
CookieIface& c,
1304+
const BloomFilter& filter) {
1305+
addStat("bloom_filter", filter.getStatusString(), add_stat, c);
1306+
addStat("bloom_filter_size", filter.getFilterSize(), add_stat, c);
1307+
addStat("bloom_filter_key_count",
1308+
filter.getNumOfKeysInFilter(),
1309+
add_stat,
1310+
c);
1311+
addStat("bloom_filter_memory", filter.getMemoryFootprint(), add_stat, c);
1312+
}
1313+
12931314
VBNotifyCtx VBucket::queueItem(queued_item& item, const VBQueueItemCtx& ctx) {
12941315
// Set queue time to now. Why not in the ctor of the Item? We only need to
12951316
// do this in certain places for new items as it's used to determine how
@@ -3323,10 +3344,7 @@ void VBucket::_addStats(VBucketStatsDetailLevel detail,
33233344

33243345
addStat("uuid", failovers->getLatestUUID(), add_stat, c);
33253346
addStat("purge_seqno", getPurgeSeqno(), add_stat, c);
3326-
addStat("bloom_filter", getFilterStatusString().data(), add_stat, c);
3327-
addStat("bloom_filter_size", getFilterSize(), add_stat, c);
3328-
addStat("bloom_filter_key_count", getNumOfKeysInFilter(), add_stat, c);
3329-
addStat("bloom_filter_memory", getFilterMemoryFootprint(), add_stat, c);
3347+
addBloomFilterStats(add_stat, c);
33303348
addStat("rollback_item_count", getRollbackItemCount(), add_stat, c);
33313349
addStat("hp_vb_req_size", getHighPriorityChkSize(), add_stat, c);
33323350
addStat("might_contain_xattrs", mightContainXattrs(), add_stat, c);

engines/ep/src/vbucket.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2181,6 +2181,13 @@ class VBucket : public std::enable_shared_from_this<VBucket> {
21812181
const AddStatFn& add_stat,
21822182
CookieIface& c);
21832183

2184+
// helper function to add stats for the current bloom filter
2185+
void addBloomFilterStats(const AddStatFn& add_stat, CookieIface& c);
2186+
2187+
void addBloomFilterStats_UNLOCKED(const AddStatFn& add_stat,
2188+
CookieIface& c,
2189+
const BloomFilter& filter);
2190+
21842191
/* This member holds the eviction policy used */
21852192
const EvictionPolicy eviction;
21862193

engines/ep/tests/ep_testsuite.cc

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6289,10 +6289,6 @@ static enum test_result test_mb19687_fixed(EngineIface* h) {
62896289
{"vbucket", {"vb_0"}},
62906290
{"vbucket-details 0",
62916291
{"vb_0",
6292-
"vb_0:bloom_filter",
6293-
"vb_0:bloom_filter_key_count",
6294-
"vb_0:bloom_filter_memory",
6295-
"vb_0:bloom_filter_size",
62966292
"vb_0:drift_ahead_threshold",
62976293
"vb_0:drift_ahead_threshold_exceeded",
62986294
"vb_0:drift_behind_threshold",
@@ -7280,6 +7276,15 @@ static enum test_result test_mb19687_fixed(EngineIface* h) {
72807276
"ep_magma_key_tree_data_block_size",
72817277
"ep_magma_key_tree_index_block_size"});
72827278
}
7279+
} else if (isPersistentBucket(h)) {
7280+
// bloom filter stats only appear when enabled (currently all persistent
7281+
// except magma)
7282+
auto& vb_details = statsKeys.at("vbucket-details 0");
7283+
vb_details.insert(vb_details.end(),
7284+
{"vb_0:bloom_filter",
7285+
"vb_0:bloom_filter_key_count",
7286+
"vb_0:bloom_filter_memory",
7287+
"vb_0:bloom_filter_size"});
72837288
}
72847289

72857290
if (isEphemeralBucket(h)) {

0 commit comments

Comments
 (0)