}
}
-ghobject_t PG::do_delete_work(ceph::os::Transaction &t,
- ghobject_t _next)
+std::pair<ghobject_t, bool>
+PG::do_delete_work(ceph::os::Transaction &t, ghobject_t _next)
{
// TODO
shard_services.dec_pg_num();
- return _next;
+ return {_next, false};
}
void PG::scrub_requested(scrub_level_t scrub_level, scrub_type_t scrub_type)
void on_removal(ceph::os::Transaction &t) final {
// TODO
}
- ghobject_t do_delete_work(ceph::os::Transaction &t,
- ghobject_t _next) final;
+ std::pair<ghobject_t, bool>
+ do_delete_work(ceph::os::Transaction &t, ghobject_t _next) final;
// merge/split not ready
void clear_ready_to_merge() final {}
delete this;
}
-ghobject_t PG::do_delete_work(ObjectStore::Transaction &t,
- ghobject_t _next)
+std::pair<ghobject_t, bool> PG::do_delete_work(
+ ObjectStore::Transaction &t,
+ ghobject_t _next)
{
dout(10) << __func__ << dendl;
osd->sleep_timer.add_event_at(delete_schedule_time,
delete_requeue_callback);
dout(20) << __func__ << " Delete scheduled at " << delete_schedule_time << dendl;
- return _next;
+ return std::make_pair(_next, true);
}
}
t.remove(coll, oid);
++num;
}
+ bool running = true;
if (num) {
dout(20) << __func__ << " deleting " << num << " objects" << dendl;
Context *fin = new C_DeleteMore(this, get_osdmap_epoch());
// exit() methods don't run when that happens.
osd->local_reserver.cancel_reservation(info.pgid);
- osd->logger->dec(l_osd_pg_removing);
+ running = false;
}
}
- return next;
+ return {next, running};
}
int PG::pg_stat_adjust(osd_stat_t *ns)
return std::make_unique<PG::PGLogEntryHandler>(this, &t);
}
- ghobject_t do_delete_work(ObjectStore::Transaction &t,
+ std::pair<ghobject_t, bool> do_delete_work(ObjectStore::Transaction &t,
ghobject_t _next) override;
void clear_ready_to_merge() override;
: my_base(ctx),
NamedState(context< PeeringMachine >().state_history, "Started/ToDelete/Deleting")
{
- start = ceph::mono_clock::now();
-
context< PeeringMachine >().log_enter(state_name);
DECLARE_LOCALS;
const DeleteSome& evt)
{
DECLARE_LOCALS;
- next = pl->do_delete_work(context<PeeringMachine>().get_cur_transaction(),
+ std::pair<ghobject_t, bool> p;
+ p = pl->do_delete_work(context<PeeringMachine>().get_cur_transaction(),
next);
- return discard_event();
+ next = p.first;
+ return p.second ? discard_event() : terminate();
}
void PeeringState::Deleting::exit()
DECLARE_LOCALS;
ps->deleting = false;
pl->cancel_local_background_io_reservation();
- psdout(20) << "Deleting::" << __func__ << this <<" finished in "
- << ceph::mono_clock::now() - start
- << dendl;
}
/*--------GetInfo---------*/
/// Notification of removal complete, t must be populated to complete removal
virtual void on_removal(ObjectStore::Transaction &t) = 0;
/// Perform incremental removal work
- virtual ghobject_t do_delete_work(ObjectStore::Transaction &t,
- ghobject_t _next) = 0;
+ virtual std::pair<ghobject_t, bool> do_delete_work(
+ ObjectStore::Transaction &t, ghobject_t _next) = 0;
// ======================= PG Merge =========================
virtual void clear_ready_to_merge() = 0;
boost::statechart::transition<DeleteInterrupted, WaitDeleteReserved>
> reactions;
ghobject_t next;
- ceph::mono_clock::time_point start;
explicit Deleting(my_context ctx);
boost::statechart::result react(const DeleteSome &evt);
void exit();