#include "messages/MRecoveryReserve.h"
#include "messages/MOSDScrubReserve.h"
+PeeringState::PeeringState(CephContext *cct, spg_t spgid, PG *pg)
+ : state_history(pg),
+ machine(this, cct, spgid, pg, &state_history), cct(cct),
+ spgid(spgid), pg(pg), orig_ctx(0) {
+ machine.initiate();
+}
+
+
void PeeringState::PeeringMachine::send_query(
pg_shard_t to, const pg_query_t &query) {
ceph_assert(state->rctx);
/*------Crashed-------*/
PeeringState::Crashed::Crashed(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Crashed")
+ NamedState(context< PeeringMachine >().state_history, "Crashed")
{
context< PeeringMachine >().log_enter(state_name);
ceph_abort_msg("we got a bad state machine event");
/*------Initial-------*/
PeeringState::Initial::Initial(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Initial")
+ NamedState(context< PeeringMachine >().state_history, "Initial")
{
context< PeeringMachine >().log_enter(state_name);
}
/*------Started-------*/
PeeringState::Started::Started(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started")
+ NamedState(context< PeeringMachine >().state_history, "Started")
{
context< PeeringMachine >().log_enter(state_name);
}
/*--------Reset---------*/
PeeringState::Reset::Reset(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Reset")
+ NamedState(context< PeeringMachine >().state_history, "Reset")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*-------Start---------*/
PeeringState::Start::Start(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Start")
+ NamedState(context< PeeringMachine >().state_history, "Start")
{
context< PeeringMachine >().log_enter(state_name);
/*---------Primary--------*/
PeeringState::Primary::Primary(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*---------Peering--------*/
PeeringState::Peering::Peering(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering"),
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering"),
history_les_bound(false)
{
context< PeeringMachine >().log_enter(state_name);
/*------Backfilling-------*/
PeeringState::Backfilling::Backfilling(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/Backfilling")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/Backfilling")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
PeeringState::WaitRemoteBackfillReserved::WaitRemoteBackfillReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/WaitRemoteBackfillReserved"),
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/WaitRemoteBackfillReserved"),
backfill_osd_it(context< Active >().remote_shards_to_reserve_backfill.begin())
{
context< PeeringMachine >().log_enter(state_name);
/*--WaitLocalBackfillReserved--*/
PeeringState::WaitLocalBackfillReserved::WaitLocalBackfillReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/WaitLocalBackfillReserved")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/WaitLocalBackfillReserved")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*----NotBackfilling------*/
PeeringState::NotBackfilling::NotBackfilling(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/NotBackfilling")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/NotBackfilling")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*----NotRecovering------*/
PeeringState::NotRecovering::NotRecovering(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/NotRecovering")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/NotRecovering")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*---RepNotRecovering----*/
PeeringState::RepNotRecovering::RepNotRecovering(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ReplicaActive/RepNotRecovering")
+ NamedState(context< PeeringMachine >().state_history, "Started/ReplicaActive/RepNotRecovering")
{
context< PeeringMachine >().log_enter(state_name);
}
/*---RepWaitRecoveryReserved--*/
PeeringState::RepWaitRecoveryReserved::RepWaitRecoveryReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ReplicaActive/RepWaitRecoveryReserved")
+ NamedState(context< PeeringMachine >().state_history, "Started/ReplicaActive/RepWaitRecoveryReserved")
{
context< PeeringMachine >().log_enter(state_name);
}
/*-RepWaitBackfillReserved*/
PeeringState::RepWaitBackfillReserved::RepWaitBackfillReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ReplicaActive/RepWaitBackfillReserved")
+ NamedState(context< PeeringMachine >().state_history, "Started/ReplicaActive/RepWaitBackfillReserved")
{
context< PeeringMachine >().log_enter(state_name);
}
/*---RepRecovering-------*/
PeeringState::RepRecovering::RepRecovering(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ReplicaActive/RepRecovering")
+ NamedState(context< PeeringMachine >().state_history, "Started/ReplicaActive/RepRecovering")
{
context< PeeringMachine >().log_enter(state_name);
}
/*------Activating--------*/
PeeringState::Activating::Activating(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/Activating")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/Activating")
{
context< PeeringMachine >().log_enter(state_name);
}
PeeringState::WaitLocalRecoveryReserved::WaitLocalRecoveryReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/WaitLocalRecoveryReserved")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/WaitLocalRecoveryReserved")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
PeeringState::WaitRemoteRecoveryReserved::WaitRemoteRecoveryReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/WaitRemoteRecoveryReserved"),
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/WaitRemoteRecoveryReserved"),
remote_recovery_reservation_it(context< Active >().remote_shards_to_reserve_recovery.begin())
{
context< PeeringMachine >().log_enter(state_name);
PeeringState::Recovering::Recovering(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/Recovering")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/Recovering")
{
context< PeeringMachine >().log_enter(state_name);
PeeringState::Recovered::Recovered(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/Recovered")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/Recovered")
{
pg_shard_t auth_log_shard;
PeeringState::Clean::Clean(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active/Clean")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active/Clean")
{
context< PeeringMachine >().log_enter(state_name);
/*---------Active---------*/
PeeringState::Active::Active(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Active"),
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Active"),
remote_shards_to_reserve_recovery(
unique_osd_shard_set(
context< PeeringMachine >().pg->pg_whoami,
/*------ReplicaActive-----*/
PeeringState::ReplicaActive::ReplicaActive(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ReplicaActive")
+ NamedState(context< PeeringMachine >().state_history, "Started/ReplicaActive")
{
context< PeeringMachine >().log_enter(state_name);
/*-------Stray---*/
PeeringState::Stray::Stray(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Stray")
+ NamedState(context< PeeringMachine >().state_history, "Started/Stray")
{
context< PeeringMachine >().log_enter(state_name);
/*--------ToDelete----------*/
PeeringState::ToDelete::ToDelete(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ToDelete")
+ NamedState(context< PeeringMachine >().state_history, "Started/ToDelete")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*----WaitDeleteReserved----*/
PeeringState::WaitDeleteReserved::WaitDeleteReserved(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg,
+ NamedState(context< PeeringMachine >().state_history,
"Started/ToDelete/WaitDeleteReseved")
{
context< PeeringMachine >().log_enter(state_name);
/*----Deleting-----*/
PeeringState::Deleting::Deleting(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/ToDelete/Deleting")
+ NamedState(context< PeeringMachine >().state_history, "Started/ToDelete/Deleting")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*--------GetInfo---------*/
PeeringState::GetInfo::GetInfo(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering/GetInfo")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering/GetInfo")
{
context< PeeringMachine >().log_enter(state_name);
PeeringState::GetLog::GetLog(my_context ctx)
: my_base(ctx),
NamedState(
- context< PeeringMachine >().pg, "Started/Primary/Peering/GetLog"),
+ context< PeeringMachine >().state_history,
+ "Started/Primary/Peering/GetLog"),
msg(0)
{
context< PeeringMachine >().log_enter(state_name);
/*------WaitActingChange--------*/
PeeringState::WaitActingChange::WaitActingChange(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/WaitActingChange")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/WaitActingChange")
{
context< PeeringMachine >().log_enter(state_name);
}
/*------Down--------*/
PeeringState::Down::Down(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering/Down")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering/Down")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*------Incomplete--------*/
PeeringState::Incomplete::Incomplete(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering/Incomplete")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering/Incomplete")
{
context< PeeringMachine >().log_enter(state_name);
PG *pg = context< PeeringMachine >().pg;
/*------GetMissing--------*/
PeeringState::GetMissing::GetMissing(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering/GetMissing")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering/GetMissing")
{
context< PeeringMachine >().log_enter(state_name);
/*------WaitUpThru--------*/
PeeringState::WaitUpThru::WaitUpThru(my_context ctx)
: my_base(ctx),
- NamedState(context< PeeringMachine >().pg, "Started/Primary/Peering/WaitUpThru")
+ NamedState(context< PeeringMachine >().state_history, "Started/Primary/Peering/WaitUpThru")
{
context< PeeringMachine >().log_enter(state_name);
}