/************ MAPS ****************/
+OSDMonitor::OSDMonitor(Monitor *mn, Paxos *p)
+ : PaxosService(mn, p)
+{
+ // we need to trim this too
+ p->add_extra_state_dir("osdmap_full");
+}
void OSDMonitor::create_initial(bufferlist& bl)
epoch_t floor = mon->pgmon()->pg_map.calc_min_last_epoch_clean();
dout(10) << " min_last_epoch_clean " << floor << dendl;
unsigned min = 100;
- if (floor + min < paxos->get_version()) {
- epoch_t of = paxos->get_first_committed();
+ if (floor + min < paxos->get_version())
paxos->trim_to(floor);
- while (of < floor) {
- mon->store->erase_sn("osdmap_full", of);
- of++;
- }
- }
}
}
bool prepare_remove_snaps(class MRemoveSnaps *m);
public:
- OSDMonitor(Monitor *mn, Paxos *p) :
- PaxosService(mn, p) { }
+ OSDMonitor(Monitor *mn, Paxos *p);
void tick(); // check state, take actions
first_committed < last_consumed) {
dout(10) << "trim " << first_committed << dendl;
mon->store->erase_sn(machine_name, first_committed);
+ for (list<string>::iterator p = extra_state_dirs.begin();
+ p != extra_state_dirs.end();
+ ++p)
+ mon->store->erase_sn(p->c_str(), first_committed);
first_committed++;
}
mon->store->put_int(first_committed, machine_name, "first_committed");
friend class PaxosService;
friend class PaxosObserver;
-
+ list<std::string> extra_state_dirs;
// LEADER+PEON
void share_state(MMonPaxos *m, version_t first_committed, version_t last_committed);
void store_state(MMonPaxos *m);
+ void add_extra_state_dir(string s) {
+ extra_state_dirs.push_back(s);
+ }
// -- service interface --
void wait_for_active(Context *c) {