Files
system-config/zuul.d/docker-images/gerrit.yaml
Ian Wienand 570ca85cd8 gerrit: add mariadb_container option
This adds a local mariadb container to the gerrit host to hold the
accountPatchReviewDb database.  This is inspired by a few things

 - since migration to NoteDB, there is only one table left where
   Gerrit records what files have been reviewed for a change.  This
   logically scales with the number of reviews users are doing.
   Pulling the stats on this, we can see since the NoteDB upgrade this
   went from a very busy database (~300 queries/70 commits per second)
   to barely registering one hit per second :
   https://imgur.com/a/QGJV7Fw

   Thus separating the db to an external host for performance reasons
   is not a large concern any more.

 - emperically we've done a bad job in keeping the existing hosted db
   up-to-date; it's still running mysql 5.1 and we have been hit by
   bugs such as the one referenced in-line which silently drops
   backups.

 - The other gerrit option is to use an on-disk H2 database.  This is
   certainly an option, however you need special tools to interact
   with it for migration, etc. and it's not safe to backup from files
   on disk (as opposed to mysqldump).  Upstream advice is unclear, and
   varies between H2 being a performance bottleneck to this being
   ephemeral data that users don't care about.  We know how to admin
   mariadb/mysql and this allows us to migrate and backup data, so
   seems like the best choice.

 - we have a pressing need to update the server to a new operating
   system.  Running the db alongside the gerrit instance minimises
   fiddling we have to do manging connections to and migrating the
   hosted db systems.

 - related to that, we are tending towards more provider independence
   for control-plane servers.  A hosted database product is not always
   provided, so this gives us more flexibility in moving things
   around.

 - the main concern here is memory usage.  "docker stats" reports a
   quiescent container, freshly started on a 8GB host:

    gerrit-compose_mariadb_1  67.32MiB

   After loading a copy of the production table, and then dumping it
   back to a file the same container reports:

    gerrit-compose_mariadb_1  462.6MiB

The existing remote mysql configuration path remains mostly the same.
We move the gerrit startup into a script rather than a CMD so we can
call it after a "wait for db" script in the mariadb_container case
(this is the reccommeded way to enforce ordering [1]).

Backups of the local container need different dump commands; backups
are relocated to a new file and updated.

Testing is converted to use this rather than a local H2 database.

[1] https://docs.docker.com/compose/startup-order/

Change-Id: Iec981ef3c2e38889f91e9759e66295dbfb499c2e
2021-06-16 13:57:13 +10:00

361 lines
13 KiB
YAML

