Quotas management¶
When the built-in plugin kinto.plugins.quotas
is enabled in
configuration, it becomes possible to configure quotas for a bucket or
a collection.
Clients can check for the quotas
capability in the
root URL endpoint.
Note
In terms of performance, enabling this plugin generates two or three additional queries on backends per request.
- A bucket’s quota is a limit on the size of bucket attributes, group attributes, collection attributes, and record attributes.
- Deleted objects are considered to have a size zero so if you add something and remove it, it will look like it was never created for the quota even if its tombstone is still there.
- The quota plugin only works with the transactional storage backends (e.g. PostgreSQL)
- The quota plugin should be activated before adding some data in a bucket or collection. If activated after, the size of the data already present will be added to the quota limit even if this data is deleted later.
Configuration¶
You can configure three types of quotas:
- QUOTA_BYTES: The maximum total amount (in bytes) of data that can be stored in a bucket or collection, as measured by the JSON stringification of every value plus every key’s length.
- QUOTA_BYTES_PER_ITEM: The maximum size (in bytes) of each individual item in the bucket or collection, as measured by the JSON stringification of its value plus its key length.
- MAX_ITEMS: The maximum number of objects that can be stored in a collection or bucket.
You can configure it in the INI settings file.
For buckets:
- Globally for every buckets using
kinto.quotas.bucket_max_bytes
,kinto.quotas.bucket_max_bytes_per_item
andkinto.quotas.bucket_max_items
- Specifically for some buckets using
kinto.quotas.bucket_{bucket_id}_max_bytes
,kinto.quotas.bucket_{bucket_id}_max_bytes_per_item
andkinto.quotas.bucket_{bucket_id}_max_items
e.g.kinto.quotas.bucket_blocklists_max_items
For collections:
- Globally for every bucket collections using
kinto.quotas.collection_max_bytes
,kinto.quotas.collection_max_bytes_per_item
andkinto.quotas.collection_max_items
- Specifically for every collection in a given bucket using
kinto.quotas.collection_{bucket_id}_max_bytes
,kinto.quotas.collection_{bucket_id}_max_bytes_per_item
andkinto.quotas.collection_{bucket_id}_max_items
e.g.kinto.quotas.collection_blocklists_max_items
- Specifically for a given bucket collection using
kinto.quotas.collection_{bucket_id}_{collection_id}_max_bytes
,kinto.quotas.collection_{bucket_id}_{collection_id}_max_bytes_per_item
andkinto.quotas.collection_{bucket_id}_{collection_id}_max_items
e.g.kinto.quotas.collection_blocklists_certificates_max_items
How does it work?¶
If the quota is exceeded the server will return a 507 Insufficient
Storage
HTTP error.
Example Response
HTTP/1.1 507 Insufficient Storage
Access-Control-Expose-Headers: Backoff,Retry-After,Alert,Content-Length
Content-Length: 132
Content-Type: application/json; charset=UTF-8
Date: Fri, 12 Aug 2016 10:14:29 GMT
Server: waitress
{
"code": 507,
"errno": 121,
"error": "Insufficient Storage",
"message": "Collection maximum number of objects exceeded (2 > 1 objects)"
}