bool RangeDeleter::addToBlackList(const StringData& ns, const BSONObj& min, const BSONObj& max, std::string* errMsg) { string dummy; if (errMsg == NULL) errMsg = &dummy; scoped_lock sl(_queueMutex); if (isBlacklisted_inlock(ns, min, max, errMsg)) { return false; } for (NSMinMaxSet::const_iterator iter = _deleteSet.begin(); iter != _deleteSet.end(); ++iter) { const NSMinMax* const entry = *iter; if (entry->ns == ns && rangeOverlaps(entry->min, entry->max, min, max)) { *errMsg = stream() << "Cannot black list ns: " << ns << ", min: " << min << ", max: " << max << " since it is already queued for deletion."; return false; } } _blackList.insert(new NSMinMax(ns.toString(), min, max)); return true; }
bool RangeDeleter::canEnqueue_inlock(const StringData& ns, const BSONObj& min, const BSONObj& max, string* errMsg) const { if (isBlacklisted_inlock(ns, min, max, errMsg)) { return false; } NSMinMax toDelete(ns.toString(), min, max); if (_deleteSet.count(&toDelete) > 0) { *errMsg = str::stream() << "ns: " << ns << ", min: " << min << ", max: " << max << " is already being processed for deletion."; return false; } return true; }