:linkattrs:
= Gerrit Code Review - Configuration

== File `etc/gerrit.config`

The optional file `'$site_path'/etc/gerrit.config` is a Git-style
config file that controls many host specific settings for Gerrit.

[NOTE]
The contents of the `etc/gerrit.config` file are cached at startup
by Gerrit. For most properties, if they are modified in this file, Gerrit
needs to be restarted before it will use the new values. Some properties
support being link:#reloadConfig[`reloaded`] without restart.

Sample `etc/gerrit.config`:
----
[core]
  packedGitLimit = 200 m

[cache]
  directory = /var/cache/gerrit
----

[[reloadConfig]]
=== Reload `etc/gerrit.config`
Some properties support being reloaded without restart when a `reload config`
command is issued through link:cmd-reload-config.html[`SSH`] or the
link:rest-api-config.html#reload-config[`REST API`]. If a property supports
this it is specified in the documentation for the property below.


[[accountPatchReviewDb]]
=== Section accountPatchReviewDb

The AccountPatchReviewDb is a database used to store the user file reviewed
flags.

[[accountPatchReviewDb.url]]accountPatchReviewDb.url::
+
The url of accountPatchReviewDb. Supported types are `H2`, `POSTGRESQL`,
`MARIADB`, and `MYSQL`. Drop the driver jar in the lib folder of the site path
if the Jdbc driver of the corresponding Database is not yet in the class path.
+
Default is to create H2 database in the db folder of the site path.
+
Changing this parameter requires to migrate database using the
link:pgm-MigrateAccountPatchReviewDb.html[MigrateAccountPatchReviewDb] program.
Migration cannot be done while the server is running.
+
Also note that the db_name has to be a new db and not reusing an old ReviewDb
database from a former 2.x site, otherwise gerrit's init will remove the table.

----
[accountPatchReviewDb]
  url = jdbc:postgresql://<host>:<port>/<db_name>?user=<user>&password=<password>
----

[[accountPatchReviewDb.poolLimit]]accountPatchReviewDb.poolLimit::
+
Maximum number of open database connections.  If the server needs
more than this number, request processing threads will wait up
to <<accountPatchReviewDb.poolMaxWait, poolMaxWait>> seconds for a
connection to be released before they abort with an exception.
This limit must be several units higher than the total number of
httpd and sshd threads as some request processing code paths may
need multiple connections.
+
Default is <<sshd.threads, sshd.threads>>
 + <<httpd.maxThreads, httpd.maxThreads>> + 2.
+

[[accountPatchReviewDb.poolMinIdle]]database.poolMinIdle::
+
Minimum number of connections to keep idle in the pool.
Default is 4.
+

[[accountPatchReviewDb.poolMaxIdle]]accountPatchReviewDb.poolMaxIdle::
+
Maximum number of connections to keep idle in the pool.  If there
are more idle connections, connections will be closed instead of
being returned back to the pool.
Default is min(<<accountPatchReviewDb.poolLimit, accountPatchReviewDb.poolLimit>>, 16).
+

[[accountPatchReviewDb.poolMaxWait]]accountPatchReviewDb.poolMaxWait::
+
Maximum amount of time a request processing thread will wait to
acquire a database connection from the pool.  If no connection is
released within this time period, the processing thread will abort
its current operations and return an error to the client.
Values should use common unit suffixes to express their setting:
+
* ms, milliseconds
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours

+
If a unit suffix is not specified, `milliseconds` is assumed.
Default is `30 seconds`.

[[accounts]]
=== Section accounts

[[accounts.visibility]]accounts.visibility::
+
Controls visibility of other users' dashboard pages and
completion suggestions to web users.
+
If `ALL`, all users are visible to all other users, even
anonymous users.
+
If `SAME_GROUP`, only users who are also members of a group the
current user is a member of are visible.
+
If `VISIBLE_GROUP`, only users who are members of at least one group
that is visible to the current user are visible.
+
If `NONE`, no users other than the current user are visible.
+
Default is `ALL`.

[[accounts.defaultDisplayName]]accounts.defaultDisplayName::
+
If a user account does not have a display name set, which is the normal
case, then this configuration value chooses the strategy how to choose
the display name. Note that this strategy is not applied by the backend.
If the AccountInfo has the display name unset, then the client has to
apply this strategy.
+
If `FULL_NAME`, then the (full) name of the user is chosen from
link:rest-api-accounts.html#account-info[AccountInfo].
+
If `FIRST_NAME`, then the first word (i.e. everything until first
whitespace character) of the (full) name of the user is chosen from
link:rest-api-accounts.html#account-info[AccountInfo].
+
If `USERNAME`, then the username of the user is chosen from
link:rest-api-accounts.html#account-info[AccountInfo]. If that is not
set, then the (full) name will be used.
+
Default is `FULL_NAME`.

[[addreviewer]]
=== Section addreviewer

[[addreviewer.maxWithoutConfirmation]]addreviewer.maxWithoutConfirmation::
+
The maximum number of reviewers a user can add at once by adding a
group as reviewer without being asked to confirm the operation.
+
If set to 0, the user will never be asked to confirm adding a group
as reviewer.
+
Default is 10.
+
This setting only applies for adding reviewers in the Gerrit Web UI,
but is ignored when adding reviewers with the
link:cmd-set-reviewers.html[set-reviewers] command.
+
This value supports link:#reloadConfig[configuration reloads].

[[addreviewer.maxAllowed]]addreviewer.maxAllowed::
+
The maximum number of reviewers a user can add at once by adding a
group as reviewer.
+
If set to 0, there is no limit for the number of reviewers that can
be added at once by adding a group as reviewer.
+
Default is 20.
+
This value supports link:#reloadConfig[configuration reloads].

[[addReviewer.baseWeight]]addReviewer.baseWeight::
+
The weight that will be applied in the default reviewer ranking algorithm.
This can be increased or decreased to give more or less influence to plugins.
If set to zero, the base ranking will not have any effect. Reviewers will then
be ordered as ranked by the plugins (if there are any).
+
By default 1.

[[auth]]
=== Section auth

See also link:config-sso.html[SSO configuration].

[[auth.type]]auth.type::
+
Type of user authentication employed by Gerrit.  The supported
values are:
+
* `OpenID`
+
The default setting.  Gerrit uses any valid OpenID
provider chosen by the end-user.  For more information see
http://openid.net/[openid.net,role=external,window=_blank].
+
* `OpenID_SSO`
+
Supports OpenID from a single provider.  There is no registration
link, and the "Sign In" link sends the user directly to the provider's
SSO entry point.
+
* `HTTP`
+
Gerrit relies upon data presented in the HTTP request.  This includes
HTTP basic authentication, or some types of commercial single-sign-on
solutions.  With this setting enabled the authentication must
take place in the web server or servlet container, and not from
within Gerrit.
+
* `HTTP_LDAP`
+
Exactly like `HTTP` (above), but additionally Gerrit pre-populates
a user's full name and email address based on information obtained
from the user's account object in LDAP.  The user's group membership
is also pulled from LDAP, making any LDAP groups that a user is a
member of available as groups in Gerrit. Hence the `_LDAP` suffix in
the name of this authentication type. Gerrit does NOT authenticate
the user via LDAP.
+
* `CLIENT_SSL_CERT_LDAP`
+
This authentication type is actually kind of SSO. Gerrit will configure
Jetty's SSL channel to request the client's SSL certificate. For this
authentication to work a Gerrit administrator has to import the root
certificate of the trust chain used to issue the client's certificate
into the <review-site>/etc/keystore.
After the authentication is done Gerrit will obtain basic user
registration (name and email) from LDAP, and some group memberships.
Hence the `_LDAP` suffix in the name of this authentication type.
Gerrit does NOT authenticate the user via LDAP.
This authentication type can only be used under hosted daemon mode, and
the httpd.listenUrl must use https:// as the protocol.
Optionally, certificate revocation list file can be used
at <review-site>/etc/crl.pem. For details, see httpd.sslCrl.
+
* `LDAP`
+
Gerrit prompts the user to enter a username and a password, which
it then verifies by performing a simple bind against the configured
<<ldap.server,ldap.server>>.  In this configuration the web server
is not involved in the user authentication process.
+
The actual username used in the LDAP simple bind request is the
account's full DN, which is discovered by first querying the
directory using either an anonymous request, or the configured
<<ldap.username,ldap.username>> identity. Gerrit can also use kerberos if
<<ldap.authentication,ldap.authentication>> is set to `GSSAPI`.
+
If link:#auth.gitBasicAuthPolicy[`auth.gitBasicAuthPolicy`] is set to `HTTP`,
the randomly generated HTTP password is used for authentication. On the other hand,
if link:#auth.gitBasicAuthPolicy[`auth.gitBasicAuthPolicy`] is set to `HTTP_LDAP`,
the password in the request is first checked against the HTTP password and, if
it does not match, it is then validated against the LDAP password.
Service users that are link:cmd-create-account.html[internal-only] are
authenticated by their HTTP passwords.

* `LDAP_BIND`
+
Gerrit prompts the user to enter a username and a password, which
it then verifies by performing a simple bind against the configured
<<ldap.server,ldap.server>>.  In this configuration the web server
is not involved in the user authentication process.
+
Unlike `LDAP` above, the username used to perform the LDAP simple bind
request is the exact string supplied in the dialog by the user.
The configured <<ldap.username,ldap.username>> identity is not used to obtain
account information.
+
* `OAUTH`
+
OAuth is a protocol that lets external apps request authorization to private
details in a user's account without getting their password. This is
preferred over Basic Authentication because tokens can be limited to specific
types of data, and can be revoked by users at any time.
+
Site owners have to register their application before getting started. Note
that provider specific plugins must be used with this authentication scheme.
+
Git clients may send OAuth 2 access tokens instead of passwords in the Basic
authentication header. Note that provider specific plugins must be installed to
facilitate this authentication scheme. If multiple OAuth 2 provider plugins are
installed one of them must be selected as default with the
`auth.gitOAuthProvider` option.
+
* `DEVELOPMENT_BECOME_ANY_ACCOUNT`
+
*DO NOT USE*.  Only for use in a development environment.
+
When this is the configured authentication method a hyperlink titled
`Become` appears in the top right corner of the page, taking the
user to a form where they can enter the username of any existing
user account, and immediately login as that account, without any
authentication taking place.

+
By default, OpenID.

[[auth.allowedOpenID]]auth.allowedOpenID::
+
List of permitted OpenID providers.  A user may only authenticate
with an OpenID that matches this list.  Only used if `auth.type`
is set to `OpenID` (the default).
+
Patterns may be either a
link:http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html[standard
Java regular expression (java.util.regex),role=external,window=_blank] (start with `^` and
end with `$`) or be a simple prefix (any other string).
+
By default, the list contains two values, `http://` and `https://`,
allowing users to authenticate with any OpenID provider.

[[auth.trustedOpenID]]auth.trustedOpenID::
+
List of trusted OpenID providers.  Only used if `auth.type` is
set to `OpenID` (the default).
+
In order for a user to take advantage of permissions beyond those
granted to the `Anonymous Users` and `Registered Users` groups,
the user account must only have OpenIDs which match at least one
pattern from this list.
+
Patterns may be either a
link:http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html[standard
Java regular expression (java.util.regex),role=external,window=_blank] (start with `^` and
end with `$`) or be a simple prefix (any other string).
+
By default, the list contains two values, `http://` and `https://`,
allowing Gerrit to trust any OpenID it receives.

[[auth.openIdDomain]]auth.openIdDomain::
+
List of allowed OpenID email address domains. Only used if
`auth.type` is set to `OPENID` or `OPENID_SSO`.
+
Domain is case insensitive and must be in the same form as it
appears in the email address, for example, "example.com".
+
By default, any domain is accepted.

[[auth.maxOpenIdSessionAge]]auth.maxOpenIdSessionAge::
+
Time in seconds before an OpenID provider must force the user
to authenticate themselves again before authentication to this
Gerrit server.  Currently this is only a polite request, and users
coming from providers that don't support the PAPE extension will
be accepted anyway.  In the future it may be enforced, rejecting
users coming from providers that don't honor the max session age.
+
If set to 0, the provider will always force the user to authenticate
(e.g. supply their password).  Values should use common unit suffixes
to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days
* w, week, weeks (`1 week` is treated as `7 days`)
* mon, month, months (`1 month` is treated as `30 days`)
* y, year, years (`1 year` is treated as `365 days`)

+
Default is -1, permitting infinite time between authentications.

[[auth.registerEmailPrivateKey]]auth.registerEmailPrivateKey::
+
Private key to use when generating an email verification token.
+
If not set, a random key is generated when running the
link:pgm-init.html[site initialization].

[[auth.maxRegisterEmailTokenAge]]auth.maxRegisterEmailTokenAge::
+
Time in seconds before an email verification token sent to a user in
order to validate their email address expires.
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days
* w, week, weeks (`1 week` is treated as `7 days`)
* mon, month, months (`1 month` is treated as `30 days`)
* y, year, years (`1 year` is treated as `365 days`)

+
Default is 12 hours.

[[auth.openIdSsoUrl]]auth.openIdSsoUrl::
+
The SSO entry point URL.  Only used if `auth.type` is set to
`OpenID_SSO`.
+
The "Sign In" link will send users directly to this URL.

[[auth.httpHeader]]auth.httpHeader::
+
HTTP header to trust the username from, or unset to select HTTP basic
authentication.  Only used if `auth.type` is set to `HTTP`.

[[auth.httpDisplaynameHeader]]auth.httpDisplaynameHeader::
+
HTTP header to retrieve the user's display name from.  Only used if `auth.type`
is set to `HTTP`.
+
If set, Gerrit trusts and enforces the user's full name using the HTTP header
and disables the ability to manually modify the user's full name
from the contact information page.

[[auth.httpEmailHeader]]auth.httpEmailHeader::
+
HTTP header to retrieve the user's e-mail from.  Only used if `auth.type`
is set to `HTTP`.
+
If set, Gerrit trusts and enforces the user's e-mail using the HTTP header
and disables the ability to manually modify or register other e-mails
from the contact information page.

[[auth.httpExternalIdHeader]]auth.httpExternalIdHeader::
+
HTTP header to retrieve the user's external identification token.
Only used if `auth.type` is set to `HTTP`.
+
If set, Gerrit adds the value contained in the HTTP header to the
user's identity. Typical use is with a federated identity token from
an external system (e.g. GitHub OAuth 2.0 authentication) where
the user's auth token exchanged during authentication handshake
needs to be used for authenticated communication to the external
system later on.
+
Example: `auth.httpExternalIdHeader: X-GitHub-OTP`

[[auth.loginUrl]]auth.loginUrl::
+
URL to redirect a browser to after the end-user has clicked on the
login link in the upper right corner. Only used if `auth.type` is set
to `HTTP` or `HTTP_LDAP`.
Organizations using an enterprise single-sign-on solution may want to
redirect the browser to the SSO product's sign-in page for completing the
login process and validate their credentials.
+
If set, Gerrit allows anonymous access until the end-user performs the login
and provides a trusted identity through the HTTP header.
If not set, Gerrit requires the HTTP header with a trusted identity
and returns the error page 'LoginRedirect.html' if such a header is not
present.

[[auth.loginText]]auth.loginText::
+
Text displayed in the loginUrl link. Only used if `auth.loginUrl` is set.
+
If not set, the "Sign In" text is used.

[[auth.registerPageUrl]]auth.registerPageUrl::
+
URL of the registration page to use when a new user logs in to Gerrit for
the first time. Used only when `auth.type` is set to `HTTP`.
+
If not set, the standard Gerrit registration page `/#/register/` is displayed.

[[auth.logoutUrl]]auth.logoutUrl::
+
URL to redirect a browser to after the end-user has clicked on the
"Sign Out" link in the upper right corner.  Organizations using an
enterprise single-sign-on solution may want to redirect the browser
to the SSO product's sign-out page.
+
If not set, the redirect returns to the list of all open changes.

[[auth.registerUrl]]auth.registerUrl::
+
Target for the "Register" link in the upper right corner.  Used only
when `auth.type` is `LDAP`, `LDAP_BIND` or `CUSTOM_EXTENSION`.
+
If not set, no "Register" link is displayed.

[[auth.registerText]]auth.registerText::
+
Text for the "Register" link in the upper right corner.  Used only
when `auth.type` is `LDAP`, `LDAP_BIND` or `CUSTOM_EXTENSION`.
+
If not set, defaults to "Register".

[[auth.editFullNameUrl]]auth.editFullNameUrl::
+
Target for the "Edit" button when the user is allowed to edit their
full name.  Used only when `auth.type` is `LDAP`, `LDAP_BIND` or
`CUSTOM_EXTENSION`.

[[auth.httpPasswordUrl]]auth.httpPasswordUrl::
+
Target for the "Obtain Password" link.  Used only when `auth.type` is
`CUSTOM_EXTENSION`.

[[auth.switchAccountUrl]]auth.switchAccountUrl::
+
URL to switch user identities and login as a different account than
the currently active account.  This is disabled by default except when
`auth.type` is `OPENID` and `DEVELOPMENT_BECOME_ANY_ACCOUNT`.  If set
the "Switch Account" link is displayed next to "Sign Out".
+
When `auth.type` does not normally enable this URL administrators may
set this to `login/`, allowing users to begin a new web session. This value
is used as an href in the Gerrit web app, so absolute URLs like
`https://someotherhost/login` work as well.
+
If a ${path} parameter is included, then the Gerrit web app will substitute the
currently viewed path in the link. Be aware that this path will include
a leading slash, so a value like this might be appropriate: `/login${path}`.

[[auth.cookiePath]]auth.cookiePath::
+
Sets "path" attribute of the authentication cookie.
+
If not set, HTTP request's path is used.

[[auth.cookieDomain]]auth.cookieDomain::
+
Sets "domain" attribute of the authentication cookie.
+
If not set, HTTP request's domain is used.

[[auth.cookieSecure]]auth.cookieSecure::
+
Sets "secure" flag of the authentication cookie.  If true, cookies
will be transmitted only over HTTPS protocol.
+
By default, false.

[[auth.emailFormat]]auth.emailFormat::
+
Optional format string to construct user email addresses out of
user login names.  Only used if `auth.type` is `HTTP`, `HTTP_LDAP`
or `LDAP`.
+
This value can be set to a format string, where `{0}` is replaced
with the login name.  E.g. "\{0\}+gerrit@example.com" with a user
login name of "foo" will produce "foo+gerrit@example.com" during
the first time user "foo" registers.
+
If the site is using `HTTP_LDAP` or `LDAP`, using this option is
discouraged.  Setting `ldap.accountEmailAddress` and importing the
email address from the LDAP directory is generally preferred.

[[auth.contributorAgreements]]auth.contributorAgreements::
+
Controls whether or not the contributor agreement features are
enabled for the Gerrit site.  If enabled a user must complete a
contributor agreement before they can upload changes.
+
If enabled, the admin must also add one or more
link:config-cla.html[contributor-agreement sections]
in project.config and create agreement files under
`'$site_path'/static`, so users can actually complete one or
more agreements.
+
By default this is false (no agreements are used).
+
To enable the actual usage of contributor agreement the project
specific config option in the `project.config` must be set:
link:config-project-config.html#receive.requireContributorAgreement[
receive.requireContributorAgreement].

[[auth.trustContainerAuth]]auth.trustContainerAuth::
+
If true then it is the responsibility of the container hosting
Gerrit to authenticate users. In this case Gerrit will blindly trust
the container.
+
This parameter only affects git over http traffic. If set to false
then Gerrit will do the authentication (using Basic authentication).
+
By default this is set to false.


[[auth.gitBasicAuthPolicy]]auth.gitBasicAuthPolicy::
+
When `auth.type` is `LDAP`, `LDAP_BIND` or `OAUTH`, it allows using either the generated
HTTP password, the LDAP or OAUTH password, or a combination of HTTP and LDAP
authentication, to authenticate Git over HTTP and REST API requests.
The supported values are:
+
*`HTTP`
+
Only the HTTP password is accepted when doing Git over HTTP and REST API requests.
+
*`LDAP`
+
Only the `LDAP` password is allowed when doing Git over HTTP and REST API
requests.
+
*`OAUTH`
+
Only the `OAUTH` authentication is allowed when doing Git over HTTP and REST API
requests.
+
*`HTTP_LDAP`
+
The password in the request is first checked against the HTTP password and, if
it does not match, it is then validated against the `LDAP` password.
+
By default this is set to `LDAP` when link:#auth.type[`auth.type`] is `LDAP`
and `OAUTH` when link:#auth.type[`auth.type`] is `OAUTH`.
Otherwise, the default value is `HTTP`.
+
When gitBasicAuthPolicy is set to `LDAP` or `HTTP_LDAP` and the user
is authenticating with the LDAP username/password, the Git client config
needs to have `http.cookieFile` set to a local file, otherwise every
single call would trigger a full LDAP authentication and groups resolution
which could introduce a noticeable latency on the overall execution
and produce unwanted load to the LDAP server.

[[auth.gitOAuthProvider]]auth.gitOAuthProvider::
+
Selects the OAuth 2 provider to authenticate git over HTTP traffic with.
+
In general there is no way to determine from an access token alone, which
OAuth 2 provider to address to verify that token, and the BasicAuth
scheme does not support amending such details. If multiple OAuth provider
plugins in a system offer support for git over HTTP authentication site
administrators must configure, which one to use as default provider.
In case the provider cannot be determined from a request the access token
will be sent to the default provider for verification.
+
The value of this parameter must be the identifier of an OAuth 2 provider
in the form `plugin-name:provider-name`. Consult the respective plugin
documentation for details.

[[auth.userNameToLowerCase]]auth.userNameToLowerCase::
+
If set the username that is received to authenticate a git operation
is converted to lower case for looking up the user account in Gerrit.
+
By setting this parameter a case insensitive authentication for the
git operations can be achieved, if it is ensured that the usernames in
Gerrit (scheme `username`) are stored in lower case (e.g. if the
parameter link:#ldap.accountSshUserName[ldap.accountSshUserName] is
set to `${sAMAccountName.toLowerCase}`). It is important that for all
existing accounts this username is already in lower case. It is not
possible to convert the usernames of the existing accounts to lower
case because this would break the access to existing per-user
branches and Gerrit provides no tool to do such a conversion. Accounts
created using the REST API or the `create-account` SSH command will
be created with all lowercase characters, when this option is set.
+
Setting this parameter to `true` will prevent all users from login that
have a non-lower-case username.
+
This parameter only affects git over http and git over SSH traffic.
+
By default this is set to false.

[[auth.userNameCaseInsensitive]]auth.userNameCaseInsensitive::
+
If set the username will be handled case insensitively but case preserving,
i.e. a user can login with `johndoe` or `JohnDoe` for the same account
created for `JohnDoe`. The form of the username used during account creation
will be used wherever the username is displayed. Sandbox branches created
for a user can also only be created for this original form.
+
Note, that this does not work for all existing accounts, if they were
not originally created with all lowercase, since the note keys of the
external IDs will not match the new scheme. For more details refer to
the link:config-accounts.html#external-ids[External ID documentation].
+
Gerrit provides the
link:pgm-ChangeExternalIdCaseSensitivity.html[offline]
and the online link:externalid-case-insensitivity.html#online-migration[online]
tools to migrate existing accounts to match the new scheme.
+
Naturally, if there were two accounts only different in capitalization,
e.g. `johndoe` and `JohnDoe`, the account `JohnDoe` will not be able
to authenticate anymore after setting this option. If such duplicate
accounts exist the migration tool will fail, since the newly computed
note name would be identical and thus conflict. These duplicates thus
have to be deleted manually by deleting the respective external ID.
+
For newly initialized sites this option defaults to true.
+
Default is false.

[[auth.userNameCaseInsensitiveMigrationMode]]auth.userNameCaseInsensitiveMigrationMode::
+
Setting migration mode to true allows to fallback to case sensitive
behaviour if the migrated external ID cannot be found. This allows to
trigger the migration while Gerrit process is running.
+
Default is false.

[[auth.enableRunAs]]auth.enableRunAs::
+
If true HTTP REST APIs will accept the `X-Gerrit-RunAs` HTTP request
header from any users granted the link:access-control.html#capability_runAs[Run As]
capability. The header and capability permit the authenticated user
to impersonate another account.
+
If false the feature is disabled and cannot be re-enabled without
editing gerrit.config and restarting the server.
+
Default is true.

[[auth.allowRegisterNewEmail]]auth.allowRegisterNewEmail::
+
Whether users are allowed to register new email addresses.
+
In addition for the HTTP authentication type
link:#auth.httpemailheader[auth.httpemailheader] must *not* be set to
enable registration of new email addresses.
+
By default, true.

