Hi all, I have another question about the function PG::Missing::rm. I wonder if it should be fixed as follows. diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 4ce3336..29062c8 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -3600,7 +3600,7 @@ void PG::Missing::add(const sobject_t& oid, eversion_t need, eversion_t have) void PG::Missing::rm(const sobject_t& oid, eversion_t when) { - if (missing.count(oid) && missing[oid].need < when) { + if (missing.count(oid) && missing[oid].need <= when) { rmissing.erase(missing[oid].need); missing.erase(oid); } I am not quite sure what the argument "when" means. However, in PG::merge_old_entry, it seems that the object will be removed from filestore but left in the missing list due to the if condition in missing.rm. As in the following code, although missing.rm is called, but it does not "really" remove the obj from the missing list since oe.version is equal to missing[oid].need. if (oe.is_delete()) { dout(20) << "merge_old_entry had " << oe << " new dne : ok" << dendl; } else { dout(20) << "merge_old_entry had " << oe << " new dne : deleting" << dendl; t.remove(coll, oe.soid); missing.rm(oe.soid, oe.version); } -- Henry Chang -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html