Migrate reviewed flags to local H2 database

With NoteDb Gerrit will no longer have a database. Hence all data from
ReviewDb must be migrated away from it. This change migrates the
reviewed flags from ReviewDb to a local H2 database.

Reviewed flags are tuples of (patch set ID, file, account ID) and
record whether a user has reviewed a file in a patch set. Each user
can easily have thousands of reviewed flags and the number of reviewed
flags is growing without bound.

Most data from ReviewDb is migrated to be stored in git, but for
reviewed flags a git-based storage is not very well suitable because
there is a relatively high write latency [1]. Also depending on the
exact storage format updating reviewed flags may create a huge git
history which is not good for anything since an audit log for reviewed
flags is not needed [1].

Since reviewed flags are small per-user bits that are quickly read and
updated a database seems to be the best storage [2]. This is why with
this change the reviewed flags will be stored in a local H2 database.
This store implements the AccountPatchReviewStore extension point that
was added by change Iaaacd9f0a. Plugins can implement this extension
point and replace the local H2 database with another storage.

To support multi-master the local H2 database must be replaced by a
storage that supports replication, e.g. a MySQL replication system
[2]. This can be done by implementing the AccountPatchReviewStore
extension point.

A schema migration copies all reviewed flags from ReviewDb to the
local H2 database and the old ACCOUNT_PATCH_REVIEWS table in ReviewDb
is dropped.

Not using gwtorm to access the local H2 database is intentional. When
ReviewDb is gone, we want to drop the dependency to gwtorm, and hence
we don't want to introduce any new dependencies to it. Instead the
implementation is using raw SQL.

The local H2 database is stored in the review site in:
  $site_path/db/account_patch_reviews.h2.db

For the acceptence tests an in memory H2 database is used.

[1] https://groups.google.com/d/msg/repo-discuss/KhXKMKTJNMs/Tq3XaB8wCgAJ
[2] https://groups.google.com/d/msg/repo-discuss/KhXKMKTJNMs/hHoCa1_5CwAJ

Change-Id: I7cb77ff124e36709cc69ef547f2b4e5e1a1d7f62
Signed-off-by: Edwin Kempin <ekempin@google.com>
15 files changed
tree: e3b895548ea067f8617cccafcd4cf3eecfbb7150
  1. .settings/
  2. bucklets/
  3. contrib/
  4. Documentation/
  5. gerrit-acceptance-framework/
  6. gerrit-acceptance-tests/
  7. gerrit-antlr/
  8. gerrit-cache-h2/
  9. gerrit-common/
  10. gerrit-extension-api/
  11. gerrit-gpg/
  12. gerrit-gwtdebug/
  13. gerrit-gwtexpui/
  14. gerrit-gwtui/
  15. gerrit-gwtui-common/
  16. gerrit-httpd/
  17. gerrit-launcher/
  18. gerrit-lucene/
  19. gerrit-main/
  20. gerrit-oauth/
  21. gerrit-openid/
  22. gerrit-patch-commonsnet/
  23. gerrit-patch-jgit/
  24. gerrit-pgm/
  25. gerrit-plugin-api/
  26. gerrit-plugin-archetype/
  27. gerrit-plugin-gwt-archetype/
  28. gerrit-plugin-gwtui/
  29. gerrit-plugin-js-archetype/
  30. gerrit-prettify/
  31. gerrit-reviewdb/
  32. gerrit-server/
  33. gerrit-sshd/
  34. gerrit-util-cli/
  35. gerrit-util-http/
  36. gerrit-util-ssl/
  37. gerrit-war/
  38. lib/
  39. plugins/
  40. polygerrit-ui/
  41. ReleaseNotes/
  42. tools/
  43. website/
  44. .buckconfig
  45. .buckversion
  46. .editorconfig
  47. .gitignore
  48. .gitmodules
  49. .mailmap
  50. .pydevproject
  51. .watchmanconfig
  52. BUCK
  53. COPYING
  54. INSTALL
  55. README.md
  56. SUBMITTING_PATCHES
  57. VERSION
README.md

Gerrit Code Review

Gerrit is a code review and project management tool for Git based projects.

Objective

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.

Documentation

For information about how to install and use Gerrit, refer to the documentation.

Source

Our canonical Git repository is located on googlesource.com. There is a mirror of the repository on Github.

Reporting bugs

Please report bugs on the issue tracker.

Contribute

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.

Getting in contact

The IRC channel on freenode is #gerrit. An archive is available at: echelog.com.

The Developer Mailing list is repo-discuss on Google Groups.

License

Gerrit is provided under the Apache License 2.0.

Build

Install Buck and run the following:

    git clone --recursive https://gerrit.googlesource.com/gerrit
    cd gerrit && buck build release

Install binary packages (Deb/Rpm)

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>]

NOTE: release is optional. Last released package of the version is installed if the release number is omitted.