Files
system-config/playbooks/roles/gerrit/templates/gerrit.config.j2
Clark Boylan 5b5f94d764 Set h2.maxCompactTime to 15 seconds
By default h2.maxCompactTime is set to 200 milliseconds. This means that
when h2 databases are shutdown Gerrit will only spend 200 milliseconds
compacting the on disk file to reduce total disk consumption.
Unfortunately, this is insufficient to keep these files in check (we had
one grow to 222GB and another to 61GB).

Hashar suggests that we set the h2.maxCompactTime java command line
option to 15000 to give h2 up to 15 seconds to compact things which is
what wikimedia has done. It sounds like this has led to good disk usage
improvements in their Gerrit installation.

Note that this will only compact things when we restart Gerrit so we may
also consider doing semi regular gerrit restarts?

More info can be found in this phabricator document [0] that captures
hashar's investigation, debugging, and fixing process.

[0] https://phabricator.wikimedia.org/phame/post/view/300/shrinking_h2_database_files/

Change-Id: Iffb8b37e0539f7d148c47a5aad79f03e3b9a8f79
2024-12-18 10:04:50 -08:00

216 lines
5.6 KiB
Django/Jinja

# This file is managed by ansible.
# https://opendev.org/opendev/system-config
[gerrit]
basePath = git
canonicalWebUrl = https://{{ gerrit_vhost_name }}/
reportBugText = Get Help
reportBugUrl = "https://docs.openstack.org/infra/system-config/project.html#contributing"
gitHttpUrl = https://{{ gerrit_vhost_name }}/
serverId = {{ gerrit_serverid }}
[auth]
# We have a long history of case sensitive usernames and need
# to preserve that behavior.
userNameCaseInsensitive = false
{% if not gerrit_run_init_dev_mode %}
contributorAgreements = true
type = OPENID_SSO
cookieSecure = true
enableRunAs = true
openIdSsoUrl = https://login.ubuntu.com/+openid
{% else %}
type = DEVELOPMENT_BECOME_ANY_ACCOUNT
# In dev mode it's very useful to be able to reload plugins
[plugins]
allowRemoteAdmin = true
{% endif %}
[sendemail]
smtpServer = localhost
from = MIXED
includeDiff = false
threadPoolSize = 4
[container]
user = gerrit2
startupTimeout = 300
{% if gerrit_heap_limit is defined %}
heapLimit = {{ gerrit_heap_limit }}
{% endif %}
# TODO(clarkb) javaHome and possibly javaOptions may be candidates
# for cleanup. The upstream gerrit.sh init script fetches these
# values to configure Gerrit startup, but we we a very simple
# startup script in our containers now.
javaHome = /usr/lib/jvm/java-17-openjdk-amd64
javaOptions = "-Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance"
javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance"
javaOptions = -Dh2.maxCompactTime=15000
[log]
rotate = true
compress = true
timeToKeep = 30d
[gc]
[core]
packedGitOpenFiles = {{ gerrit_packed_git_open_files }}
packedGitLimit = 400m
packedGitWindowSize = 16k
[sshd]
listenAddress = *:29418
threads = 100
# batchThreads = 0 means share the 100 thread pool set above.
batchThreads = 0
idleTimeout = 3600
maxConnectionsPerUser = 96
[httpd]
listenUrl = proxy-https://*:8081/
minThreads = 20
maxThreads = 150
maxQueued = 200
requestLog = true
[tracing]
performanceLogging = false
[cache]
directory = cache
[cache "accounts"]
memoryLimit = 32768
[cache "accounts_byemail"]
memoryLimit = 32768
[cache "accounts_byname"]
memoryLimit = 32768
[cache "changeid_project"]
memoryLimit = 32768
[cache "groups_bysubgroup"]
memoryLimit = 2048
[cache "groups_byuuid"]
memoryLimit = 32768
[cache "permission_sort"]
memoryLimit = 2048
[cache "projects"]
memoryLimit = 4096
[cache "web_sessions"]
maxAge = 7days
[cache "git_modified_files"]
memoryLimit = 128m
diskLimit = 512m
[cache "modified_files"]
memoryLimit = 128m
diskLimit = 512m
[cache "git_file_diff"]
memoryLimit = 256m
diskLimit = 2g
[cache "gerrit_file_diff"]
memoryLimit = 256m
diskLimit = 3g
# Set to @openstack.org because @opendev.org lacks a valid MX
[user]
email = review@openstack.org
[change]
allowDrafts = false
disablePrivateChanges = true
move = false
# Keep pre-3.4 behavior
mergeabilityComputationBehavior = API_REF_UPDATED_AND_CHANGE_REINDEX
# Explicitly enable this to avoid problems if the default changes
conflictsPredicateEnabled = true
[receive]
maxObjectSizeLimit = 100 m
enableSignedPush = false
[commentlink "bugheader"]
match = "([Cc]loses|[Pp]artial|[Rr]elated)-[Bb]ug:\\s*#?(\\d+)"
link = https://launchpad.net/bugs/$2
[commentlink "bug"]
match = "\\b[Bb]ug:? #?(\\d+)"
link = https://launchpad.net/bugs/$1
[commentlink "story"]
match = "\\b[Ss]tory:? #?(\\d+)"
link = "{{ gerrit_storyboard_url }}/#!/story/$1"
[commentlink "task"]
match = "\\b[Tt]ask:? #?(\\d+)"
link = "{{ gerrit_storyboard_url }}/#!/task/$1"
[commentlink "its-storyboard"]
match = "\\b[Tt]ask:? #?(\\d+)"
link = task: $1
[commentlink "blueprint"]
match = "(\\b[Bb]lue[Pp]rint\\b|\\b[Bb][Pp]\\b)[ \\t#:]*([A-Za-z0-9\\-]+)"
link = https://blueprints.launchpad.net/openstack/?searchtext=$2
[commentlink "changeid"]
match = (I[0-9a-f]{8,40})
link = "/#/q/$1"
[commentlink "gitsha"]
match = "(<p>|[\\s(])([0-9a-f]{40})(</p>|[\\s.,;:)])"
link = "/#/q/$2"
prefix = $1
text = $2
suffix = $3
[its-storyboard]
url = {{ gerrit_storyboard_url }}
[trackingid "launchpad-bug"]
match = "\\#?(\\d+)"
footer = closes-bug:
footer = partial-bug:
footer = related-bug:
system = Launchpad
[trackingid "storyboard-story"]
match = "\\#?(\\d+)"
footer = story:
system = Storyboard
[trackingid "storyboard-task"]
match = "\\#?(\\d+)"
footer = task:
system = Storyboard
[plugin "javamelody"]
allowTopMenu = false
# Custom code browser linking for Gitea.
[gitweb]
branch = ${project}/src/branch/${branch}
file = ${project}/src/commit/${hash}/${file}
filehistory = ${project}/commits/branch/${branch}/${file}
linkname = gitea
project = ${project}
revision = ${project}/commit/${commit}
roottree = ${project}/src/commit/${commit}
type = custom
urlEncode = false
tag = ${project}/src/tag/${tag}
url = https://opendev.org/
[index]
maxTerms = 1536
type = LUCENE
threads = 8
[download]
command = checkout
command = cherry_pick
command = pull
command = format_patch
scheme = ssh
scheme = anon_http
archive = tar
archive = tbz2
archive = tgz
archive = txz
# Plugin commit-message-length-validator config
[commitmessage]
maxLineLength = 72
[groups]
newGroupsVisibleToAll = true
[mimetype "image/*"]
safe = true
[mimetype "text/x-yaml"]
safe = true
[mimetype "text/xml"]
safe = true
[mimetype "application/xml"]
safe = true
[mimetype "text/x-rst"]
safe = true
[mimetype "text/plain"]
safe = true
[mimetype "text/x-puppet"]
safe = true
[mimetype "text/x-ini"]
safe = true
[mimetype "text/x-properties"]
safe = true
[mimetype "text/x-markdown"]
safe = true
[mimetype "text/css"]
safe = true