pg = _lookup_lock_pg(pgid);
if (pg->info.history.same_acting_since <= m->get_epoch()) {
- dout(10) << *pg << " removing." << dendl;
- assert(pg->get_role() == -1);
- assert(pg->get_primary() == m->get_source().num());
- pg->deleting = true;
- remove_wq.queue(pg);
+ if (pg->deleting) {
+ dout(10) << *pg << " already removing." << dendl;
+ } else {
+ dout(10) << *pg << " removing." << dendl;
+ assert(pg->get_role() == -1);
+ assert(pg->get_primary() == m->get_source().num());
+ pg->deleting = true;
+ remove_wq.queue(pg);
+ }
} else {
dout(10) << *pg << " ignoring remove request, pg changed in epoch "
<< pg->info.history.same_acting_since << " > " << m->get_epoch() << dendl;
Cond _cond;
atomic_t ref;
+public:
bool deleting; // true while RemoveWQ should be chewing on us
-public:
void lock(bool no_lockdep=false) {
//generic_dout(0) << this << " " << info.pgid << " lock" << dendl;
_lock.Lock(no_lockdep);
}
if (pg.info.snap_trimq.size())
out << " snaptrimq=" << pg.info.snap_trimq;
+
+ if (pg.deleting)
+ out << " DELETING";
out << "]";