case PG::Scrubber::INACTIVE:
dout(10) << "scrub start" << dendl;
+ scrubber.cleaned_meta_map.reset_bitwise(get_sort_bitwise());
+
publish_stats_to_osd();
scrubber.epoch_start = info.history.same_interval_since;
scrubber.active = true;
}
}
- ScrubMap for_meta_scrub;
+ ScrubMap for_meta_scrub(get_sort_bitwise());
if (scrubber.end.is_max() ||
scrubber.cleaned_meta_map.objects.empty()) {
scrubber.cleaned_meta_map.swap(for_meta_scrub);
// handle hobject_t upgrade
if (struct_v < 3) {
- map<hobject_t, object, hobject_t::BitwiseComparator> tmp;
+ map<hobject_t, object, hobject_t::ComparatorWithDefault> tmp;
tmp.swap(objects);
- for (map<hobject_t, object, hobject_t::BitwiseComparator>::iterator i = tmp.begin();
+ for (map<hobject_t, object, hobject_t::ComparatorWithDefault>::iterator i = tmp.begin();
i != tmp.end();
++i) {
hobject_t first(i->first);
f->dump_stream("valid_through") << valid_through;
f->dump_stream("incremental_since") << incr_since;
f->open_array_section("objects");
- for (map<hobject_t,object, hobject_t::BitwiseComparator>::const_iterator p = objects.begin(); p != objects.end(); ++p) {
+ for (map<hobject_t,object, hobject_t::ComparatorWithDefault>::const_iterator p = objects.begin(); p != objects.end(); ++p) {
f->open_object_section("object");
f->dump_string("name", p->first.oid.name);
f->dump_unsigned("hash", p->first.get_hash());
};
WRITE_CLASS_ENCODER(object)
- map<hobject_t,object, hobject_t::BitwiseComparator> objects;
+ bool bitwise; // ephemeral, not encoded
+ map<hobject_t,object, hobject_t::ComparatorWithDefault> objects;
eversion_t valid_through;
eversion_t incr_since;
+ ScrubMap() : bitwise(true) {}
+ ScrubMap(bool bitwise)
+ : bitwise(bitwise), objects(hobject_t::ComparatorWithDefault(bitwise)) {}
+
void merge_incr(const ScrubMap &l);
void insert(const ScrubMap &r) {
objects.insert(r.objects.begin(), r.objects.end());
void encode(bufferlist& bl) const;
void decode(bufferlist::iterator& bl, int64_t pool=-1);
void dump(Formatter *f) const;
+ void reset_bitwise(bool new_bitwise) {
+ if (bitwise == new_bitwise)
+ return;
+ map<hobject_t, object, hobject_t::ComparatorWithDefault> new_objects(
+ objects.begin(),
+ objects.end(),
+ hobject_t::ComparatorWithDefault(new_bitwise));
+ ::swap(new_objects, objects);
+ bitwise = new_bitwise;
+ }
static void generate_test_instances(list<ScrubMap*>& o);
};
WRITE_CLASS_ENCODER(ScrubMap::object)