From 7e12e9a7b5c3d3c41c3f0cb0d0453826d4b164c6 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Zarzy=C5=84ski?= Date: Mon, 11 Apr 2022 16:46:07 +0200 Subject: [PATCH] crimson/osd: track start and completion of ClientRequest MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Radosław Zarzyński --- src/crimson/osd/osd_operation.h | 3 +++ src/crimson/osd/osd_operation_external_tracking.h | 12 ++++++++++-- src/crimson/osd/osd_operations/client_request.cc | 3 +++ src/crimson/osd/osd_operations/client_request.h | 7 ++++++- 4 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/crimson/osd/osd_operation.h b/src/crimson/osd/osd_operation.h index 8a0ee05856df6..6f6c8b04f1449 100644 --- a/src/crimson/osd/osd_operation.h +++ b/src/crimson/osd/osd_operation.h @@ -148,6 +148,9 @@ class TrackableOperationT : public OperationT { protected: using OperationT::OperationT; + struct StartEvent : TimeEvent {}; + struct CompletionEvent : TimeEvent {}; + template void track_event(Args&&... args) { // the idea is to have a visitor-like interface that allows to double diff --git a/src/crimson/osd/osd_operation_external_tracking.h b/src/crimson/osd/osd_operation_external_tracking.h index 9a2f88b783db9..eaccd501a09ce 100644 --- a/src/crimson/osd/osd_operation_external_tracking.h +++ b/src/crimson/osd/osd_operation_external_tracking.h @@ -14,9 +14,14 @@ namespace crimson::osd { // Just the boilerplate currently. Implementing struct LttngBackend - : ClientRequest::ConnectionPipeline::AwaitMap::BlockingEvent::Backend, - OSD_OSDMapGate::OSDMapBlocker::BlockingEvent::Backend + : ClientRequest::StartEvent::Backend, + ClientRequest::ConnectionPipeline::AwaitMap::BlockingEvent::Backend, + OSD_OSDMapGate::OSDMapBlocker::BlockingEvent::Backend, + ClientRequest::CompletionEvent::Backend { + void handle(ClientRequest::StartEvent&, + const Operation&) override {} + void handle(ClientRequest::ConnectionPipeline::AwaitMap::BlockingEvent& ev, const Operation& op, const ClientRequest::ConnectionPipeline::AwaitMap& blocker) override { @@ -26,6 +31,9 @@ struct LttngBackend const Operation&, const OSD_OSDMapGate::OSDMapBlocker&) override { } + + void handle(ClientRequest::CompletionEvent&, + const Operation&) override {} }; } // namespace crimson::osd diff --git a/src/crimson/osd/osd_operations/client_request.cc b/src/crimson/osd/osd_operations/client_request.cc index 532a1567de7d3..626b82c48406a 100644 --- a/src/crimson/osd/osd_operations/client_request.cc +++ b/src/crimson/osd/osd_operations/client_request.cc @@ -78,6 +78,7 @@ seastar::future<> ClientRequest::start() { logger().debug("{}: start", *this); + track_event(); return seastar::repeat([this, opref=IRef{this}]() mutable { logger().debug("{}: in repeat", *this); return enter_stage(cp().await_map).then([this]() { @@ -146,6 +147,8 @@ seastar::future<> ClientRequest::start() } }, pgref); }); + }).then([this] { + track_event(); }); } diff --git a/src/crimson/osd/osd_operations/client_request.h b/src/crimson/osd/osd_operations/client_request.h index c776c89d4c00a..f0fbf4f88aa77 100644 --- a/src/crimson/osd/osd_operations/client_request.h +++ b/src/crimson/osd/osd_operations/client_request.h @@ -106,9 +106,14 @@ private: public: std::tuple< + StartEvent, ConnectionPipeline::AwaitMap::BlockingEvent, - OSD_OSDMapGate::OSDMapBlocker::BlockingEvent + OSD_OSDMapGate::OSDMapBlocker::BlockingEvent, + CompletionEvent > tracking_events; + + friend class LttngBackend; + friend class HistoricBackend; }; } -- 2.39.5