-
Type:
Bug
-
Status: Closed
-
Priority:
Major - P3
-
Resolution: Fixed
-
Affects Version/s: None
-
Component/s: Storage
-
Labels:None
-
Backwards Compatibility:Fully Compatible
-
Operating System:ALL
-
Backport Requested:v3.4, v3.2, v3.0
-
Steps To Reproduce:
-
Sprint:Storage 2017-03-27
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.