[[auth.autoUpdateAccountActiveStatus]]auth.autoUpdateAccountActiveStatus::
+
Whether to allow automatic synchronization of an account's inactive flag upon login.
+
If set to true, upon login, if the authentication back-end reports the account as active,
the account's inactive flag in NoteDb will be updated to be active.
+
If the authentication back-end reports the account as inactive, the account's flag will be
updated to be inactive and the login attempt will be blocked. Users enabling this feature
should ensure that their authentication back-end is supported. Currently, only
strict 'LDAP' authentication is supported.
+
In addition, if this parameter is not set, or false, the corresponding scheduled
task to deactivate inactive Gerrit accounts will also be disabled. If this
parameter is set to true, users should also consider configuring the
link:#accountDeactivation[accountDeactivation] section appropriately.
+
By default, false.

[[auth.skipFullRefEvaluationIfAllRefsAreVisible]]auth.skipFullRefEvaluationIfAllRefsAreVisible::
+
Whether to skip the full ref visibility checks as a performance shortcut when a
user has READ permission for all refs.
+
The full ref filtering would filter out refs for pending edits, private changes
and auto merge commits.
+
By default, true.

[[cache]]
=== Section cache

[[cache.directory]]cache.directory::
+
Path to a local directory where Gerrit can write cached entities for
future lookup.  This local disk cache is used to retain potentially
expensive to compute information across restarts.  If the location
does not exist, Gerrit will try to create it.
+
Technically, cached entities are persisted as a set of H2 databases
inside this directory.
+
If not absolute, the path is resolved relative to `$site_path`.
+
Default is unset, no disk cache.

[[cache.enableDiskStatMetrics]]cache.enableDiskStatMetrics::
+
Whether to enable the computation of disk statistics of persistent caches.
This computation is expensive and requires a long time on larger installations.
+
By default, false.

[[cache.h2CacheSize]]cache.h2CacheSize::
+
The size of the in-memory cache for each opened H2 cache database, in bytes.
+
Some caches of Gerrit are persistent and are backed by an H2 database.
H2 uses memory to cache its database content. The parameter `h2CacheSize`
allows to limit the memory used by H2 and thus prevent out-of-memory
caused by the H2 database using too much memory.
+
Technically the H2 cache size is configured using the CACHE_SIZE parameter in
the H2 JDBC connection URL, as described
link:http://www.h2database.com/html/features.html#cache_settings[here,role=external,window=_blank]
+
Default is unset, using up to half of the available memory.
+
H2 will persist this value in the database, so to unset explicitly specify 0.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[cache.h2AutoServer]]cache.h2AutoServer::
+
If set to true, enable H2 autoserver mode for the H2-backed persistent cache
databases.
+
See link:http://www.h2database.com/html/features.html#auto_mixed_mode[here,role=external,window=_blank]
for detail.
+
Default is false.

[[cache.openFiles]]cache.openFiles::
+
The number of file descriptors to add to the limit set by the Gerrit daemon.
+
Persistent caches are stored on the file system and as such participate in the
file descriptors utilization. The number of file descriptors can vary depending
on the cache configuration and the specific backend used.
+
The additional file descriptors required by the cache should be accounted for
via this setting, so that the Gerrit daemon can adjust the ulimit accordingly.
+
If you increase this to a larger setting you may need to also adjust
the ulimit on file descriptors for the host JVM, as Gerrit needs
additional file descriptors available for network sockets and other
repository data manipulation.
+
Default is 0.

[[cache.name.maxAge]]cache.<name>.maxAge::
+
Maximum age to keep an entry in the cache. Entries are removed from
the cache and refreshed from source data every maxAge interval.
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days
* w, week, weeks (`1 week` is treated as `7 days`)
* mon, month, months (`1 month` is treated as `30 days`)
* y, year, years (`1 year` is treated as `365 days`)

+
--
If a unit suffix is not specified, `seconds` is assumed.  If 0 is
supplied, the maximum age is infinite and items are never purged
except when the cache is full.

Default is `0`, meaning store forever with no expire, except:

* `"adv_bases"`: default is `10 minutes`
* `"ldap_groups"`: default is `1 hour`
* `"web_sessions"`: default is `12 hours`
--

[[cache.name.memoryLimit]]cache.<name>.memoryLimit::
+
The total cost of entries to retain in memory. The cost computation
varies by the cache. For most caches where the in-memory size of each
entry is relatively the same, memoryLimit is currently defined to be
the number of entries held by the cache (each entry costs 1).
+
For caches where the size of an entry can vary significantly between individual
entries (notably `"git_modified_files"`, `"modified_files"`, `"git_file_diff"`,
`"gerrit_file_diff"`, `"diff_intraline"`), memoryLimit is an approximation of
the total number of bytes stored by the cache.  Larger entries that represent
bigger patch sets or longer source files will consume a bigger portion of the
memoryLimit. For these caches the memoryLimit should be set to roughly the
amount of RAM (in bytes) the administrator can dedicate to the cache.
+
Default is 1024 for most caches, except:
+
* `"adv_bases"`: default is `4096`
* `"git_modified_files"`: default is `10m` (10 MiB of memory)
* `"modified_files"`: default is `10m` (10 MiB of memory)
* `"git_file_diff"`: default is `10m` (10 MiB of memory)
* `"gerrit_file_diff"`: default is `10m` (10 MiB of memory)
* `"diff_intraline"`: default is `10m` (10 MiB of memory)
* `"diff_summary"`: default is `10m` (10 MiB of memory)
* `"external_ids_map"`: default is `2` and should not be changed
* `"groups"`: default is unlimited
* `"groups_byname"`: default is unlimited
* `"groups_byuuid"`: default is unlimited
* `"groups_byuuid_persisted"`: default is `1g` (1 GiB of disk space)
* `"plugin_resources"`: default is 2m (2 MiB of memory)

+
If set to 0 the cache is disabled; entries are loaded but not stored
in-memory.
+
**NOTE**: When the cache is disabled, there is no locking when accessing
the same key/value, and therefore multiple threads may
load the same value concurrently with a higher memory footprint.
To keep a minimum caching and avoid concurrent loading of the same
key/value, set `memoryLimit` to `1` and `maxAge` to `1`.

[[cache.name.expireFromMemoryAfterAccess]]cache.<name>.expireFromMemoryAfterAccess::
+
Time after last access to automatically expire entries from an in-memory
cache. If 0 or not specified, entries are never expired in this manner.
Values may use unit suffixes as in link:#cache.name.maxAge[maxAge].
+
This option only applies to in-memory caches; persistent cache values are
not expired in this manner, and are only pruned via
link:#cache.name.diskLimit[diskLimit].

[[cache.name.diskLimit]]cache.<name>.diskLimit::
+
Total size in bytes of the keys and values stored on disk. Caches that
have grown bigger than this size are scanned daily at 1 AM local
server time to trim the cache. Entries are removed in least recently
accessed order until the cache fits within this limit.  Caches may
grow larger than this during the day, as the size check is only
performed once every 24 hours.
+
Default is 128 MiB per cache, except:
+
* `"change_notes"`: disk storage is disabled by default
* `"diff_summary"`: default is `1g` (1 GiB of disk space)
* `"external_ids_map"`: disk storage is disabled by default
* `"persisted_projects"`: default is `1g` (1 GiB of disk space)

+
If 0 or negative, disk storage for the cache is disabled.

[[cache.name.expireAfterWrite]]cache.<name>.expireAfterWrite::
+
Duration after which a cached value will be evicted and not
read anymore.
+
Values should use common unit suffixes to express their setting:
+
* ms, milliseconds
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
+
Disabled by default.

[[cache.name.refreshAfterWrite]]cache.<name>.refreshAfterWrite::
+
Duration after which we asynchronously refresh the cached value.
+
Values should use common unit suffixes to express their setting:
+
* ms, milliseconds
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
+
This applies only to these caches that support refreshing:
+
* `"projects"`: Caching project information in-memory. Defaults to 15 minutes.

[[cache.refreshThreadPoolSize]]cache.refreshThreadPoolSize::
+
Number of threads that are available to refresh cached values that became
out of date. This applies only to these caches that support refreshing:
+
* `"projects"`: Caching project information in-memory
+
Refreshes will only be scheduled on this executor if the values are
out of sync.
The check if they are is cheap and always happens on the thread that
inquires for a cached value.
+
Defaults to 2.

==== [[cache_names]]Standard Caches

cache `"accounts"`::
+
Cache entries contain important details of an active user, including
their display name, preferences, and known email addresses. Entry
information is obtained from NoteDb data in the `All-Users` repo.

+
If direct updates are made to `All-Users`, this cache should be flushed.

cache `"adv_bases"`::
+
Used only for push over smart HTTP when branch level access controls
are enabled.  The cache entry contains all commits that are available
for the client to use as potential delta bases.  Push over smart HTTP
requires two HTTP requests, and this cache tries to carry state from
the first request into the second to ensure it can complete.

cache `"default_preferences"`::
+
Caches the server's default general, edit and diff preferences.
+
Default value is 1 to hold only the most current version in-memory.

cache `"changes"`::
+
The size of `memoryLimit` determines the number of projects for which
all changes will be cached. If the cache is set to 1024, this means all
changes for up to 1024 projects can be held in the cache.
+
Default value is 0 (disabled). It is disabled by default due to the fact
that change updates are not communicated between Gerrit servers. Hence
this cache should be disabled in a cluster setup using multiple primary
or multiple replica nodes.
+
The cache should be flushed whenever NoteDb change metadata in a repository is
modified outside of Gerrit.

cache `"git_modified_files"`::
+
Each item caches the list of git modified files between two git trees
corresponding to two different commits. This cache does not read the actual
file contents nor does it include the edits (modified regions) of the files.

cache `"modified_files"`::
+
Each item caches the list of modified files between two commits. This cache
is similar to the `git_modified_files` cache but performs extra logic including
filtering out files that are untouched by both commits because they were purely
modified between the parent commits.

cache `"git_file_diff"`::
+
Each item caches the pure git diff between two git trees for a specific file
path. The diff includes all the file attributes (old/new paths, change/patch
types) as well as the list of edits corresponding to the modified regions in
the file.

cache `"gerrit_file_diff"`::
+
Each item caches the diff between two git commits for a specific file path.
This cache is similar to the `git_file_diff` cache but performs extra logic
including identifying the edits that are due to rebase. The diff for the
"commit message" and "merge list" can also be requested from this cache.
+
Entries in this cache are relatively large, so memoryLimit is an
estimate in bytes of memory used. Administrators should try to target
cache.diff.memoryLimit to fit all changes users will view in a 1 or 2
day span. The same applies for other diff caches: `"git_modified_files"`,
`"modified_files"` and `"git_file_diff"`.

cache `"diff_intraline"`::
+
Each item caches the intraline difference of one file, when compared
between two commits. Gerrit uses this cache to accelerate display of
intraline differences when viewing a file.
+
Entries in this cache are relatively large, so memoryLimit is an
estimate in bytes of memory used. Administrators should try to target
cache.diff.memoryLimit to fit all files users will view in a 1 or 2
day span.

cache `"diff_summary"`::
+
Each item caches list of file paths which are different between two
commits. Gerrit uses this cache to accelerate computing of the list
of paths of changed files.
+
Ideally, disk limit of this cache is large enough to cover all changes.
This should significantly speed up change reindexing, especially
full offline reindexing.

cache `"external_ids_map"`::
+
A singleton cache whose sole entry is a map of the parsed representation
of link:config-accounts.html#external-ids[all current external IDs]. The
cache may temporarily contain 2 entries, but the second one is promptly
expired.
+
It is not recommended to change the in-memory attributes of this cache
away from the defaults. The cache may be persisted by setting
`diskLimit`, which is only recommended if cold start performance is
problematic.

cache `"git_tags"`::
+
If branch or reference level READ access controls are used, this
cache tracks which tags are reachable from the branch tips of a
repository.  Gerrit uses this information to determine the set
of tags that a client may access, derived from which tags are
part of the history of a visible branch.
+
The cache is persisted to disk across server restarts as it can
be expensive to compute (60 or more seconds for a large history
like the Linux kernel repository).

cache `"comment_context"`::
+
Caches the context lines of comments, which are the lines of the source file
highlighted by the user when the comment was written.

cache `"groups"`::
+
Caches the basic group information of internal groups by group ID,
including the group owner, name, and description.
+
For this cache it is important to configure a size that is larger than
the number of internal Gerrit groups, otherwise general Gerrit
performance may be poor. This is why by default this cache is
unlimited.
+
External group membership obtained from LDAP is cached under
`"ldap_groups"`.

cache `"groups_byname"`::
+
Caches the basic group information of internal groups by group name,
including the group owner, name, and description.
+
For this cache it is important to configure a size that is larger than
the number of internal Gerrit groups, otherwise general Gerrit
performance may be poor. This is why by default this cache is
unlimited.
+
External group membership obtained from LDAP is cached under
`"ldap_groups"`.

cache `"groups_byuuid"`::
+
Caches the basic group information of internal groups by group UUID,
including the group owner, name, and description.
+
For this cache it is important to configure a size that is larger than
the number of internal Gerrit groups, otherwise general Gerrit
performance may be poor. This is why by default this cache is
unlimited.
+
External group membership obtained from LDAP is cached under
`"ldap_groups"`.

cache `"groups_byuuid_persisted"`::
+
Caches the basic group information of internal groups by group UUID,
including the group owner, name, and description.
+
This is the persisted version of `groups_byuuid` cache. The intention of this
cache is to have an in-memory size of 0.
+
External group membership obtained from LDAP is cached under
`"ldap_groups"`.

cache `"groups_bymember"`::
+
Caches the groups which contain a specific member (account). If direct
updates are made to the `account_group_members` table, this cache should
be flushed.

cache `"groups_bysubgroups"`::
+
Caches the parent groups of a subgroup.  If direct updates are made
to the `account_group_includes` table, this cache should be flushed.

cache `"groups_external"`::
+
Caches all the external groups available to Gerrit. The cache holds a
single entry which maps to the latest available of all external groups'
UUIDs. This cache uses "groups_external_persisted" to load its value.

cache `"groups_external_persisted"`::
+
Caches all external groups available to Gerrit at some point in history.
The cache key is representation of a specific groups state in NoteDb and
the value is the list of all external groups.
The cache is persisted to enhance performance.

cache `"ldap_groups"`::
+
Caches the LDAP groups that a user belongs to, if LDAP has been
configured on this server.  This cache should be configured with a
low maxAge setting, to ensure LDAP modifications are picked up in
a timely fashion.

cache `"ldap_groups_byinclude"`::
+
Caches the hierarchical structure of LDAP groups.

cache `"ldap_usernames"`::
+
Caches a mapping of LDAP username to Gerrit account identity.  The
cache automatically updates when a user first creates their account
within Gerrit, so the cache expire time is largely irrelevant.

cache `"permission_sort"`::
+
Caches the order in which access control sections must be applied to a
reference.  Sorting the sections can be expensive when regular
expressions are used, so this cache remembers the ordering for
each branch.

cache `"plugin_resources"`::
+
Caches formatted plugin resources, such as plugin documentation that
has been converted from Markdown to HTML. The memoryLimit refers to
the bytes of memory dedicated to storing the documentation.

cache `"persisted_projects"`::
+
Caches the project description records, from the `refs/meta/config`
branch of each project. This is the persisted variant of the
`projects` cache. The intention is for this cache to have an in-memory
size of 0.

cache `"projects"`::
+
Caches the project description records, from the `refs/meta/config`
branch of each project. If a project record is updated or deleted, this
cache should be flushed.  Newly inserted projects do not require
a cache flush, as they will be read upon first reference.

cache `"prolog_rules"`::
+
Caches parsed `rules.pl` contents for each project. This cache uses the same
size as the `projects` cache when `cache.prolog_rules.memoryLimit` is not set.

cache `"pure_revert"`::
+
Result of checking if one change or commit is a pure/clean revert of
another.

cache `"soy_sauce_compiled_templates"`::
+
Caches compiled soy templates. Stores at most only one key-value pair with
a constant key value and the value is a compiled SoySauce templates. The value
is reloaded automatically every few seconds if there are reads from the cache.
If cache is not used for 1 minute, the item is removed (i.e. emails can be send
with templates which are max 1 minute old).

cache `"sshkeys"`::
+
Caches unpacked versions of user SSH keys, so the internal SSH daemon
can match against them during authentication.  The unit of storage
is per-user, so 1024 items translates to 1024 unique user accounts.
As each individual user account may configure multiple SSH keys,
the total number of keys may be larger than the item count.

cache `"web_sessions"`::
+
Tracks the live user sessions coming in over HTTP.  Flushing this
cache would cause all users to be signed out immediately, forcing
them to sign-in again.  To avoid breaking active users, this cache
is not flushed automatically by `gerrit flush-caches --all`, but
instead must be explicitly requested.
+
If no disk cache is configured (or `cache.web_sessions.diskLimit`
is set to 0) a server restart will force all users to sign-out,
and need to sign-in again after the restart, as the cache was
unable to persist the session information.  Enabling a disk cache
is strongly recommended.
+
Session storage is relatively inexpensive. The average entry in
this cache is approximately 346 bytes.

See also link:cmd-flush-caches.html[gerrit flush-caches].

==== [[cache_options]]Cache Options

[[cache.git_file_diff.timeout]]cache.git_file_diff.timeout::
+
Maximum number of milliseconds to wait for git diff data before giving up and
falling back on a simpler diff algorithm that will not be able to break down
modified regions into smaller ones. This is a work around for an infinite loop
bug in the default difference algorithm implementation.
+
Values should use common unit suffixes to express their setting:
+
* ms, milliseconds
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours

+
--
If a unit suffix is not specified, `milliseconds` is assumed.

Default is 5 seconds.
--

[[cache.diff_intraline.timeout]]cache.diff_intraline.timeout::
+
Maximum number of milliseconds to wait for intraline difference data
before giving up and disabling it for a particular file pair.  This is
a work around for an infinite loop bug in the intraline difference
implementation.
+
If computation takes longer than the timeout, the worker thread is
terminated, an error message is shown, and no intraline difference is
displayed for the file pair.
+
Values should use common unit suffixes to express their setting:
+
* ms, milliseconds
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours

+
--
If a unit suffix is not specified, `milliseconds` is assumed.

Default is 5 seconds.
--

[[cache.diff_intraline.enabled]]cache.diff_intraline.enabled::
+
Boolean to enable or disable the computation of intraline differences
when populating a diff cache entry.  This flag is provided primarily
as a backdoor to disable the intraline difference feature if
necessary.  To maintain backwards compatibility with prior versions,
this setting will fallback to `cache.diff.intraline` if not set in the
configuration.
+
Default is true, enabled.

[[cache.projects.loadOnStartup]]cache.projects.loadOnStartup::
+
If the project cache should be loaded during server startup.
+
The cache is loaded concurrently. Admins should ensure that the cache
size set under <<cache.name.memoryLimit,cache.projects.memoryLimit>>
is not smaller than the number of repos.
+
Default is false, disabled.

[[cache.projects.loadThreads]]cache.projects.loadThreads::
+
Only relevant if <<cache.projects.loadOnStartup,cache.projects.loadOnStartup>>
is true.
+
The number of threads to allocate for loading the cache at startup. These
threads will die out after the cache is loaded.
+
Default is the number of CPUs.

[[cache.project_list.interval]]cache.project_list.interval::
+
The link:#schedule-configuration-interval[interval] for running
the project_list cache warmer.

By default, if `cache.project_list.maxAge` is set, `interval` will be set to
half its value. If `cache.project_list.maxAge` is not set or `interval` is set
to `-1`, it is disabled.

[[cache.project_list.startTime]]cache.project_list.startTime::
+
The link:#schedule-configuration-startTime[start time] for running
the project_list cache warmer.

Default is 00:00 if the project_list cache warmer is enabled.

[[capability]]
=== Section capability

[[capability.administrateServer]]capability.administrateServer::
+
Names of groups of users that are allowed to exercise the
`administrateServer` capability, in addition to those listed in
All-Projects. Configuring this option can be a useful fail-safe
to recover a server in the event an administrator removed all
groups from the `administrateServer` capability, or to ensure that
specific groups always have administration capabilities.
+
----
[capability]
  administrateServer = group Fail Safe Admins
----
+
The configuration file uses group names, not UUIDs.  If a group is
renamed the gerrit.config file must be updated to reflect the new
name. If a group cannot be found for the configured name a warning
is logged and the server will continue normal startup.
+
If not specified (default), only the groups listed by All-Projects
may use the `administrateServer` capability.

[[capability.makeFirstUserAdmin]]capability.makeFirstUserAdmin::
+
Whether the first user that logs in to the Gerrit server should
automatically be added to the administrator group and hence get the
`administrateServer` capability assigned. This is useful to bootstrap
the link:config-accounts.html[account data].
+
Default is true.


[[change]]
=== Section change

[[change.allowBlame]]change.allowBlame::
+
Allow blame on side by side diff. If set to false, blame cannot be used.
+
Default is true.

[[change.cacheAutomerge]]change.cacheAutomerge::
+
When reviewing merge commits, the left-hand side shows the output of the result
of JGit's automatic merge algorithm. This option controls whether this output is
cached in the change repository, or if only the diff is cached in the persistent
diff caches (`"git_modified_files"`, `modified_files`, `"git_file_diff"`,
`"file_diff"`).
+
If true, automerge results are stored in the repository under
`refs/cache-automerge/*`; the results of diffing the change against its
automerge base are stored in the diff caches. If false, no extra data is
stored in the repository, only the diff caches. This can result in slight
performance improvements by reducing the number of refs in the repo.
+
Default is true.

[[change.commentSizeLimit]]change.commentSizeLimit::
+
Maximum allowed size in characters of a regular (non-robot) comment. Comments
which exceed this size will be rejected. Size computation is approximate and may
be off by roughly 1%. Common unit suffixes of 'k', 'm', or 'g' are supported.
The value must be positive.
+
The default limit is 16kiB.

[[change.cumulativeCommentSizeLimit]]change.cumulativeCommentSizeLimit::
+
Maximum allowed size in characters of all comments (including robot comments)
and change messages. Size computation is approximate and may be off by roughly
1%. Common unit suffixes of 'k', 'm', or 'g' are supported.
+
The default limit is 3MiB.

[[change.disablePrivateChanges]]change.disablePrivateChanges::
+
If set to true, users are not allowed to create private changes.
+
The default is false.

[[change.enableAttentionSet]]change.enableAttentionSet::
+
If set to true, then all UI features for using and interacting with the
attention set are enabled.
+
The default is true.

[[change.enableAssignee]]change.enableAssignee::
+
If set to true, then all UI features for using and interacting with the
assignee are enabled.
+
The default is false.

[[change.maxComments]]change.maxComments::
+
Maximum number of comments (regular plus robot) allowed per change. Additional
comments are rejected.
+
By default 5,000.

[[change.maxFiles]]change.maxFiles::
+
Maximum number of files allowed per change. Larger changes are rejected and must
be split up.
+
By default 100,000.

[[change.maxPatchSets]]change.maxPatchSets::
+
Maximum number of patch sets allowed per change. If this is insufficient,
recreate the change with a new Change-Id, then abandon the old change.
+
By default 1000.

[[change.maxUpdates]]change.maxUpdates::
+
Maximum number of updates to a change. Counts only updates to the main NoteDb
meta ref; draft comments, robot comments, stars, etc. do not count towards the
total.
+
Many NoteDb operations require walking the entire change meta ref and loading
its contents into memory, so changes with arbitrarily many updates may cause
high CPU usage, memory pressure, persistent cache bloat, and other problems.
+
The following operations are allowed even when a change is at the limit:

* Abandon
* Submit
* Submit by push with `%submit`
* Auto-close by pushing directly to the branch
* Fix with link:rest-api-changes.html#fix-input[`expect_merged_as`]

By default 1000.

[[change.mergeabilityComputationBehavior]]change.mergeabilityComputationBehavior::
+
This setting determines when Gerrit computes if a change is mergeable or not.
This computation is expensive, especially when the repository is large or when
there are many open changes.
+
This config can have the following states:
+
* `API_REF_UPDATED_AND_CHANGE_REINDEX`: Gerrit indexes `mergeability` enabling
  the `is:mergeable` predicate in change search and allowing fast retrieval of
  this bit in query responses. Gerrit will always serve `mergeable` in
  link:rest-api-changes.html#change-info[ChangeInfo] objects.
  Gerrit will reindex all open changes when the target ref advances (expensive).
