From: Joao Eduardo Luis Date: Wed, 27 Feb 2013 18:30:15 +0000 (+0000) Subject: mon: PaxosServices: don't ignore get_version(ver,bl) return value X-Git-Tag: v0.59~72^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=fac4959d1a3586855bc56646b643e25d60523143;p=ceph.git mon: PaxosServices: don't ignore get_version(ver,bl) return value get_version(version_t,bufferlist) can only return one of two values: -ENOENT iff the version doesn't exist zero iff it was successful Any other value is incorrect. Fixes: #4281 Signed-off-by: Joao Eduardo Luis --- diff --git a/src/mon/AuthMonitor.cc b/src/mon/AuthMonitor.cc index 382ef3192149..3e11c5e671c7 100644 --- a/src/mon/AuthMonitor.cc +++ b/src/mon/AuthMonitor.cc @@ -148,6 +148,7 @@ void AuthMonitor::update_from_paxos() bufferlist bl; int ret = get_version(keys_ver+1, bl); assert(ret == 0); + assert(bl.length()); // reset if we are moving to initial state. we will normally have // keys in here temporarily for bootstrapping that we need to diff --git a/src/mon/LogMonitor.cc b/src/mon/LogMonitor.cc index 1f5dafd0f019..ed933285ac09 100644 --- a/src/mon/LogMonitor.cc +++ b/src/mon/LogMonitor.cc @@ -491,8 +491,9 @@ void LogMonitor::_create_sub_incremental(MLog *mlog, int level, version_t sv) version_t summary_ver = summary.version; while (sv <= summary_ver) { bufferlist bl; - bool success = get_version(sv, bl); - assert(success); + int err = get_version(sv, bl); + assert(err == 0); + assert(bl.length()); bufferlist::iterator p = bl.begin(); __u8 v; ::decode(v,p); diff --git a/src/mon/MDSMonitor.cc b/src/mon/MDSMonitor.cc index 3482dfe48d04..ae9921e446cb 100644 --- a/src/mon/MDSMonitor.cc +++ b/src/mon/MDSMonitor.cc @@ -95,7 +95,9 @@ void MDSMonitor::update_from_paxos() // read and decode mdsmap_bl.clear(); - get_version(version, mdsmap_bl); + int err = get_version(version, mdsmap_bl); + assert(err == 0); + assert(mdsmap_bl.length() > 0); dout(10) << __func__ << " got " << version << dendl; mdsmap.decode(mdsmap_bl); @@ -565,11 +567,13 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) MDSMap *p = &mdsmap; if (epoch) { bufferlist b; - get_version(epoch, b); - if (!b.length()) { + int err = get_version(epoch, b); + if (err == -ENOENT) { p = 0; r = -ENOENT; } else { + assert(err == 0); + assert(b.length()); p = new MDSMap; p->decode(b); } @@ -607,10 +611,12 @@ bool MDSMonitor::preprocess_command(MMonCommand *m) } epoch_t e = l; bufferlist b; - get_version(e, b); - if (!b.length()) { + int err = get_version(e, b); + if (err == -ENOENT) { r = -ENOENT; } else { + assert(r == 0); + assert(b.length()); MDSMap mm; mm.decode(b); mm.encode(rdata, m->get_connection()->get_features()); diff --git a/src/mon/MonmapMonitor.cc b/src/mon/MonmapMonitor.cc index 392d724f71cb..505327bd24d2 100644 --- a/src/mon/MonmapMonitor.cc +++ b/src/mon/MonmapMonitor.cc @@ -99,6 +99,7 @@ void MonmapMonitor::update_from_paxos() monmap_bl.clear(); int ret = get_version(version, monmap_bl); assert(ret == 0); + assert(monmap_bl.length()); dout(10) << "update_from_paxos got " << version << dendl; mon->monmap->decode(monmap_bl); diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 965ec58d9ca1..84cf4cbd791d 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1361,13 +1361,16 @@ MOSDMap *OSDMonitor::build_incremental(epoch_t from, epoch_t to) for (epoch_t e = to; e >= from && e > 0; e--) { bufferlist bl; - get_version(e, bl); - if (bl.length() > 0) { + int err = get_version(e, bl); + if (err == 0) { + assert(bl.length()); // if (get_version(e, bl) > 0) { dout(20) << "build_incremental inc " << e << " " << bl.length() << " bytes" << dendl; m->incremental_maps[e] = bl; } else { + assert(err == -ENOENT); + assert(!bl.length()); get_version("full", e, bl); if (bl.length() > 0) { //else if (get_version("full", e, bl) > 0) { @@ -1402,7 +1405,8 @@ void OSDMonitor::send_incremental(PaxosServiceMessage *req, epoch_t first) if (first < get_first_committed()) { first = get_first_committed(); bufferlist bl; - get_version("full", first, bl); + int err = get_version("full", first, bl); + assert(err == 0); assert(bl.length()); dout(20) << "send_incremental starting with base full " @@ -1433,9 +1437,10 @@ void OSDMonitor::send_incremental(epoch_t first, entity_inst_t& dest, bool oneti if (first < get_first_committed()) { first = get_first_committed(); bufferlist bl; - get_version("full", first, bl); + int err = get_version("full", first, bl); + assert(err == 0); assert(bl.length()); - + dout(20) << "send_incremental starting with base full " << first << " " << bl.length() << " bytes" << dendl; @@ -1804,11 +1809,13 @@ bool OSDMonitor::preprocess_command(MMonCommand *m) OSDMap *p = &osdmap; if (epoch) { bufferlist b; - get_version("full", epoch, b); - if (!b.length()) { + int err = get_version("full", epoch, b); + if (err == -ENOENT) { p = 0; r = -ENOENT; } else { + assert(err == 0); + assert(b.length()); p = new OSDMap; p->decode(b); } diff --git a/src/mon/PGMonitor.cc b/src/mon/PGMonitor.cc index c793092bb623..8245ed6ae6ef 100644 --- a/src/mon/PGMonitor.cc +++ b/src/mon/PGMonitor.cc @@ -601,7 +601,8 @@ void PGMonitor::check_osd_map(epoch_t epoch) e++) { dout(10) << "check_osd_map applying osdmap e" << e << " to pg_map" << dendl; bufferlist bl; - mon->osdmon()->get_version(e, bl); + int err = mon->osdmon()->get_version(e, bl); + assert(err == 0); assert(bl.length()); OSDMap::Incremental inc(bl);