From: Sage Weil Date: Thu, 13 Oct 2011 19:53:59 +0000 (-0700) Subject: osd: factor out recover_primary_got() helper X-Git-Tag: v0.38~57^2~30^2~4^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=51158820ba3ebde1fa984bb7a86dd73fd2362631;p=ceph.git osd: factor out recover_primary_got() helper This handles the missing set and lsat_complete adjustment when we recover an object on the primary. Signed-off-by: Sage Weil --- diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index a027394c8207..7ff461fe3442 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -4088,6 +4088,28 @@ void ReplicatedPG::_applied_pushed_object(ObjectStore::Transaction *t, ObjectCon delete t; } +void ReplicatedPG::recover_primary_got(hobject_t oid, eversion_t v) +{ + if (missing.is_missing(oid, v)) { + dout(10) << "got missing " << oid << " v " << v << dendl; + missing.got(oid, v); + if (is_primary()) + missing_loc.erase(oid); + + // raise last_complete? + while (log.complete_to != log.log.end()) { + if (missing.missing.count(log.complete_to->soid)) + break; + if (info.last_complete < log.complete_to->version) + info.last_complete = log.complete_to->version; + log.complete_to++; + } + dout(10) << "last_complete now " << info.last_complete << dendl; + if (log.complete_to != log.log.end()) + dout(10) << " log.complete_to = " << log.complete_to->version << dendl; + } +} + /** op_push * NOTE: called from opqueue. */ @@ -4297,29 +4319,11 @@ void ReplicatedPG::sub_op_push(MOSDSubOp *op) } } - if (missing.is_missing(soid, v)) { - dout(10) << "got missing " << soid << " v " << v << dendl; - missing.got(soid, v); - if (is_primary()) - missing_loc.erase(soid); - - // raise last_complete? - while (log.complete_to != log.log.end()) { - if (missing.missing.count(log.complete_to->soid)) - break; - if (info.last_complete < log.complete_to->version) - info.last_complete = log.complete_to->version; - log.complete_to++; - } - dout(10) << "last_complete now " << info.last_complete << dendl; - if (log.complete_to != log.log.end()) - dout(10) << " log.complete_to = " << log.complete_to->version << dendl; - } + recover_primary_got(soid, v); // update pg write_info(*t); - // track ObjectContext if (is_primary()) { dout(10) << " setting up obc for " << soid << dendl; diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index ffdf41415203..ac5268c994a2 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -701,6 +701,7 @@ protected: void sub_op_modify_reply(MOSDSubOpReply *reply); void _applied_pushed_object(ObjectStore::Transaction *t, ObjectContext *obc); void _committed_pushed_object(MOSDSubOp *op, epoch_t same_since, eversion_t lc); + void recover_primary_got(hobject_t oid, eversion_t v); void sub_op_push(MOSDSubOp *op); void _failed_push(MOSDSubOp *op); void sub_op_push_reply(MOSDSubOpReply *reply);