- ioctl to pull out data csum?
osd
+- remove needs to be in a work queue!
- what to do with lost objects.. continue peering?
- segregate backlog from log ondisk?
- preserve pg logs on disk for longer period
// stray?
bool acting = pg->is_acting(from);
if (!acting) {
- dout(10) << *pg << " osd" << from << " has stray content: " << *it << dendl;
- pg->stray_set.insert(from);
- pg->state_clear(PG_STATE_CLEAN);
+ if (pg->stray_purged.count(from)) {
+ dout(10) << *pg << " osd" << from << " sent racing info " << *it << "; already purging/purged" << dendl;
+ } else {
+ dout(10) << *pg << " osd" << from << " has stray content: " << *it << dendl;
+ pg->stray_set.insert(from);
+ pg->state_clear(PG_STATE_CLEAN);
+ }
}
if (had) {
need_up_thru = false;
peer_last_complete_ondisk.clear();
min_last_complete_ondisk = eversion_t();
+ stray_purged.clear();
finish_sync_event = 0; // so that _finish_recvoery doesn't go off in another thread
if (osd->osdmap->is_up(*p)) {
dout(10) << "sending PGRemove to osd" << *p << dendl;
osd->queue_for_removal(*p, info.pgid);
+ stray_purged.insert(*p);
} else {
dout(10) << "not sending PGRemove to down osd" << *p << dendl;
}
map<int, Missing> peer_missing;
set<int> peer_log_requested; // logs i've requested (and start stamps)
set<int> peer_summary_requested;
+ set<int> stray_purged; // i deleted these strays; ignore racing PGInfo from them
friend class OSD;