#include "crimson/net/Connection.h"
#include "crimson/osd/osd_operation.h"
+#include "crimson/osd/osd_operation_sequencer.h"
#include "crimson/osd/osd_operations/client_request.h"
#include "crimson/osd/osd_operations/peering_event.h"
#include "crimson/osd/osd_operations/replicated_request.h"
#pragma once
-#include "crimson/osd/osd_operation_sequencer.h"
+#include "crimson/common/operation.h"
#include "crimson/osd/pg_interval_interrupt_condition.h"
#include "crimson/osd/scheduler/scheduler.h"
+#include "osd/osd_types.h"
namespace crimson::osd {
#include <fmt/format.h>
#include <seastar/core/condition-variable.hh>
#include "crimson/common/operation.h"
-#include "osd/osd_types.h"
namespace crimson::osd {
#include "crimson/osd/pg.h"
#include "crimson/osd/osd.h"
#include "common/Formatter.h"
+#include "crimson/osd/osd_operation_sequencer.h"
#include "crimson/osd/osd_operations/client_request.h"
#include "crimson/osd/osd_connection_priv.h"
}
}
+template <typename FuncT>
+ClientRequest::interruptible_future<> ClientRequest::with_sequencer(FuncT&& func)
+{
+ may_set_prev_op();
+ return sequencer.start_op(*this, handle, std::forward<FuncT>(func))
+ .then_interruptible([this] {
+ sequencer.finish_op(*this);
+ });
+}
+
seastar::future<> ClientRequest::start()
{
logger().debug("{}: start", *this);
private:
template <typename FuncT>
- interruptible_future<> with_sequencer(FuncT&& func) {
- may_set_prev_op();
- return sequencer.start_op(*this, handle, std::forward<FuncT>(func))
- .then_interruptible([this] {
- sequencer.finish_op(*this);
- });
- }
+ interruptible_future<> with_sequencer(FuncT&& func);
interruptible_future<> do_process(
Ref<PG>& pg,
crimson::osd::ObjectContextRef obc);
ConnectionPipeline &cp();
PGPipeline &pp(PG &pg);
- OpSequencer& sequencer;
+ class OpSequencer& sequencer;
std::optional<uint64_t> prev_op_id;
template <typename Errorator>