* `REF_UPDATED_AND_CHANGE_REINDEX`: Gerrit indexes `mergeability` enabling the
  `is:mergeable` predicate in change search and allowing fast retrieval of this
  bit in query responses. Gerrit will never serve `mergeable` in
  link:rest-api-changes.html#change-info[ChangeInfo]
  objects. This state can be a final state for instances that only want to
  optimize the read path, but not the write path for speed or serve as an
  intermediary step for instances that want to optimize both and need to migrate
  callers of their API.
  Gerrit will reindex all open changes when the target ref advances (expensive).
* `NEVER`: Gerrit does not index `mergeable`, so `is:mergeable` is disabled as
  query operator. Gerrit does not serve `mergeable` in
  link:rest-api-changes.html#change-info[ChangeInfo].

NOTE: Gerrit would only render conflict changes section on change
screen if `API_REF_UPDATED_AND_CHANGE_REINDEX` value is set.

Default is `NEVER`.

[[change.conflictsPredicateEnabled]]change.conflictsPredicateEnabled::

+
This setting determines when Gerrit renders conflict changes section on change
screen and also supports `conflicts` predicate. This computation is expensive,
computing ConflictsPredicate has a runtime complexity of O(nˆ2) with n number
of open changes on a branch. When set to false GUI will silently ignore the
error message and leave the conflict changes section on change screen empty.
See also implications on rendering of conflict changes section in configuration
section:link:#change.mergeabilityComputationBehavior[change.mergeabilityComputationBehavior].

Default is true.

[[change.maxSubmittableAtOnce]]change.maxSubmittableAtOnce::
+
Maximum number of changes that can be chained together in the same repository
to be submitted at once.
+
Default is 32767.

[[change.move]]change.move::
+
Whether the link:rest-api-changes.html#move-change[Move Change] REST
endpoint is enabled.
+
The move change functionality has some corner cases with undesired side
effects. Hence administrators may decide to disable this functionality.
In particular, if a change that has dependencies on other changes is
moved to a new branch, and the moved change gets submitted to the new
branch, the changes on which the change depends are silently merged
into the new branch, although these changes have not been moved to that
branch (see details in
link:https://bugs.chromium.org/p/gerrit/issues/detail?id=9877[issue
9877]).
+
By default true.

[[change.robotCommentSizeLimit]]change.robotCommentSizeLimit::
+
Maximum allowed size in characters of a robot comment. Robot comments which
exceed this size will be rejected on addition. Size computation is approximate
and may be off by roughly 1%. Common unit suffixes of 'k', 'm', or 'g' are
supported. Zero or negative values allow robot comments of unlimited size.
+
The default limit is 1MiB.

[[change.sendNewPatchsetEmails]]change.sendNewPatchsetEmails::
+
When false, emails will not be sent to owners, reviewers, and cc for
creating a new patchset unless they are project watchers or have starred
the change.
+
Default is true.

[[change.showAssigneeInChangesTable]]change.showAssigneeInChangesTable::
+
Show assignee field in changes table. If set to false, assignees will
not be visible in changes table.
+
Default is false.

[[change.strictLabels]]change.strictLabels::
+
Reject invalid label votes: invalid labels or invalid values. This
configuration option is provided for backwards compatibility and may
be removed in future gerrit versions.
+
Default is false.

[[change.submitLabel]]change.submitLabel::
+
Label name for the submit button.
+
Default is "Submit".

[[change.submitLabelWithParents]]change.submitLabelWithParents::
+
Label name for the submit button if the change has parents which will
be submitted together with this change.
+
Default is "Submit including parents".

[[change.submitTooltip]]change.submitTooltip::
+
Tooltip for the submit button.  Variables available for replacement
include `${patchSet}` for the current patch set number (1, 2, 3),
`${branch}` for the branch name ("master") and `${commit}` for the
abbreviated commit SHA-1 (`c9c0edb`).
+
Default is "Submit patch set ${patchSet} into ${branch}".

[[change.submitTooltipAncestors]]change.submitTooltipAncestors::
+
Tooltip for the submit button if there are ancestors which would
also be submitted by submitting the change. Additionally to the variables
as in link:#change.submitTooltip[change.submitTooltip], there is the
variable `${submitSize}` indicating the number of changes which are
submitted.
+
Default is "Submit all ${topicSize} changes of the same topic (${submitSize}
changes including ancestors and other changes related by topic)".

[[change.submitTopicLabel]]change.submitTopicLabel::
+
If `change.submitWholeTopic` is set and a change has a topic,
the label name for the submit button is given here instead of
the configuration `change.submitLabel`.
+
Defaults to "Submit whole topic"

[[change.submitTopicTooltip]]change.submitTopicTooltip::
+
If `change.submitWholeTopic` is configured to true and a change has a
topic, this configuration determines the tooltip for the submit button
instead of `change.submitTooltip`. The variable `${topicSize}` is available
for the number of changes in the same topic to be submitted. The number of
all changes to be submitted is in the variable `${submitSize}`.
+
Defaults to "Submit all ${topicSize} changes of the same topic
(${submitSize} changes including ancestors and other
changes related by topic)".

[[change.submitWholeTopic]]change.submitWholeTopic::
+
Determines if the submit button submits the whole topic instead of
just the current change.
+
Default is false.

[[change.updateDelay]]change.updateDelay::
+
How often in seconds the web interface should poll for updates to the
currently open change.  The poller relies on the client's browser
cache to use If-Modified-Since and respect `304 Not Modified` HTTP
responses.  This allows for fast polls, often under 8 milliseconds.
+
With a configured 30 second delay a server with 4900 active users will
typically need to dedicate 1 CPU to the update check.  4900 users
divided by an average delay of 30 seconds is 163 requests arriving per
second.  If requests are served at \~6 ms response time, 1 CPU is
necessary to keep up with the update request traffic.  On a smaller
user base of 500 active users, the default 30 second delay is only 17
requests per second and requires ~10% CPU.
+
If 0 the update polling is disabled.
+
Default is 5 minutes.

[[changeCleanup]]
=== Section changeCleanup

This section allows to configure change cleanups and schedules them to
run periodically.

[[changeCleanup.abandonAfter]]changeCleanup.abandonAfter::
+
Period of inactivity after which open changes should be abandoned
automatically.
+
By default `0`, never abandon open changes.
+
[WARNING] Auto-Abandoning changes may confuse/annoy users. When
enabling this, make sure to choose a reasonably large grace period and
inform users in advance.
+
The following suffixes are supported to define the time unit:
+
* `d, day, days`
* `w, week, weeks` (`1 week` is treated as `7 days`)
* `mon, month, months` (`1 month` is treated as `30 days`)
* `y, year, years` (`1 year` is treated as `365 days`)

[[changeCleanup.abandonIfMergeable]]changeCleanup.abandonIfMergeable::
+
Whether changes which are mergeable should be auto-abandoned. When set
to `false`, `-is:mergeable` is appended to the query used to find
the changes to auto-abandon.
+
By default `true`, meaning mergeable changes are auto-abandoned.
+
If
link:#change.mergeabilityComputationBehavior[`change.mergeabilityComputationBehavior`]
is set to `NEVER`, setting this option to `false` has no effect and it behaves
as though it were set to `true`.

[[changeCleanup.cleanupAccountPatchReview]]changeCleanup.cleanupAccountPatchReview::
+
Whether accountPatchReview data should be also removed when change
gets auto-abandoned.
+
By default `false`.

[[changeCleanup.abandonMessage]]changeCleanup.abandonMessage::
+
Change message that should be posted when a change is abandoned.
+
'${URL}' can be used as a placeholder for the Gerrit web URL.
+
By default "Auto-Abandoned due to inactivity, see
${URL}Documentation/user-change-cleanup.html#auto-abandon\n\n
If this change is still wanted it should be restored.".

[[changeCleanup.startTime]]changeCleanup.startTime::
+
The link:#schedule-configuration-startTime[start time] for running
change cleanups.

[[changeCleanup.interval]]changeCleanup.interval::
+
The link:#schedule-configuration-interval[interval] for running
change cleanups.

link:#schedule-configuration-examples[Schedule examples] can be found
in the link:#schedule-configuration[Schedule Configuration] section.

[[commentlink]]
=== Section commentlink

Comment links are find/replace strings applied to change descriptions,
patch comments, in-line code comments and approval category value descriptions
to turn set strings into hyperlinks.  One common use is for linking to
bug-tracking systems.

In the following example configuration the 'changeid' comment link
will match typical Gerrit Change-Id values and create a hyperlink
to changes which reference it.  The second configuration 'bugzilla'
will hyperlink terms such as 'bug 42' to an external bug tracker,
supplying the argument record number '42' for display.

commentlinks supports link:#reloadConfig[configuration reloads]. Though a
link:cmd-flush-caches.html[flush-caches] of "projects" is needed for the
commentlinks to be immediately available in the UI.

----
[commentlink "changeid"]
  match = (I[0-9a-f]{8,40})
  link = "#/q/$1"

[commentlink "bugzilla"]
  match = "(^|\\s)(bug\\s+#?)(\\d+)($|\\s)"
  link = http://bugs.example.com/show_bug.cgi?id=$3
  prefix = $1
  suffix = $4
  text = $2$3
----

Comment links can also be specified in `project.config` and sections in
children override those in parents.

[[commentlink.name.match]]commentlink.<name>.match::
+
A JavaScript regular expression to match positions to be replaced
with a hyperlink.  Subexpressions of the matched string can be
stored using groups and accessed with `$'n'` syntax, where 'n'
is the group number, starting from 1.
+
The configuration file parser eats one level of backslashes, so the
character class `\s` requires `\\s` in the configuration file.  The
parser also terminates the line at the first `#`, so a match
expression containing # must be wrapped in double quotes.
+
To match case insensitive strings, a character class with both the
upper and lower case character for each position must be used.  For
example, to match the string `bug` in a case insensitive way the match
pattern `[bB][uU][gG]` needs to be used.
+
The commentlink.name.match regular expressions are applied to the raw,
unformatted and unescaped text form. Regex matching against HTML is not
supported. Comment link patterns that are written in this style should
be updated to match text formats.
+
A common pattern to match is `bug\\s+(\\d+)`.
+
In order to better control the visual presentation of the link `prefix`,
`suffix` and `text` is used. With the generated link html looking like:
`prefix<a ...>text</a>suffix`.

[[commentlink.name.link]]commentlink.<name>.link::
+
The URL to direct the user to whenever the regular expression is
matched.  Groups in the match expression may be accessed as `$'n'`.

[[commentlink.name.prefix]]commentlink.<name>.prefix::
+
The text inserted before the link. Groups in the match expression may be
accessed as `$'n'`.

[[commentlink.name.suffix]]commentlink.<name>.suffix::
+
The text inserted after the link. Groups in the match expression may be
accessed as `$'n'`.

[[commentlink.name.text]]commentlink.<name>.text::
+
The text content of the link. Groups in the match expression may be
accessed as `$'n'`.
+
If not specified defaults to `$&` (the matched text).

[[commentlink.name.enabled]]commentlink.<name>.enabled::
+
Whether the comment link is enabled. A child project may override a
section in a parent or the site-wide config that is disabled by
specifying `enabled = true`.
+
By default, true.
+
Note that the names and contents of disabled sections are visible even
to anonymous users via the
link:rest-api-projects.html#get-config[REST API].


[[container]]
=== Section container

These settings are applied only if Gerrit is started as the container
process through Gerrit's 'gerrit.sh' rc.d compatible wrapper script.

[[container.heapLimit]]container.heapLimit::
+
Maximum heap size of the Java process running Gerrit, in bytes.
This property is translated into the '-Xmx' flag for the JVM.
+
Default is platform and JVM specific.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[container.javaHome]]container.javaHome::
+
Path of the JRE/JDK installation to run Gerrit with.  If not set, the
Gerrit startup script will attempt to search your system and guess
a suitable JRE.  Overrides the environment variable 'JAVA_HOME'.

[[container.javaOptions]]container.javaOptions::
+
Additional options to pass along to the Java runtime. May be specified
multiple times to configure multiple values. If multiple values are
configured, they are passed in order on the command line, separated by
spaces.  These options are appended onto 'JAVA_OPTIONS'.
+
For example, it is possible to overwrite Gerrit's default log4j
configuration:
+
----
  javaOptions = -Dlog4j.configuration=file:///home/gerrit/site/etc/log4j.properties
----
+
Gerrit built-in loggers are then ignored: error logger (`error_log` file),
link:#httpd.requestLog[httpd.requestLog] and
link:#sshd.requestLog[sshd.requestLog]. The
link:#log.jsonLogging[log.jsonLogging] and
link:#log.textLogging[log.textLogging] options are also ignored.

[[container.daemonOpt]]container.daemonOpt::
+
Additional options to pass to the daemon (e.g. '--enable-httpd'). If
multiple values are configured, they are passed in that order to the command
line, separated by spaces.
+
Execute `java -jar gerrit.war daemon --help` to see all possible
options.

[[container.replica]]container.replica::
+
Used on Gerrit replica installations. If set to true the Gerrit JVM is
called with the '--replica' switch, enabling replica mode. If no value is
set (or any other value), Gerrit defaults to primary mode enabling write
operations.

[[container.slave]]container.slave::
+
Backward compatibility for link:#container.replica[`container.replica`]
config setting.

[[container.startupTimeout]]container.startupTimeout::
+
The maximum time (in seconds) to wait for a gerrit.sh start command
to run a new Gerrit daemon successfully.  If not set, defaults to
90 seconds.

[[container.user]]container.user::
+
Login name (or UID) of the operating system user the Gerrit JVM
will execute as.  If not set, defaults to the user who launched
the 'gerrit.sh' wrapper script.

[[container.war]]container.war::
+
Path of the JAR file to start daemon execution with.  This should
be the path of the local 'gerrit.war' archive.  Overrides the
environment variable 'GERRIT_WAR'.
+
If not set, defaults to '$site_path/bin/gerrit.war', or to
'$HOME/gerrit.war'.


[[core]]
=== Section core

[NOTE]
The link:#jgitConfig[etc/jgit.config] file supports configuration of all JGit
options.

[[core.packedGitWindowSize]]core.packedGitWindowSize::
+
Number of bytes of a pack file to load into memory in a single
read operation.  This is the "page size" of the JGit buffer cache,
used for all pack access operations.  All disk IO occurs as single
window reads.  Setting this too large may cause the process to load
more data than is required; setting this too small may increase
the frequency of `read()` system calls.
+
Default on JGit is 8 KiB on all platforms.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[core.packedGitLimit]]core.packedGitLimit::
+
Maximum number of bytes to load and cache in memory from pack files.
If JGit needs to access more than this many bytes it will unload less
frequently used windows to reclaim memory space within the process.
As this buffer must be shared with the rest of the JVM heap, it
should be a fraction of the total memory available.
+
Default on JGit is 10 MiB on all platforms.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[core.packedGitUseStrongRefs]]core.packedGitUseStrongRefs::
+
Set to `true` in order to use strong references to reference packfile
pages cached in the WindowCache. Otherwise SoftReferences are used.
If this option is set to `false`, the Java garbage collector will
flush the WindowCache to free memory if the used heap comes close to
the maximum heap size. This has the advantage that it can quickly
reclaim memory which was used by the WindowCache but comes at the
price that the previously cached pack file content needs to be again
copied from the file system cache to the Gerrit process.
Setting this option to `true` prevents flushing the WindowCache
which provides more predictable performance.
+
Default is `false`.

[[core.deltaBaseCaseLimit]]core.deltaBaseCacheLimit::
+
Maximum number of bytes to reserve for caching base objects
that multiple deltafied objects reference.  By storing the entire
decompressed base object in a cache Git is able to avoid unpacking
and decompressing frequently used base objects multiple times.
+
Default on JGit is 10 MiB on all platforms.  You probably do not
need to adjust this value.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[core.packedGitOpenFiles]]core.packedGitOpenFiles::
+
Maximum number of pack files to have open at once.  A pack file
must be opened in order for any of its data to be available in
a cached window.
+
If you increase this to a larger setting you may need to also adjust
the ulimit on file descriptors for the host JVM, as Gerrit needs
additional file descriptors available for network sockets and other
repository data manipulation.
+
Default on JGit is 128 file descriptors on all platforms.

[[core.streamFileThreshold]]core.streamFileThreshold::
+
Largest object size, in bytes, that JGit will allocate as a
contiguous byte array.  Any file revision larger than this threshold
will have to be streamed, typically requiring the use of temporary
files under '$GIT_DIR/objects' to implement pseudo-random access
during delta decompression.
+
Servers with very high traffic should set this to be larger than
the size of their common big files.  For example a server managing
the Android platform typically has to deal with ~10-12 MiB XML
files, so `15 m` would be a reasonable setting in that environment.
Setting this too high may cause the JVM to run out of heap space
when handling very big binary files, such as device firmware or
CD-ROM ISO images.
+
Defaults to 25% of the available JVM heap, limited to 2g.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[core.packedGitMmap]]core.packedGitMmap::
+
When true, JGit will use `mmap()` rather than `malloc()+read()`
to load data from pack files.  The use of mmap can be problematic
on some JVMs as the garbage collector must deduce that a memory
mapped segment is no longer in use before a call to `munmap()`
can be made by the JVM native code.
+
In server applications (such as Gerrit) that need to access many
pack files, setting this to true risks artificially running out
of virtual address space, as the garbage collector cannot reclaim
unused mapped spaces fast enough.
+
Default on JGit is false. Although potentially slower, it yields
much more predictable behavior.

[[core.asyncLoggingBufferSize]]core.asyncLoggingBufferSize::
+
Size of the buffer to store logging events for asynchronous logging.
Putting a larger value can protect threads from stalling when the
AsyncAppender threads are not fast enough to consume the logging events
from the buffer. It also protects from losing log entries in this case.
+
Default is 64 entries.

[[core.useRecursiveMerge]]core.useRecursiveMerge::
+
Use JGit's recursive merger for three-way merges. This only affects
projects that allow content merges.
+
As explained in this
link:http://codicesoftware.blogspot.com/2011/09/merge-recursive-strategy.html[
blog,role=external,window=_blank], the recursive merge produces better results if the two commits
that are merged have more than one common predecessor.
+
Default is true.

[[core.repositoryCacheCleanupDelay]]core.repositoryCacheCleanupDelay::
+
Delay between each periodic cleanup of expired repositories.
+
Values can be specified using standard time unit abbreviations (`ms`, `sec`,
`min`, etc.).
+
Set it to 0 in order to switch off cache expiration. If cache expiration is
switched off, the JVM can still evict cache entries when it is running low
on available heap memory.
+
Set it to -1 to automatically derive cleanup delay from
`core.repositoryCacheExpireAfter` (lowest value between 1/10 of
`core.repositoryCacheExpireAfter` and 10 minutes).
+
Default is -1.

[[core.repositoryCacheExpireAfter]]core.repositoryCacheExpireAfter::
+
Time an unused repository should expire and be evicted from the repository
cache.
+
Values can be specified using standard time unit abbreviations (`ms`, `sec`,
`min`, etc.).
+
Default is 1 hour.

[[dashboard]]
=== Section dashboard

[[dashboard.submitRequirementColumns]]dashboard.submitRequirementColumns::
+
The list of submit requirement names that should be displayed as separate
columns in the dashboard.

[[download]]
=== Section download

----
[download]
  command = checkout
  command = cherry_pick
  command = pull
  command = format_patch
  scheme = ssh
  scheme = http
  scheme = anon_http
  scheme = anon_git
  scheme = repo
----

The download section configures the allowed download methods.

[[download.command]]download.command::
+
Commands that should be offered to download changes.
+
Multiple commands are supported:
+
* `checkout`
+
Command to fetch and checkout the patch set.
+
* `cherry_pick`
+
Command to fetch the patch set and to cherry-pick it onto the current
commit.
+
* `pull`
+
Command to pull the patch set.
+
* `format_patch`
+
Command to fetch the patch set and to feed it into the `format-patch`
command.

+
If `download.command` is not specified, all download commands are
offered.

[[download.scheme]]download.scheme::
+
Schemes that should be used to download changes.
+
Multiple schemes are supported:
+
* `http`
+
Authenticated HTTP download is allowed.
+
* `ssh`
+
Authenticated SSH download is allowed.
+
* `anon_http`
+
Anonymous HTTP download is allowed.
+
* `anon_git`
+
Anonymous Git download is allowed.  This is not default, it is also
necessary to set <<gerrit.canonicalGitUrl,gerrit.canonicalGitUrl>>
variable.
+
* `repo`
+
Gerrit advertises patch set downloads with the `repo download`
command, assuming that all projects managed by this instance are
generally worked on with the
https://gerrit.googlesource.com/git-repo[repo multi-repository tool].
This is not default, as not all instances will deploy repo.

+
If `download.scheme` is not specified, SSH, HTTP and Anonymous HTTP
downloads are allowed.

[[download.checkForHiddenChangeRefs]]download.checkForHiddenChangeRefs::
+
Whether the download commands should be adapted when the change refs
are hidden.
+
Git has a configuration option to hide refs from the initial
advertisement (`uploadpack.hideRefs`). This option can be used to hide
the change refs from the client. As consequence fetching changes by
change ref does not work anymore. However by setting
`uploadpack.allowTipSha1InWant` to `true` fetching changes by commit ID
is possible. If `download.checkForHiddenChangeRefs` is set to `true`
the git download commands use the commit ID instead of the change ref
when a project is configured like this.
+
Example git configuration on a project:
+
----
[uploadpack]
  hideRefs = refs/changes/
  hideRefs = refs/cache-automerge/
  allowTipSha1InWant = true
----
+
By default `false`.

[[download.archive]]download.archive::
+
Specifies which archive formats, if any, should be offered on the change
screen and supported for `git-upload-archive` operation:
+
----
[download]
  archive = tar
  archive = tbz2
  archive = tgz
  archive = txz
  archive = zip
----

If `download.archive` is not specified defaults to all archive
commands. Set to `off` or empty string to disable.

Zip is not supported because it may be interpreted by a Java plugin as a
valid JAR file, whose code would have access to cookies on the domain.
For this reason `zip` format is always excluded from formats offered
through the `Download` drop down or accessible in the REST API.

[[download.maxBundleSize]]download.maxBundleSize::
+
Specifies the maximum size of a bundle in bytes that can be downloaded.
As bundles are kept in memory this setting is to protect the server
from a single request consuming too much heap when generating
a bundle and thereby impacting other users.
+
Defaults to 100MB.

[[gc]]
=== Section gc

This section allows to configure the git garbage collection and schedules it
to run periodically. It will be triggered and executed sequentially for all
projects.

[[gc.aggressive]]gc.aggressive::
+
Determines if scheduled garbage collections and garbage collections triggered
through Web-UI should run in aggressive mode or not. Aggressive garbage
collections are more expensive but may lead to significantly smaller
repositories.
+
Valid values are "true" and "false," default is "false".

[[gc.startTime]]gc.startTime::
+
The link:#schedule-configuration-startTime[start time] for running the
git garbage collection.

[[gc.interval]]gc.interval::
+
The link:#schedule-configuration-interval[interval] for running the
git garbage collection.

link:#schedule-configuration-examples[Schedule examples] can be found
in the link:#schedule-configuration[Schedule Configuration] section.

[[gerrit]]
=== Section gerrit

[[gerrit.basePath]]gerrit.basePath::
+
Local filesystem directory holding all Git repositories that
Gerrit knows about and can process changes for.  A project
entity in Gerrit maps to a local Git repository by creating
the path string `"${basePath}/${project_name}.git"`.
+
If relative, the path is resolved relative to `'$site_path'`.

[[gerrit.allProjects]]gerrit.allProjects::
+
Name of the permissions-only project defining global server
access controls and settings. These are inherited into every
other project managed by the running server. The name is
relative to `gerrit.basePath`.
+
The link:#cache_names[persisted_projects cache] must be
flushed after this setting is changed.
+
Defaults to `All-Projects` if not set.

[[gerrit.defaultBranch]]gerrit.defaultBranch::
+
Name of the link:project-configuration.html#default-branch[default branch]
to use on the project creation, if no other branches were specified in the input.
+
Defaults to `refs/heads/master` if not set.

[[gerrit.allUsers]]gerrit.allUsers::
+
Name of the project in which meta data of all users is stored.
The name is relative to `gerrit.basePath`.
+
Defaults to `All-Users` if not set.

[[gerrit.canonicalWebUrl]]gerrit.canonicalWebUrl::
+
The default URL for Gerrit to be accessed through.
+
Typically this would be set to something like "http://review.example.com/"
or "http://example.com:8080/gerrit/" so Gerrit can output links that point
back to itself.
+
Setting this is highly recommended, as it is necessary for the upload
code invoked by "git push" or "repo upload" to output hyperlinks
to the newly uploaded changes.

