diff options
author | Sage Weil <sage@inktank.com> | 2013-09-19 08:48:07 -0700 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-10-02 16:53:08 -0700 |
commit | d05ce45f80ea804e9682f06c430c901155060263 (patch) | |
tree | d76f5870391f5312a0b68122c675823af3406e24 | |
parent | adc14b91c54d555aa73cdcdcc8e7e859fe6e30c5 (diff) | |
download | ceph-d05ce45f80ea804e9682f06c430c901155060263.tar.gz |
osd: add bloom_[fpp,period] to pg_pool_t
Add pool properties to control what type of bloom filter the OSD should track
for each PG.
Signed-off-by: Sage Weil <sage@inktank.com>
-rw-r--r-- | src/osd/osd_types.cc | 25 | ||||
-rw-r--r-- | src/osd/osd_types.h | 15 |
2 files changed, 36 insertions, 4 deletions
diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index aa20dc592fa..cda487617bf 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -694,6 +694,9 @@ void pg_pool_t::dump(Formatter *f) const f->dump_string(name.c_str(), i->second); } f->close_section(); + f->dump_unsigned("bloom_false_positive_probability", get_bloom_fpp()); + f->dump_unsigned("bloom_period", bloom_period); + f->dump_unsigned("bloom_count", bloom_count); } @@ -898,7 +901,7 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const return; } - ENCODE_START(10, 5, bl); + ENCODE_START(11, 5, bl); ::encode(type, bl); ::encode(size, bl); ::encode(crush_ruleset, bl); @@ -926,12 +929,15 @@ void pg_pool_t::encode(bufferlist& bl, uint64_t features) const ::encode(read_tier, bl); ::encode(write_tier, bl); ::encode(properties, bl); + ::encode(bloom_fpp_micro, bl); + ::encode(bloom_period, bl); + ::encode(bloom_count, bl); ENCODE_FINISH(bl); } void pg_pool_t::decode(bufferlist::iterator& bl) { - DECODE_START_LEGACY_COMPAT_LEN(7, 5, 5, bl); + DECODE_START_LEGACY_COMPAT_LEN(11, 5, 5, bl); ::decode(type, bl); ::decode(size, bl); ::decode(crush_ruleset, bl); @@ -996,6 +1002,15 @@ void pg_pool_t::decode(bufferlist::iterator& bl) if (struct_v >= 10) { ::decode(properties, bl); } + if (struct_v >= 11) { + ::decode(bloom_fpp_micro, bl); + ::decode(bloom_period, bl); + ::decode(bloom_count, bl); + } else { + bloom_fpp_micro = 0; + bloom_period = 0; + bloom_count = 0; + } DECODE_FINISH(bl); calc_pg_masks(); } @@ -1039,6 +1054,9 @@ void pg_pool_t::generate_test_instances(list<pg_pool_t*>& o) a.write_tier = 1; a.properties["p-1"] = "v-1"; a.properties["empty"] = string(); + a.bloom_fpp_micro = 6000; + a.bloom_period = 3600; + a.bloom_count = 8; o.push_back(new pg_pool_t(a)); } @@ -1071,6 +1089,9 @@ ostream& operator<<(ostream& out, const pg_pool_t& p) out << " write_tier " << p.write_tier; if (p.cache_mode) out << " cache_mode " << p.get_cache_mode_name(); + if (p.bloom_count) { + out << " bloom " << p.get_bloom_fpp() << "% " << p.bloom_period << "s x" << p.bloom_count; + } return out; } diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 091b2b95e8f..1babd58dc12 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -856,7 +856,6 @@ public: int64_t write_tier; ///< pool/tier for objecter to direct writes to cache_mode_t cache_mode; ///< cache pool mode - bool is_tier() const { return tier_of >= 0; } void clear_tier() { tier_of = -1; } bool has_read_tier() const { return read_tier >= 0; } @@ -864,6 +863,10 @@ public: bool has_write_tier() const { return write_tier >= 0; } void clear_write_tier() { write_tier = -1; } + uint32_t bloom_period; ///< periodicity of bloom filter segments (seconds) + uint32_t bloom_count; ///< number of periods to retain + uint16_t bloom_fpp_micro; ///< if non-zero, the target false positive probability * 1000000 + pg_pool_t() : flags(0), type(0), size(0), min_size(0), crush_ruleset(0), object_hash(0), @@ -875,7 +878,10 @@ public: quota_max_bytes(0), quota_max_objects(0), pg_num_mask(0), pgp_num_mask(0), tier_of(-1), read_tier(-1), write_tier(-1), - cache_mode(CACHEMODE_NONE) + cache_mode(CACHEMODE_NONE), + bloom_period(0), + bloom_count(0), + bloom_fpp_micro(0) { } void dump(Formatter *f) const; @@ -930,6 +936,11 @@ public: return quota_max_objects; } + /// get bloom filter fpp + float get_bloom_fpp() const { + return (float)bloom_fpp_micro / 1000000.0; + } + static int calc_bits_of(int t); void calc_pg_masks(); |