In SimpleRecordStoreV1::compact we call increaseStorageSize with enforceQuote set to true. This unconditionally calls _checkQuota, which raises the "quota exceeded" error (12501):
void _checkQuota(bool enforceQuota, int fileNo) { if (!enforceQuota) return; if (fileNo < mmapv1GlobalOptions.quotaFiles) return; uasserted(12501, "quota exceeded"); }
In all other places, such as _insertDocuments, we filter the enforceQuote flag:
Status status = _recordStore->insertRecords(opCtx, &records, _enforceQuota(enforceQuota));
where _enforceQuota is defined as:
bool Collection::_enforceQuota(bool userEnforeQuota) const { if (!userEnforeQuota) return false; if (!mmapv1GlobalOptions.quota) return false; if (_ns.db() == "local") return false; if (_ns.isSpecial()) return false; return true; }
In my opinion this should be the other way around: compact should never check for quota, as it will (eventually) free up space.