From: Kefu Chai Date: Thu, 19 Sep 2019 09:52:35 +0000 (+0800) Subject: crimson/osd: evict object state in foreground X-Git-Tag: v15.1.0~1487^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=1a8841cfe337d655c557bdbf27db250802f4b2d6;p=ceph.git crimson/osd: evict object state in foreground when doing error handling, we need to make sure the stale object state is evicted before we return. Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index e63b2e6fbcf..d9814108b79 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -384,13 +384,13 @@ seastar::future> PG::do_osd_ops(Ref m) }).handle_exception_type([=,&oid](const ceph::osd::error& e) { logger().debug("got ceph::osd::error while handling object {}: {} ({})", oid, e.code(), e.what()); - - backend->evict_object_state(oid); - auto reply = make_message( - m.get(), -e.code().value(), get_osdmap_epoch(), 0, false); - reply->set_enoent_reply_versions(peering_state.get_info().last_update, - peering_state.get_info().last_user_version); - return seastar::make_ready_future>(std::move(reply)); + return backend->evict_object_state(oid).then([=] { + auto reply = make_message( + m.get(), -e.code().value(), get_osdmap_epoch(), 0, false); + reply->set_enoent_reply_versions(peering_state.get_info().last_update, + peering_state.get_info().last_user_version); + return seastar::make_ready_future>(std::move(reply)); + }); }); }