[[gerrit.canonicalGitUrl]]gerrit.canonicalGitUrl::
+
Optional base URL for repositories available over the anonymous git
protocol.  For example, set this to `git://mirror.example.com/base/`
to have Gerrit display patch set download URLs in the UI.  Gerrit
automatically appends the project name onto the end of the URL.
+
By default unset, as the git daemon must be configured externally
by the system administrator, and might not even be running on the
same host as Gerrit.

[[gerrit.docUrl]]gerrit.docUrl::
+
Optional base URL for documentation, under which one can find
"index.html", "rest-api.html", etc. Used as the base for the fixed set
of links in the "Documentation" tab. A slash is implicitly appended.
(For finer control over the top menu, consider writing a
link:dev-plugins.html#top-menu-extensions[plugin].)
+
If unset or empty, the documentation tab will only be shown if
`/Documentation/index.html` can be reached by the browser at app load
time.

[[gerrit.editGpgKeys]]gerrit.editGpgKeys::
+
If enabled and server-side signed push validation is also
link:#receive.enableSignedPush[enabled], enable the
link:rest-api-accounts.html#list-gpg-keys[REST API endpoints] and web UI
for editing GPG keys. If disabled, GPG keys can only be added by
administrators with direct git access to All-Users.
+
Defaults to true.

[[gerrit.installCommitMsgHookCommand]]gerrit.installCommitMsgHookCommand::
+
Optional command to install the `commit-msg` hook. Typically of the
form:
+
----
fetch-cmd some://url/to/commit-msg .git/hooks/commit-msg ; chmod +x .git/hooks/commit-msg
----
+
By default unset; falls back to using scp from the canonical SSH host,
or curl from the canonical HTTP URL for the server.  Only necessary if a
proxy or other server/network configuration prevents clients from
fetching from the default location.

[[gerrit.gitHttpUrl]]gerrit.gitHttpUrl::
+
Optional base URL for repositories available over the HTTP
protocol.  For example, set this to `http://mirror.example.com/base/`
to have Gerrit display URLs from this server, rather than itself.
+
By default unset, as the HTTP daemon must be configured externally
by the system administrator, and might not even be running on the
same host as Gerrit.

[[gerrit.installBatchModule]]gerrit.installBatchModule::
+
Repeatable list of class name of additional Guice modules to load as
override to the batchInjector's modules during the init phases.
Classes are resolved using the primary Gerrit class loader, hence the
class needs to be either declared in Gerrit or an additional JAR
located under the `/lib` directory.
+
By default unset.

[[gerrit.installDbModule]]gerrit.installDbModule::
+
Repeatable list of class name of additional Guice modules to load at
Gerrit startup as part of the dbInjector.
Classes are resolved using the primary Gerrit class loader, hence the
class needs to be either declared in Gerrit or an additional JAR
located under the `/lib` directory.
+
By default unset.

[[gerrit.installIndexModule]]gerrit.installIndexModule::
+
Class name of the Guice modules to load as alternate implementation
for the Gerrit indexes backend.
Classes are resolved using the primary Gerrit class loader, hence the
class needs to be either declared in Gerrit or an additional JAR
located under the `/lib` directory.
+
NOTE: The `gerrit.installIndexModule` has precedence over the
`index.type`.
+
By default unset.
+
Example:
----
[gerrit]
  installIndexModule = com.google.gerrit.elasticsearch.ElasticIndexModule
----
+
[[gerrit.installModule]]gerrit.installModule::
+
Repeatable list of class name of additional Guice modules to load at
Gerrit startup as part of the sysInjector.
Classes are resolved using the primary Gerrit class loader, hence the
class needs to be either declared in Gerrit or an additional JAR
located under the `/lib` directory.
+
By default unset.
+
Example:
----
[gerrit]
  installModule = com.googlesource.gerrit.libmodule.MyModule
  installModule = com.example.abc.OurSpecialSauceModule
  installDbModule = com.example.def.OurCustomProvider
  installBatchModule = com.example.ghi.CustomBatchInitModule
----

[[gerrit.listProjectsFromIndex]]gerrit.listProjectsFromIndex::
+
Enable rendering of project list from the secondary index instead
of purely relying on the in-memory cache.
+
By default false.
+
[NOTE]
The in-memory cache (set to false) rendering provides an **unlimited list** as a result
of the list project API, causing the full list of projects to be
returned as a result of the link:rest-api-projects.html[/projects/] REST API
or the link:cmd-ls-projects.html[gerrit ls-projects] SSH command.
When the rendering from the secondary index (set to true),
the **list is limited** by the global capability
link:access-control.html#capability_queryLimit[queryLimit]
which is defaulted to 500 entries.

[[gerrit.primaryWeblinkName]]gerrit.primaryWeblinkName::
+
Name of the link:dev-plugins.html#links-to-external-tools[Weblink] that should
be chosen in cases where only one Weblink can be used in the UI, for example in
inline links.
+
By default unset, meaning that the UI is responsible for trying to identify
a weblink to be used in these cases, most likely weblinks that links to code
browsers with known integrations with Gerrit (like Gitiles and Gitweb).
+
Example:
----
[gerrit]
  primaryWeblinkName = gitiles
----

[[gerrit.reportBugUrl]]gerrit.reportBugUrl::
+
URL to direct users to when they need to report a bug.
+
By default unset, meaning no bug report URL will be displayed. Administrators
should set this to the URL of their issue tracker, if necessary.

[[gerrit.enablePeerIPInReflogRecord]]gerrit.enablePeerIPInReflogRecord::

Record actual peer IP address in ref log entry for identified user.

Defaults to false.

[[gerrit.secureStoreClass]]gerrit.secureStoreClass::
+
Use the secure store implementation from a specified class.
+
If specified, must be the fully qualified class name of a class that implements
the `com.google.gerrit.server.securestore.SecureStore` interface, and the jar
file containing the class must be placed in the `$site_path/lib` folder.
+
If not specified, the default no-op implementation is used.

[[gerrit.canLoadInIFrame]]gerrit.canLoadInIFrame::
+
For security reasons Gerrit will always jump out of iframe.
Setting this option to true will prevent this behavior.
+
By default false.

[[gerrit.xframeOption]]gerrit.xframeOption::
+
Add link:https://tools.ietf.org/html/rfc7034[`X-Frame-Options`] header to all HTTP
responses. The `X-Frame-Options` HTTP response header can be used to indicate
whether or not a browser should be allowed to render a page in a
`<frame>`, `<iframe>`, `<embed>` or `<object>`.
+
Available values:
+
1. ALLOW - The page can be displayed in a frame.
2. SAMEORIGIN - The page can only be displayed in a frame on the same origin as the page itself.
+
If link:#gerrit.canLoadInIFrame is set to false this option is ignored and the
`X-Frame-Options` header is always set to `DENY`.
Setting this option to `ALLOW` will cause the `X-Frame-Options` header to be omitted
the the page can be displayed in a frame.
+
By default SAMEORIGIN.

[[gerrit.cdnPath]]gerrit.cdnPath::
+
Path prefix for Gerrit's static resources if using a CDN.

[[gerrit.faviconPath]]gerrit.faviconPath::
+
Path for Gerrit's favicon after link:#gerrit.canonicalWebUrl[default URL],
including icon name and extension (.ico should be used).

[[gerrit.instanceId]]gerrit.instanceId::
+
Optional identifier for this Gerrit instance.
Used to identify a specific instance within a group of Gerrit instances with the
same `serverId` (i.e.: a Gerrit cluster).
Unlike `instanceName` this value is not available in the email templates.

[[gerrit.instanceName]]gerrit.instanceName::
+
Short identifier for this Gerrit instance.
A good name should be short but precise enough so that users can identify the instance among others.
+
Defaults to the full hostname of the Gerrit server.

[[gerrit.experimentalRollingUpgrade]]gerrit.experimentalRollingUpgrade::
+
Enable Gerrit rolling upgrade to the next version.
For example if Gerrit v3.2 is version N (All-Projects:refs/meta/version=183)
then its next version N+1 is v3.3 (All-Projects:refs/meta/version=184).
Allow Gerrit to start even if the underlying schema version has been bumped to
the next Gerrit version.
+
Set to true if Gerrit is installed in
[high-availability configuration](https://gerrit.googlesource.com/plugins/high-availability/+/refs/heads/master/README.md)
during the rolling upgrade to the next version.
+
By default false.
+
The rolling upgrade process, at high level, assumes that Gerrit is installed
on two or more nodes sharing the repositories over NFS. The upgrade is composed
of the following steps:
+
1. Set gerrit.experimentalRollingUpgrade to true on all Gerrit masters
2. Set the first master unhealthy
3. Shutdown the first master and [upgrade](install.html#init) to the next version
4. Startup the first master, wait for the online reindex to complete (where applicable)
5. Verify the the first master upgrade is successful and online reindex is complete
6. Set the first master healthy
7. Repeat steps 2. to 6. for all the other Gerrit nodes
+
[WARNING]
Rolling upgrade may or may not be possible depending on the changes introduced
by the target version of the upgrade. Refer to the release notes and check whether
the rolling upgrade is possible or not and the associated constraints.

[[gerrit.importedServerId]]gerrit.importedServerId::
+
ServerId of the repositories imported from other Gerrit servers. Changes coming
associated with the imported serverIds are indexed and displayed in the UI.
+
Specify multiple `gerrit.importedServerId` for allowing the import from multiple
Gerrit servers with different serverIds.
+
[NOTE]
The account-ids referenced in the imported changes are used for looking up the
associated account-id locally, using the `imported:` external-id.
Example: the account-id 1000 from the imported server-id 59a4964e-6376-4ed9-beef
will be looked up in the local accounts using the `imported:1000@59a4964e-6376-4ed9-beef`
external-id.
+
If this value is not set, all changes imported from other Gerrit servers will be
ignored.
+
By default empty.

[[gerrit.serverId]]gerrit.serverId::
+
Used by NoteDb to, amongst other things, identify author identities from
per-server specific account IDs.
+
If this value is not set on startup it is automatically set to a random UUID.
+
[NOTE]
If this value doesn't match the serverId used when creating an already existing
NoteDb, Gerrit will not be able to use that instance of NoteDb. The serverId
used to create the NoteDb will show in the resulting exception message in case
the value differs.

[[gitweb]]
=== Section gitweb

Gerrit can forward requests to either an internally managed gitweb
(which allows Gerrit to enforce some access controls), or to an
externally managed gitweb (where the web server manages access).
See also link:config-gitweb.html[Gitweb Integration].

[[gitweb.cgi]]gitweb.cgi::
+
Path to the locally installed `gitweb.cgi` executable.  This CGI will
be called by Gerrit Code Review when the URL `/gitweb` is accessed.
Project level access controls are enforced prior to calling the CGI.
+
Defaults to `/usr/lib/cgi-bin/gitweb.cgi` if `gitweb.url` is not set.

[[gitweb.url]]gitweb.url::
+
Optional URL of an affiliated gitweb service.  Defines the
web location where a `gitweb.cgi` is installed to browse
`gerrit.basePath` and the repositories it contains.
+
Gerrit appends any necessary query arguments onto the end of this URL.
For example, `?p=$project.git;h=$commit`.

[[gitweb.type]]gitweb.type::
+
Optional type of affiliated gitweb service. This allows using
alternatives to gitweb, such as cgit.
+
Valid values are `gitweb`, `cgit`, `disabled` or `custom`.
+
If not set, or set to `disabled`, there is no gitweb hyperlinking
support.

[[gitweb.revision]]gitweb.revision::
+
Optional pattern to use for constructing the gitweb URL when pointing
at a specific commit when `gitweb.type` is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit
and `${commit}` for the SHA-1 hash for the commit.

[[gitweb.project]]gitweb.project::
+
Optional pattern to use for constructing the gitweb URL when pointing
at a specific project when `gitweb.type` is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit.

[[gitweb.branch]]gitweb.branch::
+
Optional pattern to use for constructing the gitweb URL when pointing
at a specific branch when `gitweb.type` is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit
and `${branch}` for the name of the branch.

[[gitweb.tag]]gitweb.tag::
+
Optional pattern to use for constructing the gitweb URL when pointing
at a specific tag when `gitweb.type` is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit
and `${tag}` for the name of the tag.

[[gitweb.roottree]]gitweb.roottree::
+
Optional pattern to use for constructing the gitweb URL when pointing
at the contents of the root tree in a specific commit when `gitweb.type`
is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit
and `${commit}` for the SHA-1 hash for the commit.

[[gitweb.file]]gitweb.file::
+
Optional pattern to use for constructing the gitweb URL when pointing
at the contents of a file in a specific commit when `gitweb.type` is
set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit,
`${file}` for the file name, `${hash}` for the SHA-1 hash for the commit,
and `${commit}` for the change ref or SHA-1 of the commit if no base
patch set.

[[gitweb.filehistory]]gitweb.filehistory::
+
Optional pattern to use for constructing the gitweb URL when pointing
at the history of a file in a specific branch when when `gitweb.type`
is set to `custom`.
+
Valid replacements are `${project}` for the project name in Gerrit,
`${file}` for the file name and `${branch}` for the name of the
branch.

[[gitweb.linkname]]gitweb.linkname::
+
Optional setting for modifying the link name presented to the user
in the Gerrit web-UI.
+
The default linkname for custom type is `gitweb`.

[[gitweb.pathSeparator]]gitweb.pathSeparator::
+
Optional character to substitute the standard path separator (slash) in
project names and branch names.
+
By default, Gerrit will use hexadecimal encoding for slashes in project and
branch names. Some web servers, such as Tomcat, reject this hexadecimal
encoding in the URL.
+
Some alternative gitweb services, such as link:http://gitblit.com[Gitblit,role=external,window=_blank],
allow using an alternative path separator character. In Gitblit, this can be
configured through the property link:http://gitblit.com/properties.html[web.forwardSlashCharacter,role=external,window=_blank].
In Gerrit, the alternative path separator can be configured correspondingly
using the property `gitweb.pathSeparator`.
+
Valid values are the characters `*`, `(` and `)`.

[[gitweb.urlEncode]]gitweb.urlEncode::
+
Whether or not Gerrit should encode the generated viewer URL.
+
Gerrit composes the viewer URL using information about the project, branch, file
or commit of the target object to be displayed. Typically viewers such as CGit
and gitweb do need those parts to be encoded, including the `/` in project's name,
for being correctly parsed.
However other viewers could instead require an unencoded URL (e.g. GitHub web
based viewer).
+
Valid values are `true` and `false`. The default is `true`.

[[groups]]
=== Section groups

[[groups.includeExternalUsersInRegisteredUsersGroup]]groups.includeExternalUsersInRegisteredUsersGroup::
+
Controls whether external users (these are users we have sufficient
knowledge about but who don't yet have a Gerrit account) are considered
to be members of the `REGISTERED_USERS` group.
+
This setting only makes sense if you run custom code (e.g. from a plugin
or a custom authentication backend). By default, Gerrit core always requires
users to register and doesn't use external users.
+
By default, true.

[[groups.newGroupsVisibleToAll]]groups.newGroupsVisibleToAll::
+
Controls whether newly created groups should be by default visible to
all registered users.
+
By default, false.

[[groups.uuid.name]]groups.<uuid>.name::
+
Display name for group with the given UUID.
+
This option is only supported for system groups (scheme 'global').
+
E.g. this parameter can be used to configure another name for the
`Anonymous Users` group:
+
----
[groups "global:Anonymous-Users"]
  name = All Users
----
+
When setting this parameter it should be verified that there is no
existing group with the same name (case-insensitive). Configuring an
ambiguous name makes Gerrit fail on startup. Once set Gerrit ensures
that it is not possible to create a group with this name. Gerrit also
keeps the default name reserved so that it cannot be used for new
groups either. This means there is no danger of ambiguous group names
when this parameter is removed and the system group uses the default
name again.

[[groups.relevantGroup]]groups.relevantGroup::
+
UUID of an external group that should always be considered as relevant
when checking whether an account is visible.
+
This setting is only relevant for external group backends and only if
the link:#accounts.visibility[account visibility] is set to
`SAME_GROUP` or `VISIBLE_GROUP`.
+
If the link:#accounts.visibility[account visibility] is set to
`SAME_GROUP` or `VISIBLE_GROUP` users should see all accounts that are
a member of a group that contains themselves or that is visible to
them. Checking this would require getting all groups of the current
user and all groups of the accounts for which the visibility is being
checked, but since getting all groups that a user is a member of is
expensive for external group backends Gerrit doesn't query these groups
but instead guesses the relevant groups. Guessing relevant groups
limits the inspected groups to all groups that are mentioned in the
ACLs of the projects that are currently cached (i.e. all groups that
are listed in the link:config-project-config.html#file-groups[groups]
files of the cached projects). This is not very reliable since it
depends on which groups are mentioned in the ACLs and which projects
are currently cached. To make this more reliable this configuration
parameter allows to configure external groups that should always be
considered as relevant.
+
As said this setting is only relevant for external group backends. In
Gerrit core this is only the LDAP backend, but it may apply to further
group backends that are added by plugins.
+
This parameter may be added multiple times to specify multiple relevant
groups.

[[has-operand-alias]]
=== Section has operand alias

'has' operand aliasing allows global aliases to be defined for query
'has' operands. Currently only change queries are supported. The alias
name is the git config key name, and the 'has' operand being aliased
is the git config value.

For example:

----
[has-operand-alias "change"]
  oldtopic = topic
----

This section is particularly useful to alias 'has' operands (which may
be long and clunky as they include a plugin name in them) to shorter
operands without the plugin name. Admins should take care to choose
shorter operands that are unique and unlikely to conflict in the future.

Aliases are resolved dynamically at invocation time to the currently
loaded version of plugins. If a referenced plugin is not loaded, or
does not define the command, "unsupported operand" is returned to the
user.

Aliases will override existing 'has' operands. In case of multiple
aliases with same name, the last one defined will be used.

When the target of an alias does not exist, the 'has' operand with the
name of the alias will be used (if present). This enables an admin to
configure the system to override a core 'has' operand with an operand
provided by a plugin when present and otherwise fall back to the 'has'
operand provided by core.

[[http]]
=== Section http

[[http.proxy]]http.proxy::
+
URL of the proxy server when making outgoing HTTP
connections for OpenID login transactions.  Syntax
should be `http://`'hostname'`:`'port'.

[[http.proxyUsername]]http.proxyUsername::
+
Optional username to authenticate to the HTTP proxy with.
This property is honored only if the username does not
appear in the http.proxy property above.

[[http.proxyPassword]]http.proxyPassword::
+
Optional password to authenticate to the HTTP proxy with.
This property is honored only if the password does not
appear in the http.proxy property above.

[[http.addUserAsRequestAttribute]]http.addUserAsRequestAttribute::
+
If true, 'User' attribute will be added to the request attributes so it
can be accessed outside the request scope (will be set to username or id
if username not configured).
+
This attribute can be used by the servlet container to log user in the
http access log.
+
When running the embedded servlet container, this attribute is used to
print user in the httpd_log.
+
* `%{User}r`
+
Pattern to print user in Tomcat AccessLog.

+
Default value is true.

[[http.addUserAsResponseHeader]]http.addUserAsResponseHeader::
+
If true, the header 'User' will be added to the list of response headers so it
can be accessed from a reverse proxy for logging purposes.

+
Default value is false.

[[httpd]]
=== Section httpd

The httpd section configures the embedded servlet container.

[[httpd.listenUrl]]httpd.listenUrl::
+
Configuration for the listening sockets of the internal HTTP daemon.
Each entry of `listenUrl` combines the following options for a
listening socket: protocol, network address, port and context path.
+
_Protocol_ can be either `http://`, `https://`, `proxy-http://` or
`proxy-https://`. The latter two are special forms of `http://` with
awareness of a reverse proxy (see below). _Network address_ selects
the interface and/or scope of the listening socket. For notes
examples, see below. _Port_ is the TCP port number and is optional
(default value depends on the protocol). _Context path_ is the
optional "base URI" for the Gerrit Code Review as application to
serve on.
+
**Protocol** schemes:
+
* `http://`
+
Plain-text HTTP protocol.  If port is not supplied, defaults to 80,
the standard HTTP port.
+
* `https://`
+
SSL encrypted HTTP protocol.  If port is not supplied, defaults to
443, the standard HTTPS port.
+
For configuration of the certificate and private key, see
<<httpd.sslKeyStore,httpd.sslKeyStore>>.
+
[NOTE]
SSL/TLS configuration capabilities of Gerrit internal HTTP daemon
are very limited. Externally facing production sites are strongly
encouraged to use a reverse proxy configuration to handle SSL/TLS
and use a `proxy-https://` scheme here (below) for security and
performance reasons.
+
* `proxy-http://`
+
Plain-text HTTP relayed from a reverse proxy.  If port is not
supplied, defaults to 8080.
+
Like `http://`, but additional header parsing features are
enabled to honor `X-Forwarded-For`, `X-Forwarded-Host` and
`X-Forwarded-Server`.  These headers are typically set by Apache's
link:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#x-headers[mod_proxy,role=external,window=_blank].
+
[NOTE]
--
For secruity reasons, make sure to only allow connections from a
trusted reverse proxy in your network, as clients could otherwise
easily spoof these headers and thus spoof their originating IP
address effectively. If the reverse proxy is running on the same
machine as Gerrit daemon, the use of a _loopback_ network address
to bind to (see below) is strongly recommended to mitigate this.

If not using Apache's mod_proxy, validate that your reverse proxy
sets these headers on all requests. If not, either configure it to
sanitize them from the origin, or use the `http://` scheme instead.
--
+
* `proxy-https://`
+
Plain-text HTTP relayed from a reverse proxy that has already
handled the SSL encryption/decryption.  If port is not supplied,
defaults to 8080.
+
Behaves exactly like `proxy-http://`, but also sets the scheme to
assume `https://` is the proper URL back to the server.

+
--
**Network address** forms:

* Loopback (localhost): `127.0.0.1` (IPv4) or `[::1]` (IPv6).
* All (unspecified): `0.0.0.0` (IPv4), `[::]` (IPv6) or `*`
  (IPv4 and IPv6)
* Interface IP address, e.g. `1.2.3.4` (IPv4) or
  `[2001:db8::a00:20ff:fea7:ccea]` (IPv6)
* Hostname, resolved at startup time to an address.

**Context path** is the local part of the URL to be used to access
Gerrit on ('base URL'). E.g. `/gerrit/` to serve Gerrit on that URI
as base. If set, consider to align this with the
<<gerrit.canonicalWebUrl,gerrit.canonicalWebUrl>> setting. Correct
settings may depend on the reverse proxy configuration as well. By
default, this is `/` so that Gerrit serves requests on the root.

If multiple values are supplied, the daemon will listen on all
of them.

Examples:

----
[httpd]
    listenUrl = proxy-https://127.0.0.1:9999/gerrit/
[gerrit]
    # Reverse proxy is configured to serve with SSL/TLS on
    # example.com and to relay requests on /gerrit/ onto
    # http://127.0.0.1:9999/gerrit/
    canonicalWebUrl = https://example.com/gerrit/
----

----
[httpd]
    # Listen on specific external interface with plaintext
    # HTTP on IPv6.
    listenUrl = http://[2001:db8::a00:20ff:fea7:ccea]

    # Also listen on specific internal interface for use with
    # reverse proxy run on another host.
    listenUrl = proxy-https://192.168.100.123
----

See also the page on link:config-reverseproxy.html[reverse proxy]
configuration.

By default, `\http://*:8080`.
--

[[httpd.reuseAddress]]httpd.reuseAddress::
+
If true, permits the daemon to bind to the port even if the port
is already in use.  If false, the daemon ensures the port is not
in use before starting.  Busy sites may need to set this to true
to permit fast restarts.
+
By default, true.

[[httpd.gracefulStopTimeout]]httpd.gracefulStopTimeout::
+
Set a graceful stop time. If set, the daemon ensures that all incoming
calls are preserved for a maximum period of time, before starting
the graceful shutdown process. Sites behind a workload balancer such as
HAProxy would need this to be set for avoiding serving errors during
rolling restarts.
+
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
+
By default, 0 seconds (immediate shutdown).

[[httpd.inheritChannel]]httpd.inheritChannel::
+
If true, permits the daemon to inherit its server socket channel
from fd0/1(stdin/stdout). When set to true, the server can be socket
activated via systemd or xinetd.
+
By default, false.

[[httpd.requestHeaderSize]]httpd.requestHeaderSize::
+
Size, in bytes, of the buffer used to parse the HTTP headers of an
incoming HTTP request.  The entire request headers, including any
cookies sent by the browser, must fit within this buffer, otherwise
the server aborts with the response '413 Request Entity Too Large'.
+
One buffer of this size is allocated per active connection.
Allocating a buffer that is too large wastes memory that cannot be
reclaimed, allocating a buffer that is too small may cause unexpected
errors caused by very long Referer URLs or large cookie values.
+
By default, 16384 (16 K), which is sufficient for most OpenID and
other web-based single-sign-on integrations.

[[httpd.sslCrl]]httpd.sslCrl::
+
Path of the certificate revocation list file in PEM format. This
crl file is optional, and available for CLIENT_SSL_CERT_LDAP
authentication.
+
To create and view a crl using openssl:
+
----
openssl ca -gencrl -out crl.pem
openssl crl -in crl.pem -text
----
+
If not absolute, the path is resolved relative to `$site_path`.
+
By default, `$site_path/etc/crl.pem`.

[[httpd.sslKeyStore]]httpd.sslKeyStore::
+
Path of the Java keystore containing the server's SSL certificate
and private key.  This keystore is required for `https://` in URL.
+
To create a self-signed certificate for simple internal usage:
+
----
keytool -keystore keystore -alias jetty -genkey -keyalg RSA
chmod 600 keystore
----
+
If not absolute, the path is resolved relative to `$site_path`.
+
By default, `$site_path/etc/keystore`.

[[httpd.sslKeyPassword]]httpd.sslKeyPassword::
+
Password used to decrypt the private portion of the sslKeyStore.
Java keystores require a password, even if the administrator
doesn't want to enable one.
+
If set to the empty string the embedded server will prompt for the
password during startup.
+
By default, `gerrit`.

[[httpd.requestLog]]httpd.requestLog::
+
Enable (or disable) the `'$site_path'/logs/httpd_log` request log.
If enabled, an NCSA combined log format request log file is written
out by the internal HTTP daemon. The httpd log format is documented
link:logs.html#_httpd_log[here].
+
`log4j.appender` with the name `httpd_log` can be configured to overwrite
programmatic configuration.
+
By default, true if httpd.listenUrl uses http:// or https://,
and false if httpd.listenUrl uses proxy-http:// or proxy-https://.

[[httpd.acceptorThreads]]httpd.acceptorThreads::
+
Number of worker threads dedicated to accepting new incoming TCP
connections and allocating them connection-specific resources.
+
By default, 2, which should be suitable for most high-traffic sites.

[[httpd.minThreads]]httpd.minThreads::
+
Minimum number of spare threads to keep in the worker thread pool.
This number must be at least 1 larger than httpd.acceptorThreads
multiplied by the number of httpd.listenUrls configured.
+
By default, 5, suitable for most lower-volume traffic sites.

[[httpd.maxThreads]]httpd.maxThreads::
+
Maximum number of threads to permit in the worker thread pool.
+
By default 25, suitable for most lower-volume traffic sites.
+
[NOTE]
Unless SSH daemon is disabled, see <<sshd.listenAddress, sshd.listenAddress>>,
the max number of concurrent Git requests over HTTP and SSH together is
defined by the <<sshd.threads, sshd.threads>> and
<<sshd.batchThreads, sshd.batchThreads>>.

[[httpd.maxQueued]]httpd.maxQueued::
+
Maximum number of client connections which can enter the worker
thread pool waiting for a worker thread to become available.
0 sets the queue size to the Integer.MAX_VALUE.
+
By default 200.

[[httpd.maxWait]]httpd.maxWait::
+
Maximum amount of time a client will wait for an available
thread to handle a project clone, fetch or push request over the
smart HTTP transport.
+
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days
* w, week, weeks (`1 week` is treated as `7 days`)
* mon, month, months (`1 month` is treated as `30 days`)
* y, year, years (`1 year` is treated as `365 days`)

+
--
If a unit suffix is not specified, `minutes` is assumed.  If 0
is supplied, the maximum age is infinite and connections will not
abort until the client disconnects.

By default, 5 minutes.
--

[[httpd.filterClass]]httpd.filterClass::
+
Class that implements the javax.servlet.Filter interface
for filtering any HTTP related traffic going through the Gerrit
HTTP protocol.
Class is loaded and configured in the Gerrit Jetty container
and run in front of all Gerrit URL handlers, allowing the filter
to inspect, modify, allow or reject each request.
It needs to be provided as JAR library
under $GERRIT_SITE/lib as it is resolved using the default Gerrit class
loader and cannot be dynamically loaded by a plugin.
+
Failing to load the Filter class would result in a Gerrit start-up
failure, as this class is supposed to provide mandatory filtering
in front of Gerrit HTTP protocol.
+
Typical usage is in conjunction with the `auth.type=HTTP` as replacement
of an Apache HTTP proxy layer as security enforcement on top of Gerrit
by returning a trusted username as HTTP Header.
+
Allow multiple values to install multiple servlet filters.
+
Example of using a security library secure.jar under $GERRIT_SITE/lib
that provides a org.anyorg.MySecureHeaderFilter Servlet Filter that enforces
a trusted username in the `TRUSTED_USER` HTTP Header and
org.anyorg.MySecureIPFilter that performs source IP security filtering:
+
----
[auth]
	type = HTTP
	httpHeader = TRUSTED_USER

[httpd]
	filterClass = org.anyorg.MySecureHeaderFilter
	filterClass = org.anyorg.MySecureIPFilter
----

[[filterClass.className.initParam]]filterClass.<className>.initParam::
+
Gerrit supports customized pluggable HTTP filters as `filterClass`. This
option allows to pass extra initialization parameters to the filter. It
allows for multiple key/value pairs to be passed in this pattern:
+
----
initParam = <key>=<value>
----
For a comprehensive example:
+
----
[httpd]
	filterClass = org.anyorg.AFilter
	filterClass = org.anyorg.BFilter
[filterClass "org.anyorg.AFilter"]
	key1 = value1
	key2 = value2
[filterClass "org.anyorg.BFilter"]
	key3 = value3
----

[[httpd.idleTimeout]]httpd.idleTimeout::
+
Maximum idle time for a connection, which roughly translates to the
TCP socket `SO_TIMEOUT`.
+
This value is interpreted as the maximum time between some progress
being made on the connection. So if a single byte is read or written,
then the timeout is reset.
+
The max idle time is applied:
+
* When waiting for a new message to be received on a connection
* When waiting for a new message to be sent on a connection

+
By default, 30 seconds.

[[httpd.robotsFile]]httpd.robotsFile::
+
Location of an external robots.txt file to be used instead of the one
bundled with the .war of the application.
+
If not absolute, the path is resolved relative to `$site_path`.
+
If the file doesn't exist or can't be read the default robots.txt file
bundled with the .war will be used instead.

[[httpd.registerMBeans]]httpd.registerMBeans::
+
Enable (or disable) registration of Jetty MBeans for Java JMX.
+
By default, false.

[[index]]
=== Section index

The index section configures the secondary index.

Note that after enabling the secondary index, the index must be built
using the link:pgm-reindex.html[reindex program] before restarting the
Gerrit server.

[[index.type]]index.type::
+
*(DEPRECATED)* The only supported value is `LUCENE`, which is the default,
that means a link:http://lucene.apache.org/[Lucene]
index is used.
+
For using other indexing backends (e.g. ElasticSearch), refer to
`gerrit.installIndexModule` setting.
+
[[index.threads]]index.threads::
+
Number of threads to use for indexing in normal interactive operations. Setting
it to 0 disables the dedicated thread pool and indexing will be done in the same
thread as the operation.
+
If not set or set to a zero, defaults to the number of logical CPUs as returned
by the JVM. If set to a negative value, defaults to a direct executor.

[[index.batchThreads]]index.batchThreads::
+
Number of threads to use for indexing in background operations, such as
online schema upgrades, and also the default for offline reindexing.
+
If not set or set to a zero, defaults to the number of logical CPUs as returned
by the JVM. If set to a negative value, defaults to a direct executor.

[[index.cacheQueryResultsByChangeNum]]index.cacheQueryResultsByChangeNum::
+
Allow to cache and reuse the change JSON elements by their Change number.
This improves the performance of queries that are returning Changes duplicates.
It needs to be turned off when having Changes imported from other servers
because of the potential conflicts of change numbers.
+
Defaults to true.

[[index.onlineUpgrade]]index.onlineUpgrade::
+
Whether to upgrade to new index schema versions while the server is
running. This is recommended as it prevents additional downtime during
Gerrit version upgrades (avoiding the need for an offline reindex step
using Reindex), but can add additional server load during the upgrade.
+
If set to false, there is no way to upgrade the index schema to take
advantage of new search features without restarting the server.
+
Defaults to true.

[[index.paginationType]]index.paginationType::
+
The pagination type to use when index queries are repeated to
obtain the next set of results. Supported values are:
+
* `OFFSET`
+
Index queries are repeated with a non-zero offset to obtain the
next set of results.
+
* `SEARCH_AFTER`
+
Index queries are repeated using a search-after object. Index
backends can provide their custom implementations for search-after.
Note that, `SEARCH_AFTER` does not impact using offsets in Gerrit
query APIs.
+
Defaults to `OFFSET`.

[[index.maxLimit]]index.maxLimit::
+
Maximum limit to allow for search queries. Requesting results above this
limit will truncate the list (but will still set `_more_changes` on
result lists). Set to 0 for no limit.
+
When `index.type` is set to `LUCENE`, defaults to no limit.

[[index.maxPages]]index.maxPages::
+
Maximum number of pages of search results to allow, as index
implementations may have to scan through large numbers of skipped
results when searching with an offset. Requesting results starting past
this threshold times the requested limit will result in an error. Set to
0 for no limit.
+
Defaults to no limit.

[[index.pageSizeMultiplier]]index.pageSizeMultiplier::
+
When index queries are repeated to obtain more results, this multiplier
will be used to determine the limit for the next query. Using a page
multiplier allows queries to start off small and thus provide good
latency for queries which may end up only having very few results, and
then scaling up to have better throughput to handle queries with larger
result sets without incurring the overhead of making as many queries as
would be required with a smaller limit. This strategy of using a multiplier
attempts to create a balance between latency and throughput by dynamically
adjusting the query size to the number of results being returned by each
query in the pagination.
+
The larger the multiplier, the better the throughput on large queries, and
it also improves latency on large queries by scaling up quickly. However, a
larger multiplier can hurt latencies a bit by making the "last" query in a
series longer than needed. The impact of this depends on how much the backend
latency goes up when specifying a large limit and few results are returned.
Setting link:#index.maxPageSize[index.maxPageSize] that isn't too large, can
likely help reduce the impacts of this.
+
For example, if the limit of the previous query was 500 and pageSizeMultiplier
is configured to 5, the next query will have a limit of 2500.
+
Defaults to 1 which effectively turns this feature off.

[[index.maxPageSize]]index.maxPageSize::
+
Maximum size to allow when index queries are repeated to obtain more results. Note
that, link:#index.maxLimit[index.maxLimit] will be used to limit page size if it
is configured to a value lower than maxPageSize.
+
For example, if the limit of previous query was 500, pageSizeMultiplier is
configured to 5 and maxPageSize to 2000, the next query will have a limit of
2000 (instead of 2500).
+
Defaults to no limit.

[[index.maxTerms]]index.maxTerms::
+
Maximum number of leaf terms to allow in a query. Too-large queries may
perform poorly, so setting this option causes query parsing to fail fast
before attempting to send them to the secondary index.
+
When the index type is `LUCENE`, also sets the maximum number of clauses
permitted per BooleanQuery. This is so that all enforced query limits
are the same.
+
Defaults to 1024.

[[index.autoReindexIfStale]]index.autoReindexIfStale::
+
Whether to automatically check if a document became stale in the index
immediately after indexing it. If false, there is a race condition during two
simultaneous writes that may cause one of the writes to not be reflected in the
index. The check to avoid this does consume some resources.
+
Defaults to false.

[[index.scheduledIndexer]]
==== Subsection index.scheduledIndexer

This section configures periodic indexing. Periodic indexing is
intended to run only on replicas and only updates the group index.
Replication to replicas happens on Git level so that Gerrit is not aware
of incoming replication events. But replicas need an updated group index
to resolve memberships of users for ACL validation. To keep the group
index in replicas up-to-date the Gerrit replica periodically scans the
group refs in the All-Users repository to reindex groups if they are
stale.

The scheduled reindexer is not able to detect group deletions that
happened while the replica was offline, but since group deletions are not
supported this should never happen. If nevertheless groups refs were
deleted while a replica was offline a full offline link:pgm-reindex.html[
reindex] must be performed.

This section is only used if Gerrit runs in replica mode, otherwise it is
ignored.

[[index.scheduledIndexer.runOnStartup]]index.scheduledIndexer.runOnStartup::
+
Whether the scheduled indexer should run once immediately on startup.
If set to `true` the replica startup is blocked until all stale groups
were reindexed. Enabling this allows to prevent that replicas that were
offline for a longer period of time run with outdated group information
until the first scheduled indexing is done.
+
Defaults to `true`.

[[index.scheduledIndexer.enabled]]index.scheduledIndexer.enabled::
+
Whether the scheduled indexer is enabled. If the scheduled indexer is
disabled you must implement other means to keep the group index for the
replica up-to-date.
+
Defaults to `true`.

[[index.scheduledIndexer.startTime]]index.scheduledIndexer.startTime::
+
The link:#schedule-configuration-startTime[start time] for running
the scheduled indexer.
+
Defaults to `00:00`.

[[index.scheduledIndexer.interval]]index.scheduledIndexer.interval::
+
The link:#schedule-configuration-interval[interval] for running
the scheduled indexer.
+
Defaults to `5m`.

link:#schedule-configuration-examples[Schedule examples] can be found
in the link:#schedule-configuration[Schedule Configuration] section.

==== Lucene configuration

Open and closed changes are indexed in separate indexes named
'open' and 'closed' respectively.

The following settings are only used when the index type is `LUCENE`.

[[index.name.ramBufferSize]]index.name.ramBufferSize::
+
Determines the amount of RAM that may be used for buffering added documents
and deletions before they are flushed to the index.  See the
link:http://lucene.apache.org/core/4_6_0/core/org/apache/lucene/index/LiveIndexWriterConfig.html#setRAMBufferSizeMB(double)[
Lucene documentation,role=external,window=_blank] for further details.
+
Defaults to 16M.

[[index.name.maxBufferedDocs]]index.name.maxBufferedDocs::
+
Determines the minimal number of documents required before the buffered
in-memory documents are flushed to the index. Large values generally
give faster indexing.  See the
link:http://lucene.apache.org/core/4_6_0/core/org/apache/lucene/index/LiveIndexWriterConfig.html#setMaxBufferedDocs(int)[
Lucene documentation,role=external,window=_blank] for further details.
+
Defaults to -1, meaning no maximum is set and the writer will flush
according to RAM usage.

[[index.name.commitWithin]]index.name.commitWithin::
+
Determines the period at which changes are automatically committed to
stable store on disk. This is a costly operation and may block
additional index writes, so lower with caution.
+
If zero, changes are committed after every write. This is very costly
but may be useful if offline reindexing is infeasible, or for development
servers.
+
Values can be specified using standard time unit abbreviations (`ms`, `sec`,
`min`, etc.).
+
If negative, `commitWithin` is disabled. Changes are flushed to disk when
the in-memory buffer fills, but only committed and guaranteed to be synced
to disk when the process finishes.
+
Defaults to 300000 ms (5 minutes).


[[index.name.maxMergeCount]]index.name.maxMergeCount::
+
Determines the max number of simultaneous merges that are allowed. If a merge
is necessary yet we already have this many threads running, the incoming thread
(that is calling add/updateDocument) will block until a merge thread has
completed.  Note that Lucene will only run the smallest maxThreadCount merges
at a time. See the
link:https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/index/ConcurrentMergeScheduler.html#setDefaultMaxMergesAndThreads(boolean)[
Lucene documentation,role=external,window=_blank] for further details.
+
Defaults to -1 for (auto detection).


[[index.name.maxThreadCount]]index.name.maxThreadCount::
+
Determines the max number of simultaneous Lucene merge threads that should be running at
once. This must be less than or equal to maxMergeCount. See the
link:https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/index/ConcurrentMergeScheduler.html#setDefaultMaxMergesAndThreads(boolean)[
Lucene documentation,role=external,window=_blank] for further details.
+
For further details on Lucene index configuration (auto detection) which
affects maxThreadCount and maxMergeCount settings.
See the
link:https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/index/ConcurrentMergeScheduler.html#AUTO_DETECT_MERGES_AND_THREADS[
Lucene documentation,role=external,window=_blank]
+
Defaults to -1 for (auto detection).

