Skip to content

Commit 7efaece

Browse files
Merge pull request ceph#63296 from NitzanMordhai/wip-nitzan-peering-state-toofull-race
osd/PeeringState: re-evaluate full OSDs while waiting for recovery re…
2 parents 46c0d5c + b8d2c68 commit 7efaece

File tree

2 files changed

+26
-0
lines changed

2 files changed

+26
-0
lines changed

src/osd/PeeringState.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6006,6 +6006,18 @@ PeeringState::WaitLocalRecoveryReserved::react(const RecoveryTooFull &evt)
60066006
return transit<NotRecovering>();
60076007
}
60086008

6009+
boost::statechart::result
6010+
PeeringState::WaitLocalRecoveryReserved::react(const AdvMap& ev)
6011+
{
6012+
DECLARE_LOCALS;
6013+
if (!ps->cct->_conf->osd_debug_skip_full_check_in_recovery &&
6014+
ps->get_osdmap()->check_full(ps->acting_recovery_backfill)) {
6015+
post_event(RecoveryTooFull());
6016+
return discard_event();
6017+
}
6018+
return forward_event();
6019+
}
6020+
60096021
void PeeringState::WaitLocalRecoveryReserved::exit()
60106022
{
60116023
context< PeeringMachine >().log_exit(state_name, enter_time);
@@ -6046,6 +6058,18 @@ PeeringState::WaitRemoteRecoveryReserved::react(const RemoteRecoveryReserved &ev
60466058
return discard_event();
60476059
}
60486060

6061+
boost::statechart::result
6062+
PeeringState::WaitRemoteRecoveryReserved::react(const AdvMap& ev)
6063+
{
6064+
DECLARE_LOCALS;
6065+
if (!ps->cct->_conf->osd_debug_skip_full_check_in_recovery &&
6066+
ps->get_osdmap()->check_full(ps->acting_recovery_backfill)) {
6067+
post_event(RecoveryTooFull());
6068+
return discard_event();
6069+
}
6070+
return forward_event();
6071+
}
6072+
60496073
void PeeringState::WaitRemoteRecoveryReserved::exit()
60506074
{
60516075
context< PeeringMachine >().log_exit(state_name, enter_time);

src/osd/PeeringState.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,6 +1197,7 @@ class PeeringState : public MissingLoc::MappingInfo {
11971197
std::set<pg_shard_t>::const_iterator remote_recovery_reservation_it;
11981198
explicit WaitRemoteRecoveryReserved(my_context ctx);
11991199
boost::statechart::result react(const RemoteRecoveryReserved &evt);
1200+
boost::statechart::result react(const AdvMap& ev);
12001201
void exit();
12011202
};
12021203

@@ -1208,6 +1209,7 @@ class PeeringState : public MissingLoc::MappingInfo {
12081209
explicit WaitLocalRecoveryReserved(my_context ctx);
12091210
void exit();
12101211
boost::statechart::result react(const RecoveryTooFull &evt);
1212+
boost::statechart::result react(const AdvMap& ev);
12111213
};
12121214

12131215
struct Activating : boost::statechart::state< Activating, Active >, NamedState {

0 commit comments

Comments
 (0)