Configuration

Quota

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:

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

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.

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 idletime used up in bursts of max ${burstsLimit} requests) .

Publication Schedule

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’.