[Note: ceph-devel cc'ed] Hi Sam, While trying to create the conditions for the following to happen in PGLog::rewind_divergent_log: if (p == log.log.begin()) { // yikes, the whole thing is divergent! divergent.swap(log.log); break; } https://github.com/ceph/ceph/blob/master/src/osd/PGLog.cc#L355 I created this ( matching the drawing attached ), and the test case works. { pg_log_entry_t e; info.log_tail = log.tail = eversion_t(1, 1); newhead = eversion_t(1, 3); e.version = divergent_version = eversion_t(1, 5); e.soid.hash = 0x9; divergent_object = e.soid; e.op = pg_log_entry_t::DELETE; e.prior_version = prior_version = eversion_t(0, 2); log.log.push_back(e); log.head = e.version; } https://github.com/dachary/ceph/commit/d592d7f10968c56139cb470a4111ddfbe08a4030#L0R136 But it does not look like a situation that is actually going to happen. I feel something is missing and a hint would be much appreciated :-) Cheers -- Loïc Dachary, Artisan Logiciel Libre All that is necessary for the triumph of evil is that good people do nothing.
Attachment:
a.png
Description: PNG image
Attachment:
signature.asc
Description: OpenPGP digital signature