]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
crimson/osd: ShardServices::send_pg_temp() returns future
authorKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 10:11:31 +0000 (18:11 +0800)
committerKefu Chai <kchai@redhat.com>
Thu, 19 Sep 2019 10:23:20 +0000 (18:23 +0800)
it should not run in background unless necessary.

please note, we don't have a caller of this method yet.

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/shard_services.cc
src/crimson/osd/shard_services.h

index 84d8277d41e1535a3400616884b4e93b7c528012..e41b77ac27a0c198c12d7678a10d6d628abb9b3f 100644 (file)
@@ -153,10 +153,10 @@ std::ostream& operator<<(
   return out;
 }
 
-void ShardServices::send_pg_temp()
+seastar::future<> ShardServices::send_pg_temp()
 {
   if (pg_temp_wanted.empty())
-    return;
+    return seastar::now();
   logger().debug("{}: {}", __func__, pg_temp_wanted);
   boost::intrusive_ptr<MOSDPGTemp> ms[2] = {nullptr, nullptr};
   for (auto& [pgid, pg_temp] : pg_temp_wanted) {
@@ -167,12 +167,16 @@ void ShardServices::send_pg_temp()
     }
     m->pg_temp.emplace(pgid, pg_temp.acting);
   }
-  for (auto &m : ms) {
-    if (m) {
-      monc.send_message(m);
-    }
-  }
-  _sent_pg_temp();
+  return seastar::parallel_for_each(std::begin(ms), std::end(ms),
+    [this](auto m) {
+      if (m) {
+       return monc.send_message(m);
+      } else {
+       return seastar::now();
+      }
+    }).then([this] {
+      _sent_pg_temp();
+    });
 }
 
 void ShardServices::update_map(cached_map_t new_osdmap)
index 6dbcde01ff70b2937c9ae27d28c3d6e68230ffb8..d9a2112b6b23c0ef4f33eabe8ed21cdde51306cb 100644 (file)
@@ -132,7 +132,7 @@ public:
                          bool forced = false);
   void remove_want_pg_temp(pg_t pgid);
   void requeue_pg_temp();
-  void send_pg_temp();
+  seastar::future<> send_pg_temp();
 
   // Shard-local OSDMap
 private: