Details
Description
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.