[[index.name.enableAutoIOThrottle]]index.name.enableAutoIOThrottle::
+
Allows the control of whether automatic IO throttling is enabled and used by
default in the lucene merge queue.  Automatic dynamic IO throttling, which when
on is used to adaptively rate limit writes bytes/sec to the minimal rate necessary
so merges do not fall behind. See the
link:https://lucene.apache.org/core/5_5_0/core/org/apache/lucene/index/ConcurrentMergeScheduler.html#enableAutoIOThrottle()[
Lucene documentation,role=external,window=_blank] for further details.
+
Defaults to true (throttling enabled).

During offline reindexing, setting ramBufferSize greater than the size
of index (size of specific index folder under <site_dir>/index) and
maxBufferedDocs as -1 avoids unnecessary flushes and triggers only a
single flush at the end of the process.

Sample Lucene index configuration:
----
[index]
  type = LUCENE

[index "changes_open"]
  ramBufferSize = 60 m
  maxBufferedDocs = 3000
  maxThreadCount = 5
  maxMergeCount = 50


[index "changes_closed"]
  ramBufferSize = 20 m
  maxBufferedDocs = 500
  maxThreadCount = 10
  maxMergeCount = 100
  enableIOThrottle = false

----

[[event]]
=== Section event

[[event.payload.listChangeOptions]]events.payload.listChangeOptions::
+
List of options that Gerrit applies when rendering the payload of an
internal event. This is the same set of options that are documented
link:rest-api-changes.html#query-options[here].
+
Depending on the setup, these events might get serialized using stream
events.
+
This can be set to the set of minimal options that consumers of Gerrit's
events need. A minimal set would be (`SKIP_DIFFSTAT`).
+
Every option that gets added here will have a performance impact. The
general recommendation is therefore to set this to a minimal set of
required options.
+
Defaults to all available options minus `CHANGE_ACTIONS`,
`CURRENT_ACTIONS` and `CHECK`. This is a rich default to make sure the
config is backwards compatible with what the default was before the config
was added.

[[event.comment-added.publishPatchSetLevelComment]]event.comment-added.publishPatchSetLevelComment::
+
Add patch set level comment as event comment. Without this option, patch set
level comment will not be included in the event comment attribute. Given that
currently patch set level, file and robot comments are not exposed in the
`comment-added` event type, those comments will be lost. One particular use
case is to re-trigger CI build from the change screen by adding a comment with
specific content, e.g.: `recheck`. Jenkins Gerrit Trigger plugin and Zuul CI
depend on this feature to trigger change verification.
+
By default, true.

[[experiments]]
=== Section experiments

This section covers experimental new features. Gerrit uses experiments
to research new behavior in frontend and core backend. Once the research is done, the experimental
feature either stays and the experimentation flag gets removed, or the feature as a whole
gets removed

[[experiments.enabled]]experiments.enabled::
+
List of experiments that are currently enabled. The release notes contain currently
available experiments.
+
We will not remove experiments in stable patch releases. They are likely to be
removed in the next stable version.

----
[experiments]
  enabled = ExperimentKey
----

[[experiments.disabled]]experiments.disabled::
+
List of experiments that are currently disabled. The release notes contain currently
available experiments. This list disables experiments with the given key that are
either enabled by default or explicitly in the config.

----
[experiments]
  disabled = ExperimentKey
----

[[ldap]]
=== Section ldap

LDAP integration is only enabled if `auth.type` is set to
`HTTP_LDAP`, `LDAP` or `CLIENT_SSL_CERT_LDAP`.  See above for a
detailed description of the `auth.type` settings and their
implications.

An example LDAP configuration follows, and then discussion of
the parameters introduced here.  Suitable defaults for most
parameters are automatically guessed based on the type of server
detected during startup.  The guessed defaults support
link:http://www.ietf.org/rfc/rfc2307.txt[RFC 2307,role=external,window=_blank], Active
Directory and link:https://www.freeipa.org[FreeIPA,role=external,window=_blank].

----
[ldap]
  server = ldap://ldap.example.com

  accountBase = ou=people,dc=example,dc=com
  accountPattern = (&(objectClass=person)(uid=${username}))
  accountFullName = displayName
  accountEmailAddress = mail

  groupBase = ou=groups,dc=example,dc=com
  groupMemberPattern = (&(objectClass=group)(member=${dn}))
----

[[ldap.guessRelevantGroups]]ldap.guessRelevantGroups::
+
Filter the groups found in LDAP by guessing the ones relevant to
Gerrit and removing the others from list completions and ACL evaluations.
The guess is based on two elements: the projects most recently
accessed in the cache and the list of LDAP groups included in their ACLs.
+
Please note that projects rarely used and thus not cached may be
temporarily inaccessible by users even with LDAP membership and grants
referenced in the ACLs.
+
By default, true.

[[ldap.server]]ldap.server::
+
URL of the organization's LDAP server to query for user information
and group membership from.  Must be of the form `ldap://host` or
`ldaps://host` to bind with either a plaintext or SSL connection.
+
If `auth.type` is `LDAP` this setting should use `ldaps://` to
ensure the end user's plaintext password is transmitted only over
an encrypted connection.
+
If you want to configure multiple ldap servers you can try to put
multiple ldap urls separated by a space:
`server = ldaps://ldap1 ldaps://ldap2`
See https://bugs.chromium.org/p/gerrit/issues/detail?id=10841[issue 10841].

[[ldap.startTls]]ldap.startTls::
+
If true, Gerrit will perform StartTLS extended operation.
+
By default, false, StartTLS will not be enabled.

[[ldap.supportAnonymous]]ldap.supportAnonymous::
+
If false, Gerrit will provide credentials only at connection open, this is
required for some `LDAP` implementations that do not allow anonymous bind
for StartTLS or for reauthentication.
+
By default, true.

[[ldap.sslVerify]]ldap.sslVerify::
+
If false and ldap.server is an `ldaps://` style URL or `ldap.startTls`
is true, Gerrit will not verify the server certificate when it connects
to perform a query.
+
By default, true, requiring the certificate to be verified.

[[ldap.groupsVisibleToAll]]ldap.groupsVisibleToAll::
+
If true, LDAP groups are visible to all registered users.
+
By default, false, LDAP groups are visible only to administrators and
group members.

[[ldap.username]]ldap.username::
+
_(Optional)_ Username to bind to the LDAP server with.  If not set,
an anonymous connection to the LDAP server is attempted.

[[ldap.password]]ldap.password::
+
_(Optional)_ Password for the user identified by `ldap.username`.
If not set, an anonymous (or passwordless) connection to the LDAP
server is attempted.

[[ldap.referral]]ldap.referral::
+
_(Optional)_ How an LDAP referral should be handled if it is
encountered during directory traversal.  Set to `follow` to
automatically follow any referrals, or `ignore` to ignore the
referrals.
+
By default, `ignore`.

[[ldap.readTimeout]]ldap.readTimeout::
+
_(Optional)_ The read timeout for an LDAP operation. The value is
in the usual time-unit format like "1 s", "100 ms", etc...
A timeout can be used to avoid blocking all of the SSH command start
threads in case the LDAP server becomes slow.
+
By default there is no timeout and Gerrit will wait for the LDAP
server to respond until the TCP connection times out.

[[ldap.accountBase]]ldap.accountBase::
+
Root of the tree containing all user accounts.  This is typically
of the form `ou=people,dc=example,dc=com`.
+
This setting may be added multiple times to specify more than
one root.

[[ldap.accountScope]]ldap.accountScope::
+
Scope of the search performed for accounts.  Must be one of:
+
* `one`: Search only one level below accountBase, but not recursive
* `sub` or `subtree`: Search recursively below accountBase
* `base` or `object`: Search exactly accountBase; probably not desired

+
Default is `subtree` as many directories have several levels.

[[ldap.accountPattern]]ldap.accountPattern::
+
Query pattern to use when searching for a user account.  This may be
any valid LDAP query expression, including the standard `(&...)` and
`(|...)` operators.  If `auth.type` is `HTTP_LDAP` then the variable
`${username}` is replaced with a parameter set to the username
that was supplied by the HTTP server.  If `auth.type` is `LDAP` then
the variable `${username}` is replaced by the string entered by
the end user.
+
This pattern is used to search the objects contained directly under
the `ldap.accountBase` tree.  A typical setting for this parameter
is `(uid=${username})` or `(cn=${username})`, but the proper
setting depends on the LDAP schema used by the directory server.
+
Default is `(uid=${username})` for FreeIPA and RFC 2307 servers,
and `(&(objectClass=user)(sAMAccountName=${username}))`
for Active Directory.