# gerrit-base jobs
- job:
name: system-config-build-image-gerrit-base
description: Build a gerrit-base image.
parent: system-config-build-image
required-projects: &gerrit_base_projects
- opendev/jeepyb
- opendev/system-config
requires: python-builder-3.7-container-image
provides: gerrit-base-container-image
pre-run: &gerrit-base_prerun
- playbooks/zuul/gerrit/base.yaml
vars: &gerrit-base_vars
docker_images:
- context: docker/gerrit/base
repository: opendevorg/gerrit-base
path: /home/zuul/src/opendev.org/opendev/jeepyb
files: &gerrit-base_files
- docker/gerrit/base/
- roles/bazelisk-build/
- playbooks/zuul/gerrit/
- job:
name: system-config-upload-image-gerrit-base
description: Build and upload a gerrit-base image.
parent: system-config-upload-image
requires: python-builder-3.7-container-image
provides: gerrit-base-container-image
pre-run: *gerrit-base_prerun
required-projects: *gerrit_base_projects
vars: *gerrit-base_vars
files: *gerrit-base_files
- job:
name: system-config-promote-image-gerrit-base
description: Promote a previously published gerrit-base image to latest.
parent: system-config-promote-image
required-projects: *gerrit_base_projects
vars: *gerrit-base_vars
files: *gerrit-base_files
# Gerrit 3.2 jobs
- job:
name: system-config-build-image-gerrit-3.2
description: Build a gerrit image.
parent: system-config-build-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-3.2-container-image
required-projects: &gerrit_projects_3_2
- name: opendev/system-config
override-checkout: master
- name: gerrit.googlesource.com/gerrit
override-checkout: stable-3.2
# Plugins common to every build with branches or refs for every build
- name: gerrit.googlesource.com/plugins/commit-message-length-validator
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/hooks
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/its-base
override-checkout: stable-3.2
- name: gerrit.googlesource.com/plugins/its-storyboard
# There is no 3.2 branch
override-checkout: master
- name: gerrit.googlesource.com/plugins/javamelody
# There is no 3.2 branch
override-checkout: master
- name: gerrit.googlesource.com/plugins/replication
override-checkout: stable-3.2
- name: gerrit.googlesource.com/plugins/reviewnotes
override-checkout: stable-3.2
# Plugins common to every build without branches or refs for every build
- name: gerrit.googlesource.com/plugins/download-commands
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/singleusergroup
override-checkout: v3.2.6
# Plugins not common to every build
- name: gerrit.googlesource.com/plugins/codemirror-editor
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/delete-project
override-checkout: stable-3.2
- name: gerrit.googlesource.com/plugins/gitiles
override-checkout: stable-3.2
- name: gerrit.googlesource.com/plugins/plugin-manager
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/webhooks
override-checkout: v3.2.6
- name: gerrit.googlesource.com/plugins/zuul-results-summary
override-checkout: main
# Non plugin submodules
- name: gerrit.googlesource.com/jgit
override-checkout: master
- name: gerrit.googlesource.com/polymer-bridges
override-checkout: v3.2.6
vars: &gerrit_vars_3_2
docker_images:
- context: docker/gerrit/bazel
repository: opendevorg/gerrit
target: gerrit
path: /home/zuul/src/gerrit.googlesource.com/gerrit
tags:
- 3.2
files: &gerrit_files_3_2
- docker/gerrit/base/
- docker/gerrit/bazel/
- playbooks/zuul/gerrit/
- playbooks/test-review.yaml
- testinfra/test_gerrit.py
- jeepyb/
- roles/bazelisk-build/
- job:
name: system-config-upload-image-gerrit-3.2
description: Build and upload a gerrit image.
parent: system-config-upload-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-3.2-container-image
required-projects: *gerrit_projects_3_2
vars: *gerrit_vars_3_2
files: *gerrit_files_3_2
- job:
name: system-config-promote-image-gerrit-3.2
description: Promote a previously published gerrit image to latest.
parent: system-config-promote-image
vars: *gerrit_vars_3_2
files: *gerrit_files_3_2
# Gerrit 3.3 jobs
- job:
name: system-config-build-image-gerrit-3.3
description: Build a gerrit image.
parent: system-config-build-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-3.3-container-image
required-projects: &gerrit_projects_3_3
- name: opendev/system-config
override-checkout: master
- name: gerrit.googlesource.com/gerrit
override-checkout: stable-3.3
# Plugins common to every build with branches or refs for every build
- name: gerrit.googlesource.com/plugins/commit-message-length-validator
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/hooks
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/its-base
# There is no 3.3 branch
override-checkout: master
- name: gerrit.googlesource.com/plugins/its-storyboard
# There is no 3.3 branch
override-checkout: master
- name: gerrit.googlesource.com/plugins/javamelody
# There is no 3.3 branch
override-checkout: master
- name: gerrit.googlesource.com/plugins/replication
override-checkout: stable-3.3
- name: gerrit.googlesource.com/plugins/reviewnotes
override-checkout: v3.3.0
# Plugins common to every build without branches or refs for every build
- name: gerrit.googlesource.com/plugins/download-commands
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/singleusergroup
override-checkout: v3.3.1
# Plugins not common to every build
- name: gerrit.googlesource.com/plugins/codemirror-editor
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/delete-project
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/gitiles
override-checkout: stable-3.3
- name: gerrit.googlesource.com/plugins/plugin-manager
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/webhooks
override-checkout: v3.3.1
- name: gerrit.googlesource.com/plugins/zuul-results-summary
override-checkout: main
# Non plugin submodules
- name: gerrit.googlesource.com/jgit
override-checkout: master
- name: gerrit.googlesource.com/polymer-bridges
override-checkout: v3.3.1
vars: &gerrit_vars_3_3
docker_images:
- context: docker/gerrit/bazel
repository: opendevorg/gerrit
target: gerrit
path: /home/zuul/src/gerrit.googlesource.com/gerrit
tags:
- 3.3
files: &gerrit_files_3_3
- docker/gerrit/base/
- docker/gerrit/bazel/
- playbooks/zuul/gerrit/
- playbooks/test-review.yaml
- testinfra/test_gerrit.py
- jeepyb/
- roles/bazelisk-build/
- job:
name: system-config-upload-image-gerrit-3.3
description: Build and upload a gerrit image.
parent: system-config-upload-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-3.3-container-image
required-projects: *gerrit_projects_3_3
vars: *gerrit_vars_3_3
files: *gerrit_files_3_3
- job:
name: system-config-promote-image-gerrit-3.3
description: Promote a previously published gerrit image to latest.
parent: system-config-promote-image
vars: *gerrit_vars_3_3
files: *gerrit_files_3_3
# Gerrit master jobs
- job:
name: system-config-build-image-gerrit-master-base
description: |
Build a gerrit image.
This job has no files matchers so it can be used in other repos.
parent: system-config-build-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-master-container-image
required-projects: &gerrit_projects_master
- opendev/system-config
- gerrit.googlesource.com/jgit
- gerrit.googlesource.com/gerrit
- gerrit.googlesource.com/plugins/checks
- gerrit.googlesource.com/plugins/codemirror-editor
- gerrit.googlesource.com/plugins/commit-message-length-validator
- gerrit.googlesource.com/plugins/delete-project
- gerrit.googlesource.com/plugins/download-commands
- gerrit.googlesource.com/plugins/gitiles
- gerrit.googlesource.com/plugins/hooks
- gerrit.googlesource.com/plugins/its-base
- gerrit.googlesource.com/plugins/its-storyboard
- gerrit.googlesource.com/plugins/javamelody
- gerrit.googlesource.com/plugins/plugin-manager
- gerrit.googlesource.com/plugins/replication
- gerrit.googlesource.com/plugins/reviewnotes
- gerrit.googlesource.com/plugins/singleusergroup
- gerrit.googlesource.com/plugins/webhooks
- name: gerrit.googlesource.com/plugins/zuul-results-summary
override-checkout: main
- gerrit.googlesource.com/polymer-bridges
vars: &gerrit_vars_master
zuul_work_dir: src/opendev.org/opendev/system-config
docker_images:
- context: docker/gerrit/bazel
repository: opendevorg/gerrit
target: gerrit
path: /home/zuul/src/gerrit.googlesource.com/gerrit
tags:
- master
gerrit_additional_plugins:
- checks
- job:
name: system-config-build-image-gerrit-master
description: |
Build a gerrit image.
This job is used in system-config.
parent: system-config-build-image-gerrit-master-base
files: &gerrit_files_master
- docker/gerrit/base/
- docker/gerrit/bazel/
- playbooks/zuul/gerrit/
- jeepyb/
- roles/bazelisk-build/
- job:
name: system-config-upload-image-gerrit-master
description: Build and upload a gerrit image.
parent: system-config-upload-image
pre-run:
- playbooks/zuul/gerrit/repos.yaml
- playbooks/zuul/gerrit/submodules.yaml
run: playbooks/zuul/gerrit/run.yaml
requires: gerrit-base-container-image
provides: gerrit-master-container-image
required-projects: *gerrit_projects_master
vars: *gerrit_vars_master
files: *gerrit_files_master
- job:
name: system-config-promote-image-gerrit-master
description: Promote a previously published gerrit image to latest.
parent: system-config-promote-image
vars: *gerrit_vars_master
files: *gerrit_files_master
- project-template:
name: system-config-gerrit-images
check:
jobs:
- system-config-build-image-gerrit-base:
dependencies:
- name: opendev-buildset-registry
- name: system-config-build-image-python-builder-3.7
soft: true
- system-config-build-image-gerrit-3.2:
dependencies:
- name: opendev-buildset-registry
- name: system-config-build-image-gerrit-base
soft: true
- system-config-build-image-gerrit-3.3:
dependencies:
- name: opendev-buildset-registry
- name: system-config-build-image-gerrit-base
soft: true
- system-config-build-image-gerrit-master:
voting: false
dependencies:
- name: opendev-buildset-registry
- name: system-config-build-image-gerrit-base
soft: true
gate:
jobs:
- system-config-upload-image-gerrit-base:
dependencies:
- name: opendev-buildset-registry
- name: system-config-upload-image-python-builder-3.7
soft: true
- system-config-upload-image-gerrit-3.2:
dependencies:
- name: opendev-buildset-registry
- name: system-config-upload-image-gerrit-base
soft: true
- system-config-upload-image-gerrit-3.3:
dependencies:
- name: opendev-buildset-registry
- name: system-config-upload-image-gerrit-base
soft: true
deploy:
jobs:
- system-config-promote-image-gerrit-base
- system-config-promote-image-gerrit-3.2
- system-config-promote-image-gerrit-3.3