: osd(osd),
conn(conn),
m(m),
- sequencer(get_osd_priv(conn.get()).op_sequencer[m->get_spg()]),
- prev_op_id(sequencer.get_last_issued())
+ sequencer(get_osd_priv(conn.get()).op_sequencer[m->get_spg()])
{}
ClientRequest::~ClientRequest()
[](auto& op) { return ceph_osd_op_type_pg(op.op.op); });
}
+void ClientRequest::may_set_prev_op()
+{
+ // set prev_op_id if it's not set yet
+ if (__builtin_expect(prev_op_id == 0, true)) {
+ prev_op_id = sequencer.get_last_issued();
+ }
+}
+
seastar::future<> ClientRequest::start()
{
logger().debug("{}: start", *this);
return interruptor::with_interruption([this, pgref]() mutable {
epoch_t same_interval_since = pgref->get_interval_start_epoch();
logger().debug("{} same_interval_since: {}", *this, same_interval_since);
+ may_set_prev_op();
return sequencer.start_op(
handle, prev_op_id, get_id(),
interruptor::wrap_function(
PGPipeline &pp(PG &pg);
OpSequencer& sequencer;
- const uint64_t prev_op_id;
+ uint64_t prev_op_id = 0;
template <typename Errorator>
using interruptible_errorator =
Errorator>;
private:
bool is_misdirected(const PG& pg) const;
+ void may_set_prev_op();
};
}