[[ldap.accountFullName]]ldap.accountFullName::
+
_(Optional)_ Name of an attribute on the user account object which
contains the initial value for the user's full name field in Gerrit.
Typically this is the `displayName` property in LDAP, but could
also be `legalName` or `cn`.
+
Attribute values may be concatenated with literal strings.  For
example to join given name and surname together, use the pattern
`${givenName} ${SN}`.
+
If set, users will be unable to modify their full name field, as
Gerrit will populate it only from the LDAP data.
+
Default is `displayName` for FreeIPA and RFC 2307 servers,
and `${givenName} ${sn}` for Active Directory.

[[ldap.accountEmailAddress]]ldap.accountEmailAddress::
+
_(Optional)_ Name of an attribute on the user account object which
contains the user's Internet email address, as defined by this
LDAP server.
+
Attribute values may be concatenated with literal strings,
for example to set the email address to the lowercase form
of sAMAccountName followed by a constant domain name, use
`${sAMAccountName.toLowerCase}@example.com`.
+
If set, the preferred email address will be prefilled from LDAP,
but users may still be able to register additional email addresses,
and select a different preferred email address.
+
Default is `mail`.

[[ldap.accountSshUserName]]ldap.accountSshUserName::
+
_(Optional)_ Name of an attribute on the user account object which
contains the initial value for the user's SSH username field in
Gerrit.  Typically this is the `uid` property in LDAP, but could
also be `cn`.  Administrators should prefer to match the attribute
corresponding to the user's workstation username, as this is what
SSH clients will default to.
+
Attribute values may also be forced to lowercase, or to uppercase in
an expression.  For example, `${sAMAccountName.toLowerCase}` will
force the value of sAMAccountName, if defined, to be all lowercase.
The suffix `.toUpperCase` can be used for the other direction.
The suffix `.localPart` can be used to split attribute values of
the form 'user@example.com' and return only the left hand side, for
example `${userPrincipalName.localPart}` would provide only 'user'.
+
If set, users will be unable to modify their SSH username field, as
Gerrit will populate it only from the LDAP data. Note that once the
username has been set it cannot be changed, therefore it is
recommended not to make changes to this setting that would cause the
value to differ, as this will prevent users from logging in.
+
Default is `uid` for FreeIPA and RFC 2307 servers,
and `${sAMAccountName.toLowerCase}` for Active Directory.

[[ldap.accountMemberField]]ldap.accountMemberField::
+
_(Optional)_ Name of an attribute on the user account object which
contains the groups the user is part of. Typically used for Active
Directory and FreeIPA servers.
+
Default is unset for RFC 2307 servers (disabled)
and `memberOf` for Active Directory and FreeIPA.

[[ldap.accountMemberExpandGroups]]ldap.accountMemberExpandGroups::
+
_(Optional)_ Whether to expand nested groups recursively. This
setting is used only if `ldap.accountMemberField` is set.
+
Default is unset for FreeIPA and `true` for RFC 2307 servers
and Active Directory.

[[ldap.fetchMemberOfEagerly]]ldap.fetchMemberOfEagerly::
+
_(Optional)_ Whether to fetch the `memberOf` account attribute on
login. Setups which use LDAP for user authentication but don't make
use of the LDAP groups may benefit from setting this option to `false`
as this will result in a much faster LDAP login.
+
Default is unset for RFC 2307 servers (disabled) and `true` for
Active Directory and FreeIPA.

[[ldap.groupBase]]ldap.groupBase::
+
Root of the tree containing all group objects.  This is typically
of the form `ou=groups,dc=example,dc=com`.
+
This setting may be added multiple times to specify more than
one root.

[[ldap.groupScope]]ldap.groupScope::
+
Scope of the search performed for group objects.  Must be one of:
+
* `one`: Search only one level below groupBase, but not recursive
* `sub` or `subtree`: Search recursively below groupBase
* `base` or `object`: Search exactly groupBase; probably not desired

+
Default is `subtree` as many directories have several levels.

[[ldap.groupPattern]]ldap.groupPattern::
+
Query pattern used when searching for an LDAP group to connect
to a Gerrit group.  This may be any valid LDAP query expression,
including the standard `(&...)` and `(|...)` operators.  The variable
`${groupname}` is replaced with the search term supplied by the
group owner.
+
Default is `(cn=${groupname})` for FreeIPA and RFC 2307 servers,
and `(&(objectClass=group)(cn=${groupname}))` for Active Directory.

[[ldap.groupMemberPattern]]ldap.groupMemberPattern::
+
Query pattern to use when searching for the groups that a user
account is currently a member of.  This may be any valid LDAP query
expression, including the standard `(&...)` and `(|...)` operators.
+
If `auth.type` is `HTTP_LDAP` then the variable `${username}` is
replaced with a parameter set to the username that was supplied
by the HTTP server.  Other variables appearing in the pattern,
such as `${fooBarAttribute}`, are replaced with the value of the
corresponding attribute (in this case, `fooBarAttribute`) as read
from the user's account object matched under `ldap.accountBase`.
Attributes such as `${dn}` or `${uidNumber}` may be useful.
+
Default is `(|(memberUid=${username})(gidNumber=${gidNumber}))` for
RFC 2307, and unset (disabled) for Active Directory and FreeIPA.

[[ldap.groupName]]ldap.groupName::
+
_(Optional)_ Name of the attribute on the group object which contains
the value to use as the group name in Gerrit.
+
Typically the attribute name is `cn` for RFC 2307 and Active Directory
servers.  For other servers the attribute name may differ, for example
`apple-group-realname` on Apple MacOS X Server.
+
It is also possible to specify a literal string containing a pattern of
attribute values.  For example to create a Gerrit group name consisting of
LDAP group name and group ID, use the pattern `${cn} (${gidNumber})`.
+
Default is `cn`.

[[ldap.mandatoryGroup]]ldap.mandatoryGroup::
+
All users must be a member of this group to allow account creation or
authentication.
+
Setting mandatoryGroup implies enabling of `ldap.fetchMemberOfEagerly`
+
By default, unset.

[[ldap.localUsernameToLowerCase]]ldap.localUsernameToLowerCase::
+
Converts the local username, that is used to login into the Gerrit
Web UI, to lower case before doing the LDAP authentication. By setting
this parameter to true, a case insensitive login to the Gerrit Web UI
can be achieved.
+
If set, it must be ensured that the local usernames for all existing
accounts are converted to lower case, otherwise a user that has a
local username that contains upper case characters will not be able to login
anymore. The local usernames for the existing accounts can be
converted to lower case by running the server program
link:pgm-LocalUsernamesToLowerCase.html[LocalUsernamesToLowerCase].
Please be aware that the conversion of the local usernames to lower
case can't be undone. For newly created accounts the local username
will be directly stored in lower case.
+
By default, unset/false.

[[ldap.authentication]]ldap.authentication::
+
Defines how Gerrit authenticates with the server. When set to `GSSAPI`
Gerrit will use Kerberos. To use kerberos the
`java.security.auth.login.config` system property must point to a
login to a JAAS configuration file and, if Java 6 is used, the system
property `java.security.krb5.conf` must point to the appropriate
krb5.ini file with references to the KDC.

Typical jaas.conf.

----
KerberosLogin {
    com.sun.security.auth.module.Krb5LoginModule
            required
            useTicketCache=true
            doNotPrompt=true
            renewTGT=true;
};
----

See Java documentation on how to create the krb5.ini file.

Note the `renewTGT` property to make sure the TGT does not expire,
and `useTicketCache` to use the TGT supplied by the operating system. As
the whole point of using GSSAPI is to have passwordless authentication
to the LDAP service, this option does not acquire a new TGT on its own.

On Windows servers the registry key `HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters`
must have the DWORD value `allowtgtsessionkey` set to 1 and the account must not
have local administrator privileges.

[[ldap.useConnectionPooling]]ldap.useConnectionPooling::
+
_(Optional)_ Enable the LDAP connection pooling or not.
+
If it is true, the LDAP service provider maintains a pool of (possibly)
previously used connections and assigns them to a Context instance as
needed. When a Context instance is done with a connection (closed or
garbage collected), the connection is returned to the pool for future use.
+
For details, see link:http://docs.oracle.com/javase/tutorial/jndi/ldap/pool.html[
LDAP connection management (Pool),role=external,window=_blank] and link:http://docs.oracle.com/javase/tutorial/jndi/ldap/config.html[
LDAP connection management (Configuration),role=external,window=_blank]
+
By default, false.

[[ldap.connectTimeout]]ldap.connectTimeout::
+
_(Optional)_ Timeout period for establishment of an LDAP connection.
+
The value is in the usual time-unit format like "1 s", "100 ms",
etc...
+
By default there is no timeout and Gerrit will wait indefinitely.

[[ldap-connection-pooling]]
==== LDAP Connection Pooling
Once LDAP connection pooling is enabled by setting the link:#ldap.useConnectionPooling[
ldap.useConnectionPooling] configuration property to `true`, the connection pool
can be configured using JVM system properties as explained in the
link:http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/jndi-ldap.html#POOL[
Java SE Documentation,role=external,window=_blank].

For standalone Gerrit (running with the embedded Jetty), JVM system properties
are specified in the link:#container[container section]:

----
  javaOptions = -Dcom.sun.jndi.ldap.connect.pool.maxsize=20
  javaOptions = -Dcom.sun.jndi.ldap.connect.pool.prefsize=10
  javaOptions = -Dcom.sun.jndi.ldap.connect.pool.timeout=300000
----

[[lfs]]
=== Section lfs

[[lfs.plugin]]lfs.plugin::
+
The name of a plugin which serves the
link:https://github.com/github/git-lfs/blob/master/docs/api/v1/http-v1-batch.md[
LFS protocol,role=external,window=_blank] on the `<project-name>/info/lfs/objects/batch` endpoint. When
not configured Gerrit will respond with `501 Not Implemented` on LFS protocol
requests.
+
By default unset.

[[log]]
=== Section log

[[log.jsonLogging]]log.jsonLogging::
+
If set to true, enables error, ssh and http logging in JSON format (file names:
`logs/error_log.json`, `logs/sshd_log.json` and `logs/httpd_log.json`).
+
The option only applies to Gerrit built-in loggers. It is ignored when a log4j
configuration is specified via
link:#container.javaOptions[container.javaOptions], for example
`-Dlog4j.configuration=file://etc/log4j.properties`.
+
Defaults to false.

[[log.textLogging]]log.textLogging::
+
If set to true, enables error logging in regular plain text format. Can only be disabled
if `jsonLogging` is enabled.
+
The option only applies to Gerrit built-in loggers. It is ignored when a log4j
configuration is specified via
link:#container.javaOptions[container.javaOptions], for example
`-Dlog4j.configuration=file://etc/log4j.properties`.
+
Defaults to true.

[[log.compress]]log.compress::
+
If set to true, log files are compressed at server startup and then daily at 11pm
(in the server's local time zone).
+
Defaults to true.

[[log.rotate]]log.rotate::
+
If set to true, log files are rotated daily at midnight (GMT).
+
Defaults to true.

[[metrics]]
=== Section metrics

[[metrics.reservoir]]metrics.reservoir::
+
The type of data reservoir used by the metrics system to calculate the percentile
values for timers and histograms.
It can be set to one of the following values:
+
* ExponentiallyDecaying: An exponentially-decaying random reservoir based on
  Cormode et al's forward-decaying priority reservoir sampling method to produce
  a statistically representative sampling reservoir, exponentially biased towards
  newer entries.
* SlidingTimeWindowArray: A sliding window that stores only the measurements made
  in the last window using chunks of 512 samples.
* SlidingTimeWindow: A sliding window that stores only the measurements made in
  the last window using a skip list.
* SlidingWindow: A sliding window that stores only the last measurements.
* Uniform: A random sampling reservoir that uses Vitter's Algorithm R to produce
  a statistically representative sample.
+
Defaults to ExponentiallyDecaying.

[[metrics.ExponentiallyDecaying.alpha]]metrics.ExponentiallyDecaying.alpha::
+
The exponential decay factor; the higher this is, the more biased the reservoir
will be towards newer values.

[[metrics.reservoirType.size]]metrics.<reservoirType>.size::
+
The number of samples to keep in the reservoir. Applies to all reservoir types
except the sliding time-based ones.
+
Defaults to 1028.

[[metrics.reservoirType.window]]metrics.<reservoirType>.window::
+
The window of time for keeping data in the reservoir. It only applies to sliding
time-based reservoir types.

[[mimetype]]
=== Section mimetype

[[mimetype.name.safe]]mimetype.<name>.safe::
+
If set to true, files with the MIME type `<name>` will be sent as
direct downloads to the user's browser, rather than being wrapped up
inside of zipped archives.  The type name may be a complete type
name, e.g. `image/gif`, a generic media type, e.g. `+image/*+`,
or the wildcard `+*/*+` to match all types.
+
By default, false for all MIME types.

Common examples:
----
[mimetype "image/*"]
  safe = true

[mimetype "application/pdf"]
  safe = true

[mimetype "application/msword"]
  safe = true

[mimetype "application/vnd.ms-excel"]
  safe = true
----

[[note-db]]
=== Section noteDb

NoteDb is the Git-based database storage backend for Gerrit. For more
information, including how to migrate data from an older Gerrit version, see the
link:note-db.html[documentation].

[[notedb.accounts.sequenceBatchSize]]notedb.accounts.sequenceBatchSize::
+
The next available account sequence number is stored as UTF-8 text in a
blob pointed to by the `refs/sequences/accounts` ref in the `All-Users`
repository. Multiple processes share the same sequence by incrementing
the counter using normal git ref updates. To amortize the cost of these
ref updates, processes increment the counter by a larger number and
hand out numbers from that range in memory until they run out. This
configuration parameter controls the size of the account ID batch that
each process retrieves at once.
+
By default, 1.

[[notedb.changes.sequenceBatchSize]]notedb.changes.sequenceBatchSize::
+
The next available change sequence number is stored as UTF-8 text in a
blob pointed to by the `refs/sequences/changes` ref in the `All-Projects`
repository. Multiple processes share the same sequence by incrementing
the counter using normal git ref updates. To amortize the cost of these
ref updates, processes increment the counter by a larger number and
hand out numbers from that range in memory until they run out. This
configuration parameter controls the size of the change ID batch that
each process retrieves at once.
+
By default, 20.

[[oauth]]
=== Section oauth

OAuth integration is only enabled if `auth.type` is set to `OAUTH`. See
link:#auth.type[above] for a detailed description of the `auth.type` settings
and their implications.

By default, contact information, like the full name and email address,
is retrieved from the selected OAuth provider when a user account is created,
or when a user requests to reload that information in the settings UI. If
that is not supported by the OAuth provider, users can be allowed to edit
their contact information manually.

[[oauth.allowEditFullName]]oauth.allowEditFullName::
+
If true, the full name can be edited in the contact information.
+
Default is false.

[[oauth.allowRegisterNewEmail]]oauth.allowRegisterNewEmail::
+
If true, additional email addresses can be registered in the contact
information.
+
Default is false.

[[operator-alias]]
=== Section operator alias

Operator aliasing allows global aliases to be defined for query operators.
Currently only change queries are supported. The alias name is the git
config key name, and the operator being aliased is the git config value.

For example:

----
[operator-alias "change"]
  oldage = age
  number = change
----

This section is particularly useful to alias operator names which may be
long and clunky because they include a plugin name in them to a shorter
name without the plugin name.

Aliases are resolved dynamically at invocation time to any currently
loaded versions of plugins. If the alias points to an operator provided
by a plugin which is not currently loaded, or the plugin does not define
the operator, then "unsupported operator" is returned to the user.

Aliases will override existing operators. In the case of multiple aliases
with the same name, the last one defined will be used.

When the target of an alias doesn't exist, the operator with the name
of the alias will be used (if present). This enables an admin to config
the system to override a core operator with an operator provided by a
plugin when present and otherwise fall back to the operator provided by
core.

[[pack]]
=== Section pack

Global settings controlling how Gerrit Code Review creates pack
streams for Git clients running clone, fetch, or pull.  Most of these
variables are per-client request, and thus should be carefully set
given the expected concurrent request load and available CPU and
memory resources.

[[pack.deltacompression]]pack.deltacompression::
+
If true, delta compression between objects is enabled.  This may
result in a smaller overall transfer for the client, but requires
more server memory and CPU time.
+
False (off) by default, matching Gerrit Code Review 2.1.4.

[[pack.threads]]pack.threads::
+
Maximum number of threads to use for delta compression (if enabled).
This is per-client request.  If set to 0 then the number of CPUs is
auto-detected and one thread per CPU is used, per client request.
+
By default, 1.


[[plugins]]
=== Section plugins

[[plugins.checkFrequency]]plugins.checkFrequency::
+
How often plugins should be examined for new plugins to load, removed
plugins to be unloaded, or updated plugins to be reloaded.  Values can
be specified using standard time unit abbreviations ('ms', 'sec',
'min', etc.).
+
If set to 0, automatic plugin reloading is disabled.  Administrators
may force reloading with link:cmd-plugin-reload.html[gerrit plugin reload].
+
Default is 1 minute.

[[plugins.allowRemoteAdmin]]plugins.allowRemoteAdmin::
+
Enable remote installation, enable and disable of plugins over HTTP
and SSH.  If set to true Administrators can install new plugins
remotely, or disable existing plugins.  Defaults to false.

[[plugins.mandatory]]plugins.mandatory::
+
List of mandatory plugins. If a plugin from this list does not load,
Gerrit will fail to start.
+
Disabling and restarting of a mandatory plugin is rejected, but reloading
of a mandatory plugin is still possible.

[[plugins.jsLoadTimeout]]plugins.jsLoadTimeout::
+
Set the timeout value for loading JavaScript plugins in Gerrit UI.
Values can be specified using standard time unit abbreviations ('ms',
'sec', 'min', etc.).
+
Default is 5 seconds. Negative values will be converted to 0.

[[plugins.transitionalPushOptions]]plugins.transitionalPushOptions::
+
Additional push options which should be accepted by gerrit as valid
options even if they are not registered by any plugin(e.g. "myplugin~foo").
+
This config can be used when gerrit migrates from a deprecated plugin to the new one. The new plugin
can (temporary) accept push options of the old plugin without registering such options.

[[receive]]
=== Section receive

This section is used to configure behavior of the 'receive-pack'
handler, which responds to 'git push' requests.

[[receive.allowGroup]]receive.allowGroup::
+
Name of the groups of users that are allowed to execute
'receive-pack' on the server. One or more groups can be set.
+
If no groups are added, any user will be allowed to execute
'receive-pack' on the server.

[[receive.certNonceSeed]]receive.certNonceSeed::
+
If set to a non-empty value and server-side signed push validation is
link:#receive.enableSignedPush[enabled], use this value as the seed to
the HMAC SHA-1 nonce generator. If unset, a 64-byte random seed will be
generated at server startup.
+
As this is used as the seed of a cryptographic algorithm, it is
recommended to be placed in link:#secure-config[`secure.config`].
+
Defaults to unset.

[[receive.certNonceSlop]]receive.certNonceSlop::
+
When validating the nonce passed as part of the signed push protocol,
accept valid nonces up to this many seconds old. This allows
certificate verification to work over HTTP where there is a lag between
the HTTP response providing the nonce to sign and the next request
containing the signed nonce. This can be significant on large
repositories, since the lag also includes the time to count objects on
the client.
+
Default is 5 minutes.

[[receive.checkMagicRefs]]receive.checkMagicRefs::
+
If true, Gerrit will verify the destination repository has
no references under the magic 'refs/for' branch namespace. Names under
these locations confuse clients when trying to upload code reviews so
Gerrit requires them to be empty.
+
If false Gerrit skips the sanity check and assumes administrators
have ensured the repository does not contain any magic references.
Setting to false to skip the check can decrease latency during push.
+
Default is true.

[[receive.allowProjectOwnersToChangeParent]]receive.allowProjectOwnersToChangeParent::
+
If true, Gerrit will allow project owners to change the parent of a project.
+
By default only Gerrit administrators are allowed to change the parent
of a project. By allowing project owners to change parents, it may
allow the owner to circumvent certain enforced rules (like important
BLOCK rules).
+
Default is false.
+
This value supports configuration reloads:
link:cmd-reload-config.html[reload-config]

[[receive.checkReferencedObjectsAreReachable]]receive.checkReferencedObjectsAreReachable::
+
If set to true, Gerrit will validate that all referenced objects that
are not included in the received pack are reachable by the user.
+
Carrying out this check on gits with many refs and commits can be a
very CPU-heavy operation. For non public Gerrit-servers this check may
be overkill.
+
Only disable this check if you trust the clients not to forge SHA-1
references to access commits intended to be hidden from the user.
+
Default is true.

[[receive.enableInMemoryRefCache]]receive.enableInMemoryRefCache::
+
If true, Gerrit will cache all refs advertised during push in memory and
base later receive operations on that cache.
+
Turning this cache off is considered experimental.
+
This cache provides value when the ref database is slow and/or does not
offer an inverse lookup of object ID to ref name. When RefTable is used,
this cache can be turned off (experimental) to get speed improvements.
+
Default is true.

[[receive.enableSignedPush]]receive.enableSignedPush::
+
If true, server-side signed push validation is enabled.
+
When a client pushes with `git push --signed`, this ensures that the
push certificate is valid and signed with a valid public key stored in
the `refs/meta/gpg-keys` branch of `All-Users`.
+
Defaults to false.

[[receive.maxBatchChanges]]receive.maxBatchChanges::
+
The maximum number of changes that Gerrit allows to be pushed
in a batch for review. When this number is exceeded Gerrit rejects
the push with an error message.
+
May be overridden for certain groups by specifying a limit in the
link:access-control.html#capability_batchChangesLimit['Batch Changes Limit']
global capability.
+
This setting can be used to prevent users from uploading large
number of changes for review by mistake.
+
Default is zero, no limit.

[[receive.maxBatchCommits]]receive.maxBatchCommits::
+
The maximum number of commits that Gerrit allows to be pushed in a batch
directly to a branch when link:user-upload.html#bypass_review[bypassing review].
This limit can be bypassed if a user link:user-upload.html#skip_validation[skips
validation].
+
Default is 10000.

[[receive.maxObjectSizeLimit]]receive.maxObjectSizeLimit::
+
Maximum allowed Git object size that 'receive-pack' will accept.
If an object is larger than the given size the pack-parsing will abort
and the push operation will fail. If set to zero then there is no
limit.
+
Gerrit administrators can use this setting to prevent developers
from pushing objects which are too large to Gerrit.
+
This setting can also be set in the `project.config`
(link:config-project-config.html[receive.maxObjectSizeLimit]) in order
to further reduce the global setting. The project specific setting is
only honored when it further reduces the global limit.
+
Default is zero.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.

[[receive.inheritProjectMaxObjectSizeLimit]]receive.inheritProjectMaxObjectSizeLimit::
+
Controls whether the project-level link:config-project-config.html[`receive.maxObjectSizeLimit`]
value is inherited from the parent project. When `true`, the value is
inherited, otherwise it is not inherited.
+
Default is false, the value is not inherited.

[[receive.maxTrustDepth]]receive.maxTrustDepth::
+
If signed push validation is link:#receive.enableSignedPush[enabled],
set to the maximum depth to search when checking if a key is
link:#receive.trustedKey[trusted].
+
Default is 0, meaning only explicitly trusted keys are allowed.

[[receive.threadPoolSize]]receive.threadPoolSize::
+
Maximum size of the thread pool in which the change data in received packs is
processed.
+
Defaults to the number of available CPUs according to the Java runtime.

[[receive.timeout]]receive.timeout::
+
Overall timeout on the time taken to process the change data in
received packs. Only includes the time processing Gerrit changes
and updating references, not the time to index the pack. Values can
be specified using standard time unit abbreviations ('ms', 'sec',
'min', etc.).
+
After the timeout is exceeded the task processing the receive gets a
cancellation signal that allows the tast to finish gracefully.
link:#receive.cancellationTimeout[receive.cancellationTimeout]
defines how much time the task has to react to the cancellation signal
before it is focefully cancelled.
+
The receive timeout cannot be overriden by setting a higher
link:user-upload.html#deadline[deadline] on the git push request.
+
Default is 4 minutes. If no unit is specified, milliseconds
is assumed.

