)]}'
{
  "commit": "15ca7b0bcb8782a9d493e3abb8df669c59debfd6",
  "tree": "e3b895548ea067f8617cccafcd4cf3eecfbb7150",
  "parents": [
    "9c3d23bb93dcf86567ce2d939cfb4d85f3c1d34e"
  ],
  "author": {
    "name": "Edwin Kempin",
    "email": "ekempin@google.com",
    "time": "Wed Jun 15 17:58:58 2016 +0200"
  },
  "committer": {
    "name": "Björn Pedersen",
    "email": "iceelch@googlemail.com",
    "time": "Thu Jun 23 09:52:36 2016 +0200"
  },
  "message": "Migrate reviewed flags to local H2 database\n\nWith NoteDb Gerrit will no longer have a database. Hence all data from\nReviewDb must be migrated away from it. This change migrates the\nreviewed flags from ReviewDb to a local H2 database.\n\nReviewed flags are tuples of (patch set ID, file, account ID) and\nrecord whether a user has reviewed a file in a patch set. Each user\ncan easily have thousands of reviewed flags and the number of reviewed\nflags is growing without bound.\n\nMost data from ReviewDb is migrated to be stored in git, but for\nreviewed flags a git-based storage is not very well suitable because\nthere is a relatively high write latency [1]. Also depending on the\nexact storage format updating reviewed flags may create a huge git\nhistory which is not good for anything since an audit log for reviewed\nflags is not needed [1].\n\nSince reviewed flags are small per-user bits that are quickly read and\nupdated a database seems to be the best storage [2]. This is why with\nthis change the reviewed flags will be stored in a local H2 database.\nThis store implements the AccountPatchReviewStore extension point that\nwas added by change Iaaacd9f0a. Plugins can implement this extension\npoint and replace the local H2 database with another storage.\n\nTo support multi-master the local H2 database must be replaced by a\nstorage that supports replication, e.g. a MySQL replication system\n[2]. This can be done by implementing the AccountPatchReviewStore\nextension point.\n\nA schema migration copies all reviewed flags from ReviewDb to the\nlocal H2 database and the old ACCOUNT_PATCH_REVIEWS table in ReviewDb\nis dropped.\n\nNot using gwtorm to access the local H2 database is intentional. When\nReviewDb is gone, we want to drop the dependency to gwtorm, and hence\nwe don\u0027t want to introduce any new dependencies to it. Instead the\nimplementation is using raw SQL.\n\nThe local H2 database is stored in the review site in:\n  $site_path/db/account_patch_reviews.h2.db\n\nFor the acceptence tests an in memory H2 database is used.\n\n[1] https://groups.google.com/d/msg/repo-discuss/KhXKMKTJNMs/Tq3XaB8wCgAJ\n[2] https://groups.google.com/d/msg/repo-discuss/KhXKMKTJNMs/hHoCa1_5CwAJ\n\nChange-Id: I7cb77ff124e36709cc69ef547f2b4e5e1a1d7f62\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "621325ee95b33672e247d9f7f00d569fc613b090",
      "old_mode": 33188,
      "old_path": "Documentation/config-gerrit.txt",
      "new_id": "18a7a1f8ed6fa5f33534b459d16221afaff7a356",
      "new_mode": 33188,
      "new_path": "Documentation/config-gerrit.txt"
    },
    {
      "type": "modify",
      "old_id": "015b4d29df777f0903eb71a701f3d20b7d4f1868",
      "old_mode": 33188,
      "old_path": "gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java",
      "new_id": "4715877563f0dec984acbd130ba7235f5e172dc2",
      "new_mode": 33188,
      "new_path": "gerrit-pgm/src/main/java/com/google/gerrit/pgm/Daemon.java"
    },
    {
      "type": "delete",
      "old_id": "6b9e16097b0d6e977d87c47f6b745b2d90f7db3f",
      "old_mode": 33188,
      "old_path": "gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/AccountPatchReviewAccess.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "9f62dc245055aefcbfd0509e2027904b4d730e9f",
      "old_mode": 33188,
      "old_path": "gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ReviewDb.java",
      "new_id": "c585ca5f6a0cfa6dd16bb61ef69561afc54ff86e",
      "new_mode": 33188,
      "new_path": "gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ReviewDb.java"
    },
    {
      "type": "modify",
      "old_id": "aa3797466dd6eb08a1346dedb0687fc22665d1db",
      "old_mode": 33188,
      "old_path": "gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ReviewDbWrapper.java",
      "new_id": "6b25378537eeb7dd407dd57e72a87c4189b21c01",
      "new_mode": 33188,
      "new_path": "gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/server/ReviewDbWrapper.java"
    },
    {
      "type": "delete",
      "old_id": "16dd130a991f1ab78ef7fff1e6efa7f60efefb6f",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/change/AccountPatchReviewStoreImpl.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "6b19d1a151eaaa6b4673acd72c10d920f4830533",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java",
      "new_id": "9781f39de5cbbe3db3618f86a03e6b2a06445008",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/config/GerritGlobalModule.java"
    },
    {
      "type": "modify",
      "old_id": "e41fb30f3168850a9e31b09041118a71c8fcf323",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java",
      "new_id": "192ca49cbc97c848f6061c21039de68e94976fe7",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/config/SitePaths.java"
    },
    {
      "type": "modify",
      "old_id": "66f2f1d7a67c6f7f9a55da6c84b757edd61c9271",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/H2.java",
      "new_id": "3bec3958691883833def427e201c1d306e9aabd7",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/H2.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8e74f6c8555ad55b0e2b9db718e4bff0a4946e3a",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/H2AccountPatchReviewStore.java"
    },
    {
      "type": "modify",
      "old_id": "2871dde77ed44b8a892021b8c7d98cb4ba3d0360",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java",
      "new_id": "6ad2fb843099f57f690dcf527943cfd6980ea1b1",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/SchemaVersion.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b9e4bfa19f34d03293c45442268d31bf4a5bd5bc",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/main/java/com/google/gerrit/server/schema/Schema_127.java"
    },
    {
      "type": "modify",
      "old_id": "ad9a46a9267c1e93d6dd406eb9ee78a97ff3249a",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java",
      "new_id": "11d7ad030f6cfc5df03db877cce9afd926cf2e61",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/test/java/com/google/gerrit/testutil/DisabledReviewDb.java"
    },
    {
      "type": "modify",
      "old_id": "2f5de15cb6efd7975c4ff9058965b5a617f52be9",
      "old_mode": 33188,
      "old_path": "gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java",
      "new_id": "9f1f031ff70bbe14a35f0c7cb00e1c103e89ca08",
      "new_mode": 33188,
      "new_path": "gerrit-server/src/test/java/com/google/gerrit/testutil/InMemoryModule.java"
    },
    {
      "type": "modify",
      "old_id": "9c1bab8de9c7fc0d0f177104e6b0cdd9fd9e0b05",
      "old_mode": 33188,
      "old_path": "gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java",
      "new_id": "64dce26f7b98b7719c28b889d02c4062bde1e846",
      "new_mode": 33188,
      "new_path": "gerrit-war/src/main/java/com/google/gerrit/httpd/WebAppInitializer.java"
    }
  ]
}
