From: Kefu Chai Date: Wed, 13 Mar 2019 04:44:18 +0000 (+0800) Subject: crimson/osd/pg: wait until pg is active X-Git-Tag: v15.0.0~97^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=650cb7de9a811ae9023058b6edcd35b7a6ca22c4;p=ceph.git crimson/osd/pg: wait until pg is active hold i/o request until pg is active Signed-off-by: Kefu Chai --- diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index d43ac29d6f98..2997305acbcf 100644 --- a/src/crimson/osd/pg.cc +++ b/src/crimson/osd/pg.cc @@ -944,9 +944,24 @@ seastar::future<> PG::share_pg_info() }); } +seastar::future<> PG::wait_for_active() +{ + logger().info("wait_for_active: {}", pg_state_string(info.stats.state)); + if (test_state(PG_STATE_ACTIVE)) { + return seastar::now(); + } else { + if (!active_promise) { + active_promise = seastar::shared_promise<>(); + } + return active_promise->get_shared_future(); + } +} + seastar::future<> PG::handle_op(ceph::net::ConnectionRef conn, Ref m) { - // todo - return seastar::now(); + return wait_for_active().then([conn, m, this] { + // todo + return seastar::now(); + }); } diff --git a/src/crimson/osd/pg.h b/src/crimson/osd/pg.h index ae1aa70c49fe..06a186a865c1 100644 --- a/src/crimson/osd/pg.h +++ b/src/crimson/osd/pg.h @@ -151,6 +151,9 @@ private: pg_shard_set_t acting_recovery_backfill; std::vector want_acting; + seastar::future<> wait_for_active(); + std::optional> active_promise; + cached_map_t osdmap; ceph::net::Messenger& msgr; };