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.