From b7de0fdbcdceaeeb8a19ae8aceed9c049403b8ef Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Fri, 21 Feb 2014 09:34:15 -0800 Subject: [PATCH] ECTransaction: require hash_infos for deleted objects Otherwise, an append preceded by a delete may not see the correct HashInfo state since it won't have been cached until the delete is applied. Fixes: #7506 Signed-off-by: Samuel Just --- src/osd/ECTransaction.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/osd/ECTransaction.cc b/src/osd/ECTransaction.cc index 7e345f380ddc..3e725f6d7751 100644 --- a/src/osd/ECTransaction.cc +++ b/src/osd/ECTransaction.cc @@ -38,8 +38,12 @@ struct AppendObjectsGenerator: public boost::static_visitor { out->insert(op.source); out->insert(op.destination); } - void operator()(const ECTransaction::StashOp &op) {} - void operator()(const ECTransaction::RemoveOp &op) {} + void operator()(const ECTransaction::StashOp &op) { + out->insert(op.oid); + } + void operator()(const ECTransaction::RemoveOp &op) { + out->insert(op.oid); + } void operator()(const ECTransaction::SetAttrsOp &op) {} void operator()(const ECTransaction::RmAttrOp &op) {} void operator()(const ECTransaction::NoOp &op) {} @@ -189,8 +193,8 @@ struct TransGenerator : public boost::static_visitor { } } void operator()(const ECTransaction::StashOp &op) { - if (hash_infos.count(op.oid)) - hash_infos[op.oid]->clear(); + assert(hash_infos.count(op.oid)); + hash_infos[op.oid]->clear(); for (map::iterator i = trans->begin(); i != trans->end(); ++i) { @@ -203,8 +207,8 @@ struct TransGenerator : public boost::static_visitor { } } void operator()(const ECTransaction::RemoveOp &op) { - if (hash_infos.count(op.oid)) - hash_infos[op.oid]->clear(); + assert(hash_infos.count(op.oid)); + hash_infos[op.oid]->clear(); for (map::iterator i = trans->begin(); i != trans->end(); ++i) { -- 2.47.3