From 650cb7de9a811ae9023058b6edcd35b7a6ca22c4 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Wed, 13 Mar 2019 12:44:18 +0800 Subject: [PATCH] crimson/osd/pg: wait until pg is active hold i/o request until pg is active Signed-off-by: Kefu Chai --- src/crimson/osd/pg.cc | 19 +++++++++++++++++-- src/crimson/osd/pg.h | 3 +++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/crimson/osd/pg.cc b/src/crimson/osd/pg.cc index d43ac29d6f9..2997305acbc 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 ae1aa70c49f..06a186a865c 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; }; -- 2.39.5