The defined quotas are stored in a quota.config
file in the refs/meta/config
branch of the All-Projects
root project. Administrators can add and edit quotas by fetching this branch, editing the quota.config
file locally and pushing back the changes. The quota.config
file is a Git config file:
[quota "sandbox/*"] maxProjects = 50 maxRepoSize = 2 m [quota "public/*"] maxProjects = 100 maxRepoSize = 10 m [quota "customerX/*"] maxProjects = 20 maxTotalSize = 200 m
If both “maxRepoSize” and “maxTotalSize” are defined in a quota section then the more limiting quota will apply. For example, if the remaining repository size of a repository (based on the “maxRepoSize” and currently occupied space of that repository) is 2m and the remaining total size (based on the “maxTotalSize” and currently occupied space of all repositoris under that namespace) is 1m then the 1m is the remaining size for that repository.
A namespace can be specified as
exact project name (plugins/myPlugin
): Defines a quota for one project.
pattern (sandbox/*
): Defines a quota for one project namespace.
regular expression (^test-.*/.*
): Defines a quota for the namespace matching the regular expression.
for-each-pattern (?/*
): Defines the same quota for each subfolder. ?
is a placeholder for any name and ?/*
with ‘maxProjects = 3’ means that for every subfolder 3 projects are allowed. Hence ?/*
is a shortcut for having n explicit quotas:
<name1>/*
with ‘maxProjects = 3’
<name2>/*
with ‘maxProjects = 3’
...
If a project name matches several quota namespaces the one quota applies to the project that is defined first in the quota.config
file.
Example: Allow the creation of 10 projects in folder test/*
and maximal 500 projects in total
[quota "test/*"] maxProjects = 10 [quota "*"] maxProjects = 500
Example: Allow the creation of 10 projects in folder test/*
and 5 projects in each other folder
[quota "test/*"] maxProjects = 10 [quota "?/*"] maxProjects = 5
Example: Allow the creation of 10 projects in folder test/*
and set the quota of 2m for each of them
[quota "test/*"] maxProjects = 10 maxRepoSize = 2 m
Example: Allow the creation of 10 projects in folder test/*
and set a quota of 20m for the total size of all repositories
[quota "test/*"] maxProjects = 10 maxTotalSize = 20 m
Example: Allow the creation of 10 projects in folder test/*
and set a quota of 20m for the total size of all repositories. In addition make sure that each individual repository cannot exceed 3m
[quota "test/*"] maxProjects = 10 maxRepoSize = 3 m maxTotalSize = 20 m
If one prefers computing a repository size by adding the size of the git objects, the following section should be added into the gerrit.config
file:
[plugin "quota"] useGitObjectCount = true
The defined rate limits are stored in the quota.config
file in the refs/meta/config
branch of the All-Projects
root project. Rate limits are defined per user group and rate limit type.
Example:
[group "buildserver"] uploadpack = 10 / min burst 500 [group "app"] restapi = 12 / min burst 60 [group "Registered Users"] uploadpack = 1 /min burst 180 [group "Anonymous Users"] uploadpack = 6/h burst 12 restapi = 30/m burst 200
For logged in users rate limits are associated to their accountId. For anonymous users rate limits are associated to their remote host address. If multiple anonymous users are accessing Gerrit via the same host (e.g. a proxy) they share a common rate limit.
If a user is a member of multiple groups mentioned in quota.config
the limit applies that is defined first in the quota.config
file. This resolves ambiguity in case the user is a member of multiple groups used in the configuration. Note, all users are members of “Anonymous Users”.
Use group “Anonymous Users” to define the rate limit for anonymous users. Use group “Registered Users” to define the default rate limit for all logged in users.
Format of the rate limit entries in quota.config
:
[group "<groupName>"] <rateLimitType> = <rateLimit> <rateUnit> burst <storedRequests>
The group can be defined by its name or UUID.
If a rate limit configuration value is invalid or missing for a group, that value is ignored and a warning is logged.
Example:
Configure a rate limit of maximum 30 fetch request per hour for the group of registered users. Up to 60 unused requests can be stored during idle times which may be consumed at a later time to send bursts of requests above the maximum request rate.
[group "Registered Users"] uploadpack = 30/hour burst 60
The rate limit exceeded message can be configured.
For uploadpack
, by setting parameter uploadpackLimitExceededMsg
in the plugin.quota
subsection of the gerrit.config
file. ${rateLimit}
token is supported in the message and will be replaced by effective rate limit per hour. Defaults to Exceeded rate limit of ${rateLimit} fetch requests/hour
.
For restapi
, configure the message by setting the parameter restapiLimitExceededMsg
in the plugin.quota
subsection of the gerrit.config
file. ${rateLimit}
and ${burstsLimit}
tokens are supported in the message and will be replaced by the effective rate limit per hour and the effective number of burst permits, correspondingly. The default message reads: Exceeded rate limit of ${rateLimit} REST API requests/hour (or idle
time used up in bursts of max ${burstsLimit} requests)
.
Publication of repository sizes to registered UsageDataPublishedListeners is configured in the plugin.quota
subsection of the gerrit.config
file. The publication interval can be configured using the same format as for the garbage collection schedule, with the parameter names ‘publicationStartTime’ and ‘publicationInterval’.
Example:
[plugin "quota"] publicationStartTime = Fri 10:30 publicationInterval = 1 day
If no publicationInterval is configured, no data is published.