[[receive.cancellationTimeout]]receive.cancellationTimeout::
+
Defines the time that a receive task has to react to a cancellation
signal and finish gracefully after link:#receive.timeout[receive.timeout]
is exceeded. If the receive task is still not terminated after the
cancellation timeout is exceeded the task is forcefully cancelled.
Values can be specified using standard time unit abbreviations ('ms',
'sec', 'min', etc.).
+
Default is 5 seconds. If no unit is specified, milliseconds is assumed.

[[receive.trustedKey]]receive.trustedKey::
+
List of GPG key fingerprints that should be considered trust roots by
the server when signed push validation is
link:#receive.enableSignedPush[enabled]. A key is trusted by the server
if it is either in this list, or a path of trust signatures leads from
the key to a configured trust root. The maximum length of the path is
determined by link:#receive.maxTrustDepth[`receive.maxTrustDepth`].
+
Key fingerprints can be displayed with `gpg --list-keys
--with-fingerprint`.
+
Trust signatures can be added to a key using the `tsign` command to
link:https://www.gnupg.org/documentation/manuals/gnupg/OpenPGP-Key-Management.html[
`gpg --edit-key`,role=external,window=_blank], after which the signed key should be re-uploaded.
+
If no keys are specified, web-of-trust checks are disabled. This is the
default behavior.

[[repository]]
=== Section repository

Repositories in this sense are the same as projects.

In the following example configuration `Registered Users` is set
to be the default owner of new projects.

----
[repository "*"]
  ownerGroup = Registered Users
----

The only matching patterns supported are exact match or wildcard matching which
can be specified by ending the name with a `*`. If a project matches more than one
repository configuration, then the configuration from the more precise match
will be used. In the following example, the default submit type for a project
named `project/plugins/a` would be `CHERRY_PICK`.

----
[repository "project/*"]
  defaultSubmitType = MERGE_IF_NECESSARY
[repository "project/plugins/*"]
  defaultSubmitType = CHERRY_PICK
----

[NOTE]
All properties are used from the matching repository configuration. In
the previous example, all properties will be used from `project/plugins/\*`
section and no properties will be inherited nor overridden from `project/*`.

[[repository.name.basePath]]repository.<name>.basePath::
+
Alternate to <<gerrit.basePath,gerrit.basePath>>. The repository will be created
and used from this location instead: ${alternateBasePath}/${projectName}.git.
+
If configuring the basePath for an existing project in gerrit, make sure to stop
gerrit, move the repository in the alternate basePath, configure basePath for
this repository and then start Gerrit.
+
Path must be absolute.

[[repository.name.defaultSubmitType]]repository.<name>.defaultSubmitType::
+
The default submit type for newly created projects. Supported values
are `INHERIT`, `MERGE_IF_NECESSARY`, `FAST_FORWARD_ONLY`, `REBASE_IF_NECESSARY`,
`REBASE_ALWAYS`, `MERGE_ALWAYS` and `CHERRY_PICK`.
+
For more details see link:config-project-config.html#submit-type[Submit Types].
+
Default is link:config-project-config.html#submit_type_inherit[`INHERIT`].
+
This submit type is only applied at project creation time if a submit type is
omitted from the link:rest-api-projects.html#project-input[ProjectInput]. If the
submit type is unset in the project config at runtime, for backwards
compatibility purposes, it defaults to
link:project-configuration.html#merge_if_necessary[`MERGE_IF_NECESSARY`] rather
than `INHERIT`.

[[repository.name.ownerGroup]]repository.<name>.ownerGroup::
+
A name of a link:config-groups.html[group] which exists. Zero, one or many
groups are allowed.  Each on its own line.  Groups which don't exist are ignored.

[[retry]]
=== Section retry

[[retry.maxWait]]retry.maxWait::
+
Maximum time to wait between attempts to retry an operations when one attempt
fails (e.g. on NoteDb updates due to contention, aka lock failure, on the
underlying ref storage). Operations are retried with exponential backoff, plus
some random jitter, until the interval reaches this limit. After that, retries
continue to occur after a fixed timeout (plus jitter), up to
link:#retry.timeout[`retry.timeout`].
+
Defaults to 5 seconds; unit suffixes are supported, and assumes milliseconds if
not specified.

[[retry.timeout]]retry.timeout::
+
Total timeout for retrying operations when one attempt fails.
+
It is possible to overwrite this default timeout based on operation types by
setting link:#retry.operationType.timeout[`retry.<operationType>.timeout`].
+
Defaults to 20 seconds; unit suffixes are supported, and assumes milliseconds if
not specified.

[[retry.operationType.timeout]]retry.<operationType>.timeout::
+
Total timeout for retrying operations of type `<operationType>` when one
attempt fails. `<operationType>` can be `ACCOUNT_UPDATE`, `CHANGE_UPDATE`,
`GROUP_UPDATE` and `INDEX_QUERY`.
+
Defaults to link:#retry.timeout[`retry.timeout`]; unit suffixes are supported,
and assumes milliseconds if not specified.

[[retry.retryWithTraceOnFailure]]retry.retryWithTraceOnFailure::
+
Whether Gerrit should automatically retry operations on failure with tracing
enabled. The automatically generated traces can help with debugging.
+
By default this is set to false.

[[rules]]
=== Section rules

[[rules.enable]]rules.enable::
+
If true, Gerrit will load and execute 'rules.pl' files in each
project's refs/meta/config branch, if present. When set to false,
only the default internal rules will be used.
+
Default is true, to execute project specific rules.

[[rules.reductionLimit]]rules.reductionLimit::
+
Maximum number of Prolog reductions that can be performed when
evaluating rules for a single change. Each function call made
in user rule code, internal Gerrit Prolog code, or the Prolog
interpreter counts against this limit.
+
Sites using very complex rules that need many reductions should
compile Prolog to Java bytecode with link:pgm-rulec.html[rulec].
This eliminates the dynamic Prolog interpreter from charging its
own reductions against the limit, enabling more logic to execute
within the same bounds.
+
A reductionLimit of 0 is nearly infinite, implemented by setting
the internal limit to 2^31-1.
+
Default is 100,000 reductions (about 14 ms on Intel Core i7 CPU).

[[rules.compileReductionLimit]]rules.compileReductionLimit::
+
Maximum number of Prolog reductions that can be performed when
compiling source code to internal Prolog machine code.
+
Default is 10x reductionLimit (1,000,000).

[[rules.maxSourceBytes]]rules.maxSourceBytes::
+
Maximum input size (in bytes) of a Prolog rules.pl file.  Larger
source files may need a larger rules.compileReductionLimit.  Consider
using link:pgm-rulec.html[rulec] to precompile larger rule files.
+
A size of 0 bytes disables rules, same as rules.enable = false.
+
Common unit suffixes of 'k', 'm', or 'g' are supported.
+
Default is 128 KiB.

[[rules.maxPrologDatabaseSize]]rules.maxPrologDatabaseSize::
+
Number of predicate clauses allowed to be defined in the Prolog
database by project rules.  Very complex rules may need more than the
default 256 limit, but cost more memory and may need more time to
evaluate.  Consider using link:pgm-rulec.html[rulec] to precompile
larger rule files.
+
Default is 256.

[[execution]]
=== Section execution

[[execution.defaultThreadPoolSize]]execution.defaultThreadPoolSize::
+
The default size of the background execution thread pool in
which miscellaneous tasks are handled.
+
Default and minimum is 2 so that a single, potentially longer executing
task (e.g. GC), is not blocking the entire execution.

[[execution.fanOutThreadPoolSize]]execution.fanOutThreadPoolSize::
+
Maximum size of thread pool to on which a serving thread can fan-out
work to parallelize it.
+
When set to 0, a direct executor will be used.
+
By default, 25 which means that formatting happens in the caller thread.

[[receiveemail]]
=== Section receiveemail

[[receiveemail.protocol]]receiveemail.protocol::
+
Specifies the protocol used for receiving emails. Valid options are
'POP3', 'IMAP' and 'NONE'. Note that Gerrit will automatically switch between
POP3 and POP3s as well as IMAP and IMAPS depending on the specified
link:#receiveemail.encryption[encryption].
+
Defaults to 'NONE' which means that receiving emails is disabled.

[[receiveemail.host]]receiveemail.host::
+
The hostname of the mailserver. Example: 'imap.gmail.com'.
+
Defaults to an empty string which means that receiving emails is disabled.

[[receiveemail.port]]receiveemail.port::
+
The port the email server exposes for receiving emails.
+
Defaults to the industry standard for a given protocol and encryption:
POP3: 110; POP3S: 995; IMAP: 143; IMAPS: 993.

[[receiveemail.username]]receiveemail.username::
+
Username used for authenticating with the email server.
+
Defaults to an empty string.

[[receiveemail.password]]receiveemail.password::
+
Password used for authenticating with the email server.
+
Defaults to an empty string.

[[receiveemail.encryption]]receiveemail.encryption::
+
Encryption standard used for transport layer security between Gerrit and the
email server. Possible values include 'NONE', 'SSL' and 'TLS'.
+
Defaults to 'NONE'.

[[receiveemail.fetchInterval]]receiveemail.fetchInterval::
+
Time between two consecutive fetches from the email server. Communication with
the email server is not kept alive. Examples: 60s, 10m, 1h.
+
Defaults to 60 seconds.

[[receiveemail.enableImapIdle]]receiveemail.enableImapIdle::
+
If the IMAP protocol is used for retrieving emails, IMAPv4 IDLE can be used to
keep the connection with the email server alive and receive a push when a new
email is delivered to the inbox. In this case, Gerrit will process the email
immediately and will not have a fetch delay.
+
Defaults to false.

[[receiveemail.filter.mode]]receiveemail.filter.mode::
+
An allow and block filter to filter incoming emails.
+
If `OFF`, emails are not filtered by the list filter.
+
If `ALLOW`, only emails where a pattern from
<<receiveemail.filter.patterns,receiveemail.filter.patterns>>
matches 'From' will be processed.
+
If `BLOCK`, only emails where no pattern from
<<receiveemail.filter.patterns,receiveemail.filter.patterns>>
matches 'From' will be processed.
+
Defaults to `OFF`.
+
The previous filter-names 'BLACKLIST' and 'WHITELIST' have been deprecated
since they may be considered disrespectful and there's no technical or
practical reason to use these exact terms for the filters.
For backwards compatibility they are still supported but support for these
deprecated terms will be removed in future releases.

[[receiveemail.filter.patterns]]receiveemail.filter.patterns::
+
A list of regular expressions to match the email sender against. This can also
be a list of addresses when regular expression characters are escaped.

[[sendemail]]
=== Section sendemail

[[sendemail.enable]]sendemail.enable::
+
If false Gerrit will not send email messages, for any reason,
and all other properties of section sendemail are ignored.
+
By default, true, allowing notifications to be sent.

[[sendemail.html]]sendemail.html::
+
If false, Gerrit will only send plain-text emails.
If true, Gerrit will send multi-part emails with an HTML and
plain text part.
+
By default, true, allowing HTML in the emails Gerrit sends.

[[sendemail.connectTimeout]]sendemail.connectTimeout::
+
The connection timeout of opening a socket connected to a
remote SMTP server.
+
Values can be specified using standard time unit abbreviations
('ms', 'sec', 'min', etc.).
If no unit is specified, milliseconds is assumed.
+
Default is 0. A timeout of zero is interpreted as an infinite
timeout. The connection will then block until established or
an error occurs.

[[sendemail.threadPoolSize]]sendemail.threadPoolSize::
+
Maximum size of thread pool in which the review comments
notifications are sent out asynchronously.
+
By default, 1.

[[sendemail.from]]sendemail.from::
+
Designates what name and address Gerrit will place in the From
field of any generated email messages.  The supported values are:
+
* `USER`
+
Gerrit will set the From header to use the current user's
Full Name and Preferred Email.  This may cause messages to be
classified as spam if the user's domain has SPF or DKIM enabled
and <<sendemail.smtpServer,sendemail.smtpServer>> is not a trusted
relay for that domain. You can specify
<<sendemail.allowedDomain,sendemail.allowedDomain>> to instruct Gerrit to only
send as USER if USER is from those domains.
+
* `MIXED`
+
Shorthand for `${user} (Code Review) <review@example.com>` where
`review@example.com` is the same as <<user.email,user.email>>.
See below for a description of how the replacement is handled.
+
* `SERVER`
+
Gerrit will set the From header to the same name and address
it records in any commits Gerrit creates.  This is set by
<<user.name,user.name>> and <<user.email,user.email>>, or guessed
from the local operating system.
+
* `Code Review <review@example.com>`
+
If set to a name and email address in brackets, Gerrit will use
this name and email address for any messages, overriding the name
that may have been selected for commits by user.name and user.email.
Optionally, the name portion may contain the placeholder `${user}`,
which is replaced by the Full Name of the current user.

+
By default, MIXED.

[[sendemail.allowedDomain]]sendemail.allowedDomain::
+
Only used when `sendemail.from` is set to `USER`.
List of allowed domains. If user's email matches one of the domains, emails will
be sent as USER, otherwise as MIXED mode. Wildcards may be specified by
including `\*` to match any number of characters, for example `*.example.com`
matches any subdomain of `example.com`.
+
By default, `*`.

[[sendemail.smtpServer]]sendemail.smtpServer::
+
Hostname (or IP address) of a SMTP server that will relay
messages generated by Gerrit to end users.
+
By default, 127.0.0.1 (aka localhost).

[[sendemail.smtpServerPort]]sendemail.smtpServerPort::
+
Port number of the SMTP server in sendemail.smtpserver.
+
By default, 25, or 465 if smtpEncryption is 'ssl'.

[[sendemail.smtpEncryption]]sendemail.smtpEncryption::
+
Specify the encryption to use, either 'ssl' or 'tls'.
+
By default, 'none', indicating no encryption is used.

[[sendemail.sslVerify]]sendemail.sslVerify::
+
If false and sendemail.smtpEncryption is 'ssl' or 'tls', Gerrit
will not verify the server certificate when it connects to send
an email message.
+
By default, true, requiring the certificate to be verified.

[[sendemail.smtpUser]]sendemail.smtpUser::
+
User name to authenticate with, if required for relay.

[[sendemail.smtpPass]]sendemail.smtpPass::
+
Password for the account named by sendemail.smtpUser.

[[sendemail.allowrcpt]]sendemail.allowrcpt::
+
If present, each value adds one entry to the list of allowed email
addresses that Gerrit can send emails to.  If set to a complete
email address, that one address is added to the list of allowed
emails.
If set to a domain name, any address at that domain can receive
email from Gerrit.
+
If allowrcpt is configured, The set of allowed recipients is:
`allowrcpt - denyrcpt`.
+
By default, unset, permitting delivery to any email address.

[[sendemail.denyrcpt]]sendemail.denyrcpt::
+
If present, each value adds one entry to the list of email
addresses that Gerrit can't send emails to.  If set to a complete
email address, that one address is added to the list of blocked
emails.
If set to a domain name, any address at that domain can *not* receive
email from Gerrit.
+
By default, unset, permitting delivery to any email address.

[[sendemail.includeDiff]]sendemail.includeDiff::
+
If true, new change emails and merged change emails from Gerrit
will include the complete unified diff of the change.
Variable maxmimumDiffSize places an upper limit on how large the
email can get when this option is enabled.
+
By default, false.

[[sendemail.maximumDiffSize]]sendemail.maximumDiffSize::
+
Largest size of unified diff output to include in an email. When
the diff exceeds this size the file paths will be listed instead.
Standard byte unit suffixes are supported.
+
By default, 256 KiB.

[[sendemail.importance]]sendemail.importance::
+
If present, emails sent from Gerrit will have the given level
of importance. Valid values include 'high' and 'low', which
email clients will render in different ways.
+
By default, unset, so no Importance header is generated.

[[sendemail.expiryDays]]sendemail.expiryDays::
+
If present, emails sent from Gerrit will expire after the given
number of days. This will add the Expiry-Date header and
email clients may expire or expunge mails whose Expiry-Date
header is in the past. This should be a positive non-zero
number indicating how many days in the future the mails
should expire.
+
By default, unset, so no Expiry-Date header is generated.

[[sendemail.replyToAddress]]sendemail.replyToAddress::
+
A custom Reply-To address should only be provided if Gerrit is set up to
receive emails and the inbound address differs from
<<sendemail.from,sendemail.from>>.
It will be set as Reply-To header on all types of outgoing email where
Gerrit can parse back a user's reply.
+
Defaults to an empty string which adds <<sendemail.from,sendemail.from>> as
Reply-To if inbound email is enabled and the review's author otherwise.

[[sendemail.allowTLD]]sendemail.allowTLD::
+
List of custom TLDs to allow sending emails to in addition to those specified
in the link:http://data.iana.org/TLD/[IANA list,role=external,window=_blank].
+
Defaults to an empty list, meaning no additional TLDs are allowed.


[[sendemail.addInstanceNameInSubject]]sendemail.addInstanceNameInSubject::
+
When set to true, Gerrit will add its short name to the email subject, allowing recipients to quickly identify
what Gerrit instance the email came from.
+
The short name can be customized via the gerrit.instanceName option.
+
Defaults to false.


[[site]]
=== Section site

[[site.allowOriginRegex]]site.allowOriginRegex::
+
List of regular expressions matching origins that should be permitted
to use the full Gerrit REST API.  These should be trusted applications,
as the sites may be able to use the user's credentials. Applies to
all requests, including state changing methods (PUT, DELETE, POST).
+
Expressions should not require trailing slash. For example a valid
pattern might be `https://build-status[.]example[.]com`.
+
By default, unset, denying all cross-origin requests.

[[site.refreshHeaderFooter]]site.refreshHeaderFooter::
+
If true the server checks the site header, footer and CSS files for
updated versions. If false, a server restart is required to change
any of these resources. Default is true, allowing automatic reloads.

[[ssh-alias]]
=== Section ssh-alias

Variables in section ssh-alias permit the site administrator to alias
another command from Gerrit or a plugin into the `gerrit` command
namespace. To alias `replication start` to `gerrit replicate`:

----
[ssh-alias]
  replicate = replication start
----

[[sshd]]
=== Section sshd

[[sshd.enableCompression]]sshd.enableCompression::
+
In the general case, we want to disable transparent compression, since
the majority of our data transfer is highly compressed Git pack files
and we cannot make them any smaller than they already are.
+
However, if there are CPU in abundance and the server is reachable
through slow networks, gits with huge amount of refs can benefit from
SSH-compression since git does not compress the ref announcement during
handshake.
+
Compression can be especially useful when Gerrit replicas are being used
for the larger clones and fetches and the primary server mostly takes
small receive-packs.
+
By default, `false`.

[[sshd.backend]]sshd.backend::
+
Starting from version 0.9.0 Apache SSHD project added support for NIO2
IoSession. To use the old MINA session the `backend` option must be set
to `MINA`.
+
By default, `NIO2`.

[[sshd.listenAddress]]sshd.listenAddress::
+
Specifies the local addresses the internal SSHD should listen
for connections on.  The following forms may be used to specify
an address.  In any form, `:'port'` may be omitted to use the
default of `29418`.
+
* `'hostname':'port'` (for example `review.example.com:29418`)
* `'IPv4':'port'` (for example `10.0.0.1:29418`)
* `['IPv6']:'port'` (for example `[ff02::1]:29418`)
* `+*:'port'+` (for example `+*:29418+`)

+
--
If multiple values are supplied, the daemon will listen on all
of them.

To disable the internal SSHD, set listenAddress to `off`.

By default, `*:29418`.
--

[[sshd.advertisedAddress]]sshd.advertisedAddress::
+
Specifies the addresses clients should be told to connect to.
This may differ from sshd.listenAddress if a firewall based port
redirector is being used, making Gerrit appear to answer on port
22. The following forms may be used to specify an address.  In any
form, `:'port'` may be omitted to use the default SSH port of 22.

* `'hostname':'port'` (for example `review.example.com:22`)
* `'IPv4':'port'` (for example `10.0.0.1:29418`)
* `['IPv6']:'port'` (for example `[ff02::1]:29418`)

+
--
If multiple values are supplied, the daemon will advertise all
of them.

By default uses the value of `sshd.listenAddress`.
--

[[sshd.tcpKeepAlive]]sshd.tcpKeepAlive::
+
If true, enables TCP keepalive messages to the other side, so
the daemon can terminate connections if the peer disappears.
+
Only effective when `sshd.backend` is set to `MINA`.
+
By default, `true`.

[[sshd.threads]]sshd.threads::
+
Number of threads to use when executing SSH command requests.
If additional requests are received while all threads are busy they
are queued and serviced in a first-come-first-served order.
+
By default, 2x the number of CPUs available to the JVM (but at least 4
threads).
+
[NOTE]
When SSH daemon is enabled then this setting also defines the max number of
concurrent Git requests for interactive users over SSH and HTTP together.

[[sshd.batchThreads]]sshd.batchThreads::
+
Number of threads to allocate for SSH command requests from
link:access-control.html#service_users[service users].
If equals to 0, then all non-interactive requests are executed in the same
queue as interactive requests.
+
Any other value will remove the number of threads from the queue
allocated to interactive users, and create a separate thread pool
of the requested size, which will be used to run commands from
service users.
+
If the number of threads requested for service users is larger
than the total number of threads allocated in sshd.threads, then the
value of sshd.threads is increased to accommodate the requested value.
+
By default is 1 on single core node, 2 otherwise.
+
[NOTE]
When SSH daemon is enabled then this setting also defines the max number of
concurrent Git requests for batch users over SSH and HTTP together.

[[sshd.streamThreads]]sshd.streamThreads::
+
Number of threads to use when formatting events to asynchronous
streaming clients.  Event formatting is multiplexed onto this thread
pool by a simple FIFO scheduling system.
+
By default, 1 plus the number of CPUs available to the JVM.

[[sshd.commandStartThreads]]sshd.commandStartThreads::
+
Number of threads used to parse a command line submitted by a client
over SSH for execution, create the internal data structures used by
that command, and schedule it for execution on another thread.
+
By default, 2.

[[sshd.maxAuthTries]]sshd.maxAuthTries::
+
Maximum number of authentication attempts before the server
disconnects the client.  Each public key that a client has loaded
into its local agent counts as one auth request.  Users can work
around the server's limit by loading less keys into their agent,
or selecting a specific key in their `~/.ssh/config` file with
the `IdentityFile` option.
+
By default, 6.

[[sshd.loginGraceTime]]sshd.loginGraceTime::
+
Time in seconds that a client has to authenticate before the server
automatically terminates their connection.  Values should use common
unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days

+
By default, 2 minutes.

[[sshd.idleTimeout]]sshd.idleTimeout::
+
Time in seconds after which the server automatically terminates idle
connections (or 0 to disable closing of idle connections) not waiting for
any server operation to complete.
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days

+
By default, 0.

[[sshd.waitTimeout]]sshd.waitTimeout::
+
Time in seconds after which the server automatically terminates
connections waiting for a server operation to complete, like for instance
cloning a very large repo with lots of refs.
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
* h, hr, hour, hours
* d, day, days

+
By default, 30s.

[[sshd.gracefulStopTimeout]]sshd.gracefulStopTimeout::
+
Set a graceful stop time. If set, Gerrit ensures that all open SSH
sessions are preserved for a maximum period of time, before forcing the
shutdown of the SSH daemon. During this period, no new requests
will be accepted. This option is meant to be used in setups performing
rolling restarts.
+
Values should use common unit suffixes to express their setting:
+
* s, sec, second, seconds
* m, min, minute, minutes
+
By default, 0 seconds (immediate shutdown).

[[sshd.maxConnectionsPerUser]]sshd.maxConnectionsPerUser::
+
Maximum number of concurrent SSH sessions that a user account
may open at one time.  This is the number of distinct SSH logins
that each user may have active at one time, and is not related to
the number of commands a user may issue over a single connection.
If set to 0, there is no limit.
+
By default, 64.

[[sshd.cipher]]sshd.cipher::
+
Available ciphers.  To permit multiple ciphers, specify multiple
`sshd.cipher` keys in the configuration file, one cipher name
per key.  Cipher names starting with `+` are enabled in addition
to the default ciphers, cipher names starting with `-` are removed
from the default cipher set.
+
Supported ciphers:
+
* `aes128-cbc`
* `aes128-ctr`
* `aes128-gcm@openssh.com`
* `aes192-cbc`
* `aes192-ctr`
* `aes256-cbc`
* `aes256-ctr`
* `aes256-gcm@openssh.com`
* `arcfour128`
* `arcfour256`
* `blowfish-cbc`
* `chacha20-poly1305@openssh.com`
* `3des-cbc`
* `none`
+
If your setup allows for it, it's recommended to disable all ciphers except
the AES-CTR modes.
+
See also link:https://github.com/apache/mina-sshd/tree/master#ciphers[ciphers,role=external,window=_blank].
+
By default, all supported ciphers except `none` are available.

