]> git.proxmox.com Git - ceph.git/blob - ceph/src/crimson/osd/osd_operations/internal_client_request.h
8eed12e050e19fa6b212f1859c55bdbb43b4fe0a
[ceph.git] / ceph / src / crimson / osd / osd_operations / internal_client_request.h
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
3
4 #pragma once
5
6 #include "crimson/common/type_helpers.h"
7 #include "crimson/osd/osd_operation.h"
8 #include "crimson/osd/osd_operations/client_request_common.h"
9 #include "crimson/osd/osd_operations/common/pg_pipeline.h"
10 #include "crimson/osd/pg.h"
11 #include "crimson/osd/pg_activation_blocker.h"
12
13 namespace crimson::osd {
14
15 class InternalClientRequest : public PhasedOperationT<InternalClientRequest>,
16 private CommonClientRequest {
17 public:
18 explicit InternalClientRequest(Ref<PG> pg);
19 ~InternalClientRequest();
20
21 // imposed by `ShardService::start_operation<T>(...)`.
22 seastar::future<> start();
23
24 protected:
25 virtual const hobject_t& get_target_oid() const = 0;
26 virtual PG::do_osd_ops_params_t get_do_osd_ops_params() const = 0;
27 virtual std::vector<OSDOp> create_osd_ops() = 0;
28
29 const PG& get_pg() const {
30 return *pg;
31 }
32
33 private:
34 friend OperationT<InternalClientRequest>;
35
36 static constexpr OperationTypeCode type =
37 OperationTypeCode::internal_client_request;
38
39 void print(std::ostream &) const final;
40 void dump_detail(Formatter *f) const final;
41
42 CommonPGPipeline& client_pp();
43
44 seastar::future<> do_process();
45
46 Ref<PG> pg;
47 OpInfo op_info;
48 PipelineHandle handle;
49
50 public:
51 PipelineHandle& get_handle() { return handle; }
52
53 std::tuple<
54 StartEvent,
55 CommonPGPipeline::WaitForActive::BlockingEvent,
56 PGActivationBlocker::BlockingEvent,
57 CommonPGPipeline::RecoverMissing::BlockingEvent,
58 CommonPGPipeline::GetOBC::BlockingEvent,
59 CommonPGPipeline::Process::BlockingEvent,
60 CompletionEvent
61 > tracking_events;
62 };
63
64 } // namespace crimson::osd
65
66 #if FMT_VERSION >= 90000
67 template <> struct fmt::formatter<crimson::osd::InternalClientRequest> : fmt::ostream_formatter {};
68 #endif