commit | 1eb5429227387e9338497aa1d66bcf514363a931 | [log] [tgz] |
---|---|---|
author | David Ostrovsky <david@ostrovsky.org> | Wed Mar 07 20:59:25 2018 +0100 |
committer | David Ostrovsky <david@ostrovsky.org> | Wed Mar 07 21:35:20 2018 +0100 |
tree | 3c9ec25f69c762c6be97afac6ed8a0c3c2a35189 | |
parent | eb2f987ddbca9202111137d33c367b8622f66b23 [diff] |
ExternalIds NoteDb migration: Avoid intermediate migration state The problem we are facing on the stable-2.14 branch is: we have intermediate NoteDb migration state for accounts entity due to merge of: Ic9bd5791e84. That why we are writing to both backends: ReviewDb and NoteDb. It creates potential risk to be out of sync between ReviewDb and NoteDb (and secondary index). In addition it is always bad from performance point of view to unnecessary write to 2 different backends. The real migration to NoteDb for accounts entities (phase 2) happens in: Ia1dae9306b7 and Schema_144, that is migrating the external IDs from ReviewDb to NoteDb, and that change is not a part of stable-2.14. In retrospective, we shouldn't include partially migrated code paths for the production releases. It's error prone and bad for the performance. Originally, multi-phase upgrade procedure was done on master only to support multi master and zero downtime upgrades. These feature is not related to open source gerrit version. Moreover, now, that we are facing intermittent account corruption problems: Issue 7652 that is hard to track down, understand and fix, we are seeing automatic recovery attempt: [1], that is trying to detect database corruption and synchronize both backends. This change takes a different approach and avoids two backends where only ReviewDb is actually used on production release line 2.14. To avoid fixing too many caller sites the interfaces of ExternalIds, ExternalIdsOnInit, ExternalIdsBatchUpdate and ExternalIdsUpdate are mostly preserved, but the code paths for NoteDb mutations is dropped. This partially reverts commit 744d2b896719e2058539db98443c80eb9368fd77. [1] https://gerrit-review.googlesource.com/162450 Change-Id: Iec8d0c5639e462d88a7c5d0906febfd6f3337277
Gerrit is a code review and project management tool for Git based projects.
Gerrit makes reviews easier by showing changes in a side-by-side display, and allowing inline comments to be added by any reviewer.
Gerrit simplifies Git based project maintainership by permitting any authorized user to submit changes to the master Git repository, rather than requiring all approved changes to be merged in by hand by the project maintainer.
For information about how to install and use Gerrit, refer to the documentation.
Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.
Please report bugs on the issue tracker.
Gerrit is the work of hundreds of contributors. We appreciate your help!
Please read the contribution guidelines.
Note that we do not accept Pull Requests via the Github mirror.
The IRC channel on freenode is #gerrit. An archive is available at: echelog.com.
The Developer Mailing list is repo-discuss on Google Groups.
Gerrit is provided under the Apache License 2.0.
Install Bazel and run the following:
git clone --recursive https://gerrit.googlesource.com/gerrit cd gerrit && bazel build release
The instruction how to configure GerritForge/BinTray repositories is here
On Debian/Ubuntu run:
apt-get update & apt-get install gerrit=<version>-<release>
NOTE: release is a counter that starts with 1 and indicates the number of packages that have been released with the same version of the software.
On CentOS/RedHat run:
yum clean all && yum install gerrit-<version>[-<release>]
On Fedora run:
dnf clean all && dnf install gerrit-<version>[-<release>]
Docker images of Gerrit are available on DockerHub
To run a CentOS 7 based Gerrit image:
docker run -p 8080:8080 gerritforge/gerrit-centos7[:version]
To run a Ubuntu 15.04 based Gerrit image:
docker run -p 8080:8080 gerritforge/gerrit-ubuntu15.04[:version]
NOTE: release is optional. Last released package of the version is installed if the release number is omitted.