From b927419dd40987728684cc773e85130d29d06c39 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Tue, 2 Apr 2019 15:58:39 -0700 Subject: [PATCH] osd/: clarify PeeringState deletion interfaces Signed-off-by: Samuel Just --- src/osd/PG.cc | 2 +- src/osd/PG.h | 4 ++-- src/osd/PeeringState.cc | 5 ++--- src/osd/PeeringState.h | 4 ++++ src/osd/PrimaryLogPG.cc | 2 ++ 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 02de6bcbd01..eb1e9e3466b 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -4753,7 +4753,7 @@ void PG::C_DeleteMore::complete(int r) { delete this; } -void PG::_delete_some(ObjectStore::Transaction *t) +void PG::do_delete_work(ObjectStore::Transaction *t) { dout(10) << __func__ << dendl; diff --git a/src/osd/PG.h b/src/osd/PG.h index 60939cd36c9..70a5f8a49aa 100644 --- a/src/osd/PG.h +++ b/src/osd/PG.h @@ -485,6 +485,8 @@ public: return std::make_unique(this, t); } + void do_delete_work(ObjectStore::Transaction *t) override; + void queue_peering_event(PGPeeringEventRef evt); void do_peering_event(PGPeeringEventRef evt, PeeringCtx *rcx); void queue_null(epoch_t msg_epoch, epoch_t query_epoch); @@ -549,8 +551,6 @@ public: virtual void agent_clear() = 0; virtual void agent_choose_mode_restart() = 0; - virtual void on_removal(ObjectStore::Transaction *t) = 0; - struct C_DeleteMore : public Context { PGRef pg; epoch_t epoch; diff --git a/src/osd/PeeringState.cc b/src/osd/PeeringState.cc index 00f1eadbfa3..4c3e88e5c0d 100644 --- a/src/osd/PeeringState.cc +++ b/src/osd/PeeringState.cc @@ -4424,15 +4424,14 @@ PeeringState::Deleting::Deleting(my_context ctx) DECLARE_LOCALS ps->deleting = true; ObjectStore::Transaction* t = context().get_cur_transaction(); - pg->on_removal(t); - t->register_on_commit(new PG::C_DeleteMore(pg, ps->get_osdmap_epoch())); + pl->on_removal(t); } boost::statechart::result PeeringState::Deleting::react( const DeleteSome& evt) { DECLARE_LOCALS - pg->_delete_some(context().get_cur_transaction()); + pl->do_delete_work(context().get_cur_transaction()); return discard_event(); } diff --git a/src/osd/PeeringState.h b/src/osd/PeeringState.h index 0c5bc133b75..02efbb0cea0 100644 --- a/src/osd/PeeringState.h +++ b/src/osd/PeeringState.h @@ -129,6 +129,10 @@ public: virtual void on_active_exit() = 0; + // PG deletion + virtual void on_removal(ObjectStore::Transaction *t) = 0; + virtual void do_delete_work(ObjectStore::Transaction *t) = 0; + // active map notifications virtual void on_active_actmap() = 0; virtual void on_active_advmap(const OSDMapRef &osdmap) = 0; diff --git a/src/osd/PrimaryLogPG.cc b/src/osd/PrimaryLogPG.cc index b2b9c914ea1..745ed654468 100644 --- a/src/osd/PrimaryLogPG.cc +++ b/src/osd/PrimaryLogPG.cc @@ -12069,6 +12069,8 @@ void PrimaryLogPG::on_removal(ObjectStore::Transaction *t) pg_log.roll_forward(&rollbacker); on_shutdown(); + + t->register_on_commit(new C_DeleteMore(this, get_osdmap_epoch())); } void PrimaryLogPG::clear_async_reads() -- 2.39.5