: my_base(ctx),
NamedState(context< SnapTrimmer >().pg->cct, "Trimming/AwaitAsyncWork")
{
+ auto *pg = context< SnapTrimmer >().pg;
context< SnapTrimmer >().log_enter(state_name);
- context< SnapTrimmer >().pg->osd->queue_for_snap_trim(
- context< SnapTrimmer >().pg);
+ context< SnapTrimmer >().pg->osd->queue_for_snap_trim(pg);
+ pg->state_set(PG_STATE_SNAPTRIM);
+ pg->publish_stats_to_osd();
}
boost::statechart::result PrimaryLogPG::AwaitAsyncWork::react(const DoSnapWork&)
context< SnapTrimmer >().log_exit(state_name, enter_time);
auto *pg = context< SnapTrimmer >().pg;
pg->osd->snap_reserver.cancel_reservation(pg->get_pgid());
+ pg->state_clear(PG_STATE_SNAPTRIM);
+ pg->publish_stats_to_osd();
}
boost::statechart::result react(const KickTrim&) {
return discard_event();
pg->get_pgid(),
pending,
0);
+ pg->state_set(PG_STATE_SNAPTRIM_WAIT);
+ pg->publish_stats_to_osd();
}
boost::statechart::result react(const SnapTrimReserved&);
void exit() {
if (pending)
pending->cancel();
pending = nullptr;
+ auto *pg = context< SnapTrimmer >().pg;
+ pg->state_clear(PG_STATE_SNAPTRIM_WAIT);
+ pg->publish_stats_to_osd();
}
boost::statechart::result react(const KickTrim&) {
return discard_event();
oss << "incomplete+";
if (state & PG_STATE_PEERED)
oss << "peered+";
+ if (state & PG_STATE_SNAPTRIM)
+ oss << "snaptrim+";
+ if (state & PG_STATE_SNAPTRIM_WAIT)
+ oss << "snaptrim_wait+";
string ret(oss.str());
if (ret.length() > 0)
ret.resize(ret.length() - 1);
type = PG_STATE_ACTIVATING;
else if (state == "peered")
type = PG_STATE_PEERED;
+ else if (state == "snaptrim")
+ type = PG_STATE_SNAPTRIM;
+ else if (state == "snaptrim_wait")
+ type = PG_STATE_SNAPTRIM_WAIT;
else
type = -1;
return type;
#define PG_STATE_UNDERSIZED (1<<23) // pg acting < pool size
#define PG_STATE_ACTIVATING (1<<24) // pg is peered but not yet active
#define PG_STATE_PEERED (1<<25) // peered, cannot go active, can recover
+#define PG_STATE_SNAPTRIM (1<<26) // trimming snaps
+#define PG_STATE_SNAPTRIM_WAIT (1<<27) // queued to trim snaps
std::string pg_state_string(int state);
std::string pg_vector_string(const vector<int32_t> &a);