[[sshd.mac]]sshd.mac::
+
Available MAC (message authentication code) algorithms.  To permit
multiple algorithms, specify multiple `sshd.mac` keys in the
configuration file, one MAC per key.  MAC names starting with `+`
are enabled in addition to the default MACs, MAC names starting with
`-` are removed from the default MACs.
+
Supported MACs:
+
* `hmac-md5`
* `hmac-md5-96`
* `hmac-sha1`
* `hmac-sha1-96`
* `hmac-sha2-256`
* `hmac-sha2-512`
* `hmac-sha1-etm@openssh.com`
* `hmac-sha2-256-etm@openssh.com`
* `hmac-sha2-512-etm@openssh.com`
+
See also link:https://github.com/apache/mina-sshd/tree/master#macs[macs,role=external,window=_blank].
+
By default, all supported MACs are available.

[[sshd.enableDeprecatedKexAlgorithms]]sshd.enableDeprecatedKexAlgorithms::
+
Enable deprecated kex algorithms:
+
* `diffie-hellman-group1-sha1`
* `diffie-hellman-group14-sha1`
* `diffie-hellman-group-exchange-sha1`

By default, the deprecated kex algorithms are disabled.

[[sshd.kex]]sshd.kex::
+
--
Available key exchange algorithms. To permit multiple algorithms,
specify multiple `sshd.kex` keys in the configuration file, one key
exchange algorithm per key.  Key exchange algorithm names starting
with `+` are enabled in addition to the default key exchange
algorithms, key exchange algorithm names starting with `-` are
removed from the default key exchange algorithms.

Supported key exchange algorithms:

* `ecdh-sha2-nistp521`
* `ecdh-sha2-nistp384`
* `ecdh-sha2-nistp256`
* `curve25519-sha256`
* `curve25519-sha256@libssh.org`
* `curve448-sha512`
* `diffie-hellman-group-exchange-sha256`
* `diffie-hellman-group18-sha512`
* `diffie-hellman-group17-sha512`
* `diffie-hellman-group16-sha512`
* `diffie-hellman-group15-sha512`
* `diffie-hellman-group14-sha256`

See link:#sshd.enableDeprecatedKexAlgorithms[sshd.enableDeprecatedKexAlgorithms]
for deprecated key algorithms and how to enable them.

It is strongly recommended to disable at least `diffie-hellman-group1-sha1`
as it's known to be vulnerable (logjam attack). Additionally, if your setup
allows for it, it is recommended to disable the remaining two `sha1` key
exchange algorithms.

See also link:https://github.com/apache/mina-sshd/tree/master#key-exchange[key exchange,role=external,window=_blank].

By default, all supported key exchange algorithms are available.
--

[[sshd.kerberosKeytab]]sshd.kerberosKeytab::
+
Enable kerberos authentication for SSH connections.  To permit
kerberos authentication, the server must have a host principal
(see `sshd.kerberosPrincipal`) which is acquired from a keytab.
This must be provisioned by the kerberos administrators, and is
typically installed into `/etc/krb5.keytab` on host machines.
+
The keytab must contain at least one `host/` principal, typically
using the host's canonical name. If it does not use the
canonical name, the `sshd.kerberosPrincipal` should be configured
with the correct name.
+
By default, not set and so kerberos authentication is not enabled.

[[sshd.kerberosPrincipal]]sshd.kerberosPrincipal::
+
If kerberos authentication is enabled with `sshd.kerberosKeytab`,
instead use the given principal name instead of the default.
If the principal does not begin with `host/` a warning message is
printed and may prevent successful authentication.
+
This may be useful if the host is behind an IP load balancer or
other SSH forwarding systems, since the principal name is constructed
by the client and must match for kerberos authentication to work.
+
By default, `host/canonical.host.name`

[[sshd.requestLog]]sshd.requestLog::
+
Enable (or disable) the `'$site_path'/logs/sshd_log` request log.
If enabled, a request log file is written out by the SSH daemon.
The sshd log format is documented link:logs.html#_sshd_log[here].
+
`log4j.appender` with the name `sshd_log` can be configured to overwrite
programmatic configuration.
+
By default, `true`.
+
This value supports link:#reloadConfig[configuration reloads].

[[sshd.rekeyBytesLimit]]sshd.rekeyBytesLimit::
+
The SSH daemon will issue a rekeying after a certain amount of data.
This configuration option allows you to tweak that setting.
+
By default, 1073741824 (bytes, 1GB).
+
The `rekeyBytesLimit` cannot be set to lower than 32.

[[sshd.rekeyTimeLimit]]sshd.rekeyTimeLimit::
+
The SSH daemon will issue a rekeying after a certain amount of time.
This configuration option allows you to tweak that setting.
+
By default, 1h.
+
Set to 0 to disable this check.

[[suggest]]
=== Section suggest

[[suggest.maxSuggestedReviewers]]suggest.maxSuggestedReviewers::
+
The maximum numbers of reviewers suggested.
+
By default 10.
+
This value supports link:#reloadConfig[configuration reloads].

[[suggest.from]]suggest.from::
+
The number of characters that a user must have typed before suggestions
are provided. If set to 0, suggestions are always provided. This is only
used for suggesting accounts when adding members to a group.
+
By default 0.

[[suggest.relevantChanges]]suggest.relevantChanges::
+
When suggesting reviewers, we go over recent changes of the user, and
give priority to users that are present as reviewers in any of those
changes. The number of changes we go over is `sugggest.relevantChanges`.
+
This nubmer is a tradeoff between speed and accuracy.
A high number would be accurate but slow, and a low number would be
fast but inaccurate.
+
By default 50.

[[suggest.skipServiceUsers]]suggest.skipServiceUsers::
+
If link:access-control.html#service_users[service users] should be skipped when
suggesting reviewers.
+
By default true.

[[tracing]]
=== Section tracing

[[tracing.performanceLogging]]tracing.performanceLogging::
+
Whether performance logging is enabled.
+
When performance logging is enabled, performance events for some
operations are collected in memory while a request is running. At the
end of the request the performance events are handed over to the
link:dev-plugins.html#performance-logger[PerformanceLogger] plugins.
This means if performance logging is enabled, the memory footprint of
requests can be markedly increased.
In one recorded case the impact was an overall heap increase of 40%
(using the metrics-reporter-graphite plugin), in other instances the
heap increase wasn't nearly as dramatic and the impact is most likely
dependent on which plugin is used.
+
By default, false.

[[tracing.exportPerformanceMetrics]]tracing.exportPerformanceMetrics::
+
Whether to export performance metrics.
+
Performace logged when link:#tracing.performanceLogging[`performanceLogging`] is
enabled, can be exported as metrics.
+
NOTE: Since the payload returned could be of tens of thousands metrics,
assess the latency of the metrics endpoint before enabling this option.
+
By default, false.

[[tracing.traceid]]
==== Subsection tracing.<trace-id>

There can be multiple `tracing.<trace-id>` subsections to configure
automatic tracing of requests. To be traced a request must match all
conditions of one `tracing.<trace-id>` subsection. The subsection name
is used as trace ID. Using this trace ID administrators can find
matching log entries.

[[tracing.traceid.requestType]]tracing.<trace-id>.requestType::
+
Type of request for which request tracing should be always enabled (can
be `GIT_RECEIVE`, `GIT_UPLOAD`, `REST` and `SSH`).
+
May be specified multiple times.
+
By default, unset (all request types are matched).

[[tracing.traceid.requestUriPattern]]tracing.<trace-id>.requestUriPattern::
+
Regular expression to match request URIs for which request tracing
should be enabled except if they match
link:tracing.traceid.excludedRequestUriPattern[excludedRequestUriPattern].
Request URIs are only available for REST requests. Request URIs never include
the '/a' prefix.
+
May be specified multiple times.
+
By default, unset (all request URIs are matched).

[[tracing.traceid.excludedRequestUriPattern]]tracing.<trace-id>.excludedRequestUriPattern::
+
Regular expression to match request URIs for which request tracing
should not be enabled even if they match
link:#tracing.traceid.requestUriPattern[requestUriPattern].
Request URIs are only available for REST requests. Request URIs never include
the '/a' prefix.
+
May be specified multiple times.
+
By default, unset (no request URIs are excluded).

[[tracing.traceid.account]]tracing.<trace-id>.account::
+
Account ID of an account for which request tracing should be always
enabled.
+
May be specified multiple times.
+
By default, unset (all accounts are matched).

[[tracing.traceid.projectPattern]]tracing.<trace-id>.projectPattern::
+
Regular expression to match project names for which request tracing
should be always enabled.
+
May be specified multiple times.
+
By default, unset (all projects are matched).

[[deadline.id]]
==== Subsection deadline.<id>

There can be multiple `deadline.<id>` subsections to configure deadlines for
request executions. For a deadline to apply all conditions of the
`deadline.<id>` subsection must match. The subsection name is the ID of the
deadline configuration and allows to track back an applied deadline to its
configuration.

Clients can override the deadlines that are configured here by setting a
deadline on the request.

Deadlines are only supported for `REST`, `SSH` and `GIT_RECEIVE` requests, but
not for `GIT_UPLOAD` requests.

[[deadline.id.timeout]]deadline.<id>.timeout::
+
Timeout after which matching requests should be cancelled.
+
Values must be specified using standard time unit abbreviations ('ms', 'sec',
'min', etc.).
+
For some requests additional timeout configurations may apply, e.g.
link:#receive.timeout[receive.timeout] for git pushes.
+
By default, unset.

[[deadline.id.isAdvisory]]deadline.<id>.isAdvisory::
+
Whether this deadline is an advisory deadline. Advisory deadlines do not cause
requests to be aborted when they are exceeded. Instead, if an advisory deadline
is exceeded, only the `cancellation/advisory_deadline_count` metrics is
incremented and a log is written. This is useful to test how many requests would
be affected by a new deadline configuration.
+
By default, `false`.

[[deadline.id.requestType]]deadline.<id>.requestType::
+
Type of request to which the deadline applies (can be `GIT_RECEIVE`, `REST` and
`SSH`).
+
May be specified multiple times.
+
By default, unset (all request types are matched).

[[deadline.id.requestUriPattern]]deadline.<id>.requestUriPattern::
+
Regular expression to match request URIs to which the deadline applies except if
they match
link:#deadline.id.excludedRequestUriPattern[excludedRequestUriPattern]. Request
URIs are only available for REST requests. Request URIs never include the '/a'
prefix.
+
May be specified multiple times.
+
By default, unset (all request URIs are matched).

[[deadline.id.excludedRequestUriPattern]]deadline.<id>.excludedRequestUriPattern::
+
Regular expression to match request URIs to which the deadline should not be
applied even if they match
link:#deadline.id.requestUriPattern[requestUriPattern]. Request URIs are only
available for REST requests. Request URIs never include the '/a' prefix.
+
May be specified multiple times.
+
By default, unset (no request URIs are excluded).

[[deadline.id.account]]deadline.<id>.account::
+
Account ID of an account to which the deadline applies.
+
May be specified multiple times.
+
By default, unset (all accounts are matched).

[[deadline.id.projectPattern]]deadline.<id>.projectPattern::
+
Regular expression to match project names to which the deadline applies.
+
May be specified multiple times.
+
By default, unset (all projects are matched).

[[trackingid]]
=== Section trackingid

Tagged footer lines containing references to external
tracking systems, parsed out of the commit message and
saved in Gerrit's secondary index.

After making changes to this section, existing changes
must be reindexed with link:pgm-reindex.html[reindex].

The tracking ids are searchable using tr:<tracking id> or
bug:<tracking id>.

----
[trackingid "jira-bug"]
  footer = Bugfix:
  footer = Bug:
  match = JRA\\d{2,8}
  system = JIRA

[trackingid "jira-feature"]
  footer = Feature
  match = JRA(\\d{2,8})
  system = JIRA
----

[[trackingid.name.footer]]trackingid.<name>.footer::
+
A prefix tag that identifies the footer line to parse for tracking ids.
+
Several trackingid entries can have the same footer tag, and a single trackingid
entry can have multiple footer tags.
+
If multiple footer tags are specified, each tag will be parsed separately and
duplicates will be ignored.
+
The trailing ":" is optional.

[[trackingid.name.match]]trackingid.<name>.match::
+
A link:http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html[standard
Java regular expression (java.util.regex),role=external,window=_blank] used to match the
external tracking id part of the footer line. The match can
result in several entries in the DB.  If grouping is used in the
regex the first group will be interpreted as the tracking id.
Tracking ids longer than 32 characters will be ignored.
+
The configuration file parser eats one level of backslashes, so the
character class `\s` requires `\\s` in the configuration file.  The
parser also terminates the line at the first `#`, so a match
expression containing # must be wrapped in double quotes.

[[trackingid.name.system]]trackingid.<name>.system::
+
The name of the external tracking system (maximum 20 characters).
It is possible to have several trackingid entries for the same
tracking system.

[[transfer]]
=== Section transfer

[[transfer.timeout]]transfer.timeout::
+
Number of seconds to wait for a single network read or write
to complete before giving up and declaring the remote side is
not responding.  If 0, there is no timeout, and this server will
wait indefinitely for a transfer to finish.
+
A timeout should be large enough to mostly transfer the objects to
the other side.  1 second may be too small for larger projects,
especially over a WAN link, while 10-30 seconds is a much more
reasonable timeout value.
+
Defaults to 0 seconds, wait indefinitely.


[[upload]]
=== Section upload

Options to control the behavior of `upload-pack` on the server side,
which handles a user's fetch, clone, or repo sync command.

----
[upload]
  allowGroup = GROUP_ALLOWED_TO_EXECUTE
  allowGroup = YET_ANOTHER_GROUP_ALLOWED_TO_EXECUTE
----

[[upload.allowGroup]]upload.allowGroup::
+
Name of the groups of users that are allowed to execute 'upload-pack'.
One or more groups can be set.
+
If no groups are added, any user will be allowed to execute
'upload-pack' on the server.

[[accountDeactivation]]
=== Section accountDeactivation

Configures the parameters for the scheduled task to sweep and deactivate Gerrit
accounts according to their status reported by the auth backend. Currently only
supported for LDAP backends.

[[accountDeactivation.startTime]]accountDeactivation.startTime::
+
The link:#schedule-configuration-startTime[start time] for running
account deactivations.

[[accountDeactivation.interval]]accountDeactivation.interval::
+
The link:#schedule-configuration-interval[interval] for running
account deactivations.

Note that the task will only be scheduled if the
link:#autoUpdateAccountActiveStatus[auth.autoUpdateAccountActiveStatus]
is set to true.

link:#schedule-configuration-examples[Schedule examples] can be found
in the link:#schedule-configuration[Schedule Configuration] section.

[[submodule]]
=== Section submodule

[[submodule.verbosesuperprojectupdate]]submodule.verboseSuperprojectUpdate::
+
When using link:user-submodules.html#automatic_update[automatic superproject updates]
this option will determine how the submodule commit messages are included into
the commit message of the superproject update.
+
If `FALSE`, will not include any commit messages for the gitlink update.
+
If `SUBJECT_ONLY`, will include only the commit subjects.
+
If `TRUE`, will include full commit messages.
+
By default this is `TRUE`.

[[submodule.enableSuperProjectSubscriptions]]submodule.enableSuperProjectSubscriptions::
+
This allows to enable the superproject subscription mechanism.
+
By default this is true.

[[submodule.maxCombinedCommitMessageSize]]submodule.maxCombinedCommitMessageSize::
+
This allows to limit the length of the commit message for a submodule.
+
By default this is 262144 (256 KiB).
+
Common unit suffixes of k, m, or g are supported.

[[submodule.maxCommitMessages]]submodule.maxCommitMessages::
+
This allows to limit the number of commit messages that should be combined when creating
a commit message for a submodule.
+
By default this is 1000.

[[user]]
=== Section user

[[user.name]]user.name::
+
Name that Gerrit calls itself in Git when it creates a new Git
commit, such as a merge during change submission.
+
By default this is "Gerrit Code Review".

[[user.email]]user.email::
+
Email address that Gerrit refers to itself as when it creates a
new Git commit, such as a merge commit during change submission.
+
If not set, Gerrit generates this as "gerrit@``hostname``", where
`hostname` is the hostname of the system Gerrit is running on.
+
By default, not set, generating the value at startup.

[[user.anonymousCoward]]user.anonymousCoward::
+
Username that is displayed in the Gerrit Web UI and in e-mail
notifications if the full name of the user is not set.
+
By default "Name of user not set" is used.

[[schedule-configuration]]
=== Schedule Configuration

Schedule configurations are used for running periodic background jobs.

A schedule configuration consists of two parameters:

[[schedule-configuration-interval]]
* `interval`:
Interval for running the periodic background job. The interval must be
larger than zero. The following suffixes are supported to define the
time unit for the interval:
** `s`, `sec`, `second`, `seconds`
** `m`, `min`, `minute`, `minutes`
** `h`, `hr`, `hour`, `hours`
** `d`, `day`, `days`
** `w`, `week`, `weeks` (`1 week` is treated as `7 days`)
** `mon`, `month`, `months` (`1 month` is treated as `30 days`)
** `y`, `year`, `years` (`1 year` is treated as `365 days`)

[[schedule-configuration-startTime]]
* `startTime`:
The start time defines the first execution of the periodic background
job. If the configured `interval` is shorter than `startTime - now` the
start time will be preponed by the maximum integral multiple of
`interval` so that the start time is still in the future. `startTime`
must have one of the following formats:

** `<day of week> <hours>:<minutes>`
** `<hours>:<minutes>`

+
The placeholders can have the following values:

*** `<day of week>`:
`Mon`, `Tue`, `Wed`, `Thu`, `Fri`, `Sat`, `Sun`
*** `<hours>`:
`00`-`23`
*** `<minutes>`:
`00`-`59`

+
The time zone cannot be specified but is always the system default
time zone. Hours must be zero-padded, i.e. `06:00` rather than `6:00`.

The section (and optionally the subsection) in which the `interval` and
`startTime` keys must be set depends on the background job for which a
schedule should be configured. E.g. for the change cleanup job the keys
must be set in the link:#changeCleanup[changeCleanup] section:

----
  [changeCleanup]
    startTime = Fri 10:30
    interval  = 2 days
----

[[schedule-configuration-examples]]
Examples for a schedule configuration:

* Example 1:
+
----
  startTime = Fri 10:30
  interval  = 2 days
----
+
Assuming that the server is started on `Mon 07:00` then
`startTime - now` is `4 days 3:30 hours`. This is larger than the
interval hence the start time is preponed by the maximum integral
multiple of the interval so that start time is still in the future,
i.e. preponed by 4 days. This yields a start time of `Mon 10:30`, next
executions are `Wed 10:30`, `Fri 10:30`. etc.

* Example 2:
+
----
  startTime = 06:00
  interval = 1 day
----
+
Assuming that the server is started on `Mon 07:00` then this yields the
first run on Tuesday at 06:00 and a repetition interval of 1 day.

[[All-Projects-project.config]]
== File `etc/All-Projects/project.config`

The optional file `'$site_path'/etc/All-Projects/project.config` provides
defaults for configuration read from
link:config-project-config.html[`project.config`] in the
`All-Projects` repo. Unlike `gerrit.config`, this file contains project-type
configuration rather than server-type configuration.

Most administrators will not need this file, and should instead make commits to
`All-Projects` to modify global config. However, a separate file can be useful
when managing multiple Gerrit servers, since pushing changes to defaults using
Puppet or a similar tool can be easier than scripting git updates to
`All-Projects`.

The contents of the file are loaded each time the `All-Projects` project is
reloaded. Updating the file requires either evicting the project cache or
restarting the server.

Caveats:

* The path from which the file is read corresponds to the name of the repo,
  which is link:#gerrit.allProjects[configurable].
* Although the file lives in a directory that shares a name with a repository,
  this directory is not a Git repository.
* Only the file `project.config` is read from this directory to provide
  defaults; any other files in this directory, such as `rules.pl`, are ignored.
  (This behavior may change in the future.)
* Group names listed in the access config in this file are resolved to UUIDs
  using the `groups` file in the repository, not in the config directory. As a
  result, setting ACLs in this file is not recommended.

[[secure.config]]
== File `etc/secure.config`

The optional file `'$site_path'/etc/secure.config` overrides (or
supplements) the settings supplied by `'$site_path'/etc/gerrit.config`.
The file should be readable only by the daemon process and can be
used to contain private configuration entries that wouldn't normally
be exposed to everyone.

Sample `etc/secure.config`:
----
[auth]
  registerEmailPrivateKey = 2zHNrXE2bsoylzUqDxZp0H1cqUmjgWb6

[ldap]
  password = l3tm3srch

[httpd]
  sslKeyPassword = g3rr1t

[sendemail]
  smtpPass = sp@m

[remote "bar"]
  password = s3kr3t
----

== File `etc/peer_keys`

The optional file `'$site_path'/etc/peer_keys` controls who can
login as the 'Gerrit Code Review' user, required for the link:cmd-suexec.html[suexec]
command.

The format is one Base-64 encoded public key per line with optional comment, e.g.:
----
# Comments allowed at start of line
AAAAC3...51R== john@example.net
# Another comment
AAAAB5...21S== jane@example.net
----

=== Configurable Parameters

site_path::
+
Local filesystem directory holding the site customization assets.
Placing this directory under version control and/or backup is a
good idea.
+
Files in this directory provide additional configuration.
+
Other files support site customization.
+
* link:config-themes.html[Themes]

[[jgitConfig]]
== File `etc/jgit.config`

Gerrit uses the `$site_path/etc/jgit.config` file instead of the
system-wide and user-global Git configuration for its runtime JGit
configuration.

Sample `etc/jgit.config` file:
----
[core]
  trustFolderStat = false
----

[[jgit-gc]]
=== Section gc

Options in section gc are used when command link:cmd-gc.html[gerrit gc] is used
or scheduled via options link:cmd-gc.html#gc.startTime[gc.startTime] and
link:cmd-gc.html#gc.interval[gc.interval].

[[gc.auto]]gc.auto::
+
When there are approximately more than this many loose objects in the repository,
auto gc will pack them. Some commands use this command to perform a light-weight
garbage collection from time to time. The default value is 6700.
+
Setting this to 0 disables not only automatic packing based on the number of
loose objects, but any other heuristic auto gc will otherwise use to determine
if there’s work to do, such as link:#gc.autoPackLimit[gc.autoPackLimit].

[[gc.autodetach]]gc.autodetach::
+
Makes auto gc run in a background thread. Default is `true`.

[[gc.autopacklimit]]gc.autopacklimit::
+
When there are more than this many packs that are not marked with `*.keep` file
in the repository, auto gc consolidates them into one larger pack. The
default value is 50. Setting this to 0 disables it. Setting `gc.auto` to 0 will
also disable this.

[[gc.packRefs]]gc.packRefs::
+
This variable determines whether gc runs git pack-refs. The default is `true`.

[[gc.reflogExpire]]gc.reflogExpire::
+
Removes reflog entries older than this time; defaults to 90 days. The value "now"
expires all entries immediately, and "never" suppresses expiration altogether.

[[gc.reflogExpireUnreachable]]gc.reflogExpireUnreachable::
+
Removes reflog entries older than this time and not reachable from the
current tip; defaults to 30 days. The value "now" expires all entries immediately,
and "never" suppresses expiration altogether.

[[jgit-protocol]]
=== Section protocol

[[protocol.version]]protocol.version::
+
If set, the server will accept requests from a client attempting to communicate
using the specified protocol version. Default is `2`. If set in file
`etc/jgit.config` this option will be used for all repositories of the site.
It can be overridden for a given repository by configuring a different value in
the repository's `config` file.
+
Supported versions:
0:: the original wire protocol.
1:: the original wire protocol with the addition of a version string in the initial response from the server.
2:: wire protocol version 2. Speeds up fetches from repositories with many refs by allowing the client
    to specify which refs to list before the server lists them.

[[jgit-receive]]
=== Section receive

[[receive.autogc]]receive.autogc::
+
By default, up to Gerrit 3.2 `git-receive-pack` will run auto gc after receiving data from git-push and updating refs.
You can stop it by setting this variable to `false`. This is recommended in gerrit to avoid the
additional load this creates. Instead schedule gc using link:cmd-gc.html#gc.startTime[gc.startTime]
and link:cmd-gc.html#gc.interval[gc.interval] or e.g. in a cron job that runs gc in a separate process.
Since Gerrit 3.3 the init command will auto-configure `git-receive-pack = false` in `etc/jgit.config` if
it wasn't set manually and show a warning if it was set to `true` manually.

GERRIT
------
Part of link:index.html[Gerrit Code Review]

SEARCHBOX
---------
