From 64976b079502cc22bbea7fef55a940f7d5a01017 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 5 Nov 2009 22:25:30 -0800 Subject: [PATCH] mon: make initial monmap epoch match paxos version --- src/mon/Monitor.cc | 18 ++++++++++-------- src/mon/MonmapMonitor.cc | 9 +++++---- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index c9e9b819cecac..fda41857bdbef 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -68,6 +68,7 @@ static ostream& _prefix(Monitor *mon) { (mon->is_peon() ? (const char*)"(peon)" : (const char*)"(?\?)"))) + << " e" << mon->monmap->get_epoch() << " "; } @@ -798,14 +799,6 @@ int Monitor::mkfs(bufferlist& osdmapbl) bufferlist monmapbl; monmap->encode(monmapbl); - store->put_bl_sn(monmapbl, "monmap", monmap->epoch); - - // latest, too.. but make this conform to paxos stash latest format - bufferlist latest; - version_t v = monmap->get_epoch(); - ::encode(v, latest); - ::encode(monmapbl, latest); - store->put_bl_ss(latest, "monmap", "latest"); for (vector::iterator p = paxos_service.begin(); p != paxos_service.end(); p++) { PaxosService *svc = *p; @@ -815,6 +808,8 @@ int Monitor::mkfs(bufferlist& osdmapbl) svc->create_pending(); if (svc->paxos->machine_id == PAXOS_OSDMAP) svc->create_initial(osdmapbl); + else if (svc->paxos->machine_id == PAXOS_MONMAP) + svc->create_initial(monmapbl); else svc->create_initial(bl); // commit to paxos @@ -823,6 +818,13 @@ int Monitor::mkfs(bufferlist& osdmapbl) store->put_int(1, svc->get_machine_name(), "last_committed"); } + // stash latest monmap + bufferlist latest; + version_t v = monmap->get_epoch(); + ::encode(v, latest); + ::encode(monmapbl, latest); + store->put_bl_ss(latest, "monmap", "latest"); + return 0; } diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index 7f4fb20d74ebe..422ef67b3d3ef 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -29,13 +29,13 @@ static ostream& _prefix(Monitor *mon) { return *_dout << dbeginl << "mon" << mon->whoami << (mon->is_starting() ? (const char*)"(starting)":(mon->is_leader() ? (const char*)"(leader)":(mon->is_peon() ? (const char*)"(peon)":(const char*)"(?\?)"))) - << ".client v" << mon->monmap->epoch << " "; + << ".monmap v" << mon->monmap->epoch << " "; } void MonmapMonitor::create_initial(bufferlist& bl) { - /* Since the MonMap belongs to the Monitor and is initialized - by it, we don't need to do anything here. */ + pending_map.decode(bl); + dout(10) << "create_initial was fed epoch " << pending_map.epoch << dendl; } bool MonmapMonitor::update_from_paxos() @@ -73,7 +73,8 @@ void MonmapMonitor::encode_pending(bufferlist& bl) { dout(10) << "encode_pending epoch " << pending_map.epoch << dendl; - assert(mon->monmap->epoch + 1 == pending_map.epoch); + assert(mon->monmap->epoch + 1 == pending_map.epoch || + pending_map.epoch == 1); // special case mkfs! pending_map.encode(bl); } -- 2.39.5