)]}'
{
  "commit": "19c94bce1139cb014837c7a06917b4b940505689",
  "tree": "5792c18ce8bf3fe44f3f510d783a8aa4c6623787",
  "parents": [
    "8bb9b1dcf341c155741dfe53ed6dc7b6e6b73d4b"
  ],
  "author": {
    "name": "Jacek Centkowski",
    "email": "jcentkowski@collab.net",
    "time": "Mon Apr 16 14:58:58 2018 +0200"
  },
  "committer": {
    "name": "Jacek Centkowski",
    "email": "jcentkowski@collab.net",
    "time": "Tue Apr 24 10:37:21 2018 +0200"
  },
  "message": "Introduce lib that contains Postgres based persistent cache impl\n\nThe following change introduces cache-postgres.jar library that contains\nPostgres based persistence implementation for Gerrit caches.\n\nIt is heavily based on existing Gerrit\u0027s H2CacheImpl and could/should\nbe further optimized in the follow up changes.\n\nOne builds it by calling:\nbazel build cache-postgres\n\nInstallation:\n1. create Postgres DB e.g. gerrit_caches\n2. copy \u0027bazel-genfiles/cache-postgres.jar\u0027 to GERRIT_SITE/lib dir\n3. modify GERRIT_SITE/etc/gerrit.config with the following changes\n  a) inform Gerrit that main library\u0027s module should be loaded\n    gerrit.installModule\n\"com.googlesource.gerrit.modules.cache.pg.CacheModule\"\n\n  b) specify connection to Postgres DB\n    cache.url\n\"jdbc:postgresql://localhost:5432/gerrit_caches?user\u003dgerrit\u0026password\u003dgerrit\"\n4. restart Gerrit\n5. remaining configuration parameters are mentioned in README.md\n\nNOTES:\n1. current implementation doesn\u0027t contain migration step and\nexisting data will be wiped out.\n2. it uses INSERT INTO ... ON CONFLICT DO UPDATE ... upsert syntax [1]\ntherefore it is Postgres 9.5+ compatible.\n\n[1] https://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on-duplicate-update-in-postgresql\n\nDepends-On: I7562b210fad4c5f6dc67887f627cf76815a378cb\nChange-Id: I33fa1cd3dba1c1b246aecaa05a052f7348ddd64a\nSigned-off-by: Jacek Centkowski \u003cjcentkowski@collab.net\u003e\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b4fb4c2aa020a1c176b1b4c5d002c7a23745e973",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6f34b8776ba594fc31eebff5016e7a3ea3cfd4a2",
      "new_mode": 33188,
      "new_path": "BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0a3788bf050a6d7445757a021feae8a70d041061",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "527eb8bfdca4cee3c77a763eba0ecd9cc713f7d7",
      "new_mode": 33188,
      "new_path": "WORKSPACE"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e14e488492c9e7dcc1d3b65fedc0f65432e2855e",
      "new_mode": 33188,
      "new_path": "bazlets.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "135e5f6ab9c1d233a5b2cc3914f9534ba5939664",
      "new_mode": 33188,
      "new_path": "external_plugin_deps.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9263e9cd9aa81a730b1bd48f73f61bd945812fae",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/CacheModule.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d624f5b2fc6ee1bffbd96e23c357b0c1bc9b08df",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/KeyType.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e648fbc79ad14878bc0fdea457319939359d280b",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgCacheBindingProxy.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "01a67850beda37f31c32d110fc96de9473af304d",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgCacheFactory.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "08aa4802091cc40e2a8a8d3bd218c1da760306e4",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgCacheImpl.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7e47d6a981cbb1ece1498f5a8812521ed717d3cb",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgCacheLoader.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fa7828723fd7da289c04bf503df971b3cebf545f",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgSqlHandle.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "fd635e8b35113b4c28a54f57eb23ca8b23c67b75",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgSqlSource.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "31ae3386dd38232daf1522e16fdd4f5c81d5f151",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/PgSqlStore.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6e1d021361e7ac64697c94292a57f30a98859bea",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/SinkOutputStream.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "bf0c71e5c0678c97f1dd4ff6557b1e241905e8e2",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/pg/ValueHolder.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4ed16cfd5ab9c319e127353e074ea81a7cff7d45",
      "new_mode": 33188,
      "new_path": "tools/bazel.rc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "tools/bzl/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d5764f7267401bb5f87916e35baf7cbfc9aaaca4",
      "new_mode": 33188,
      "new_path": "tools/bzl/classpath.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3af7e589cbe85e165430b9cedef55e50eaa36710",
      "new_mode": 33188,
      "new_path": "tools/bzl/junit.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2eabedb226e2f87cd7a6220d2f81cfb086ef07e4",
      "new_mode": 33188,
      "new_path": "tools/bzl/maven_jar.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a2e438fa0fb613998149d2875c65eb5f49f55797",
      "new_mode": 33188,
      "new_path": "tools/bzl/plugin.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2d7b28ae6aa13b4e46689c2b3de9647ca756bbe7",
      "new_mode": 33188,
      "new_path": "tools/eclipse/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c87efea7a2b91f54c534e4fb578a93b8d9de3be3",
      "new_mode": 33261,
      "new_path": "tools/eclipse/project.sh"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1d4e3ddeaafe8833327c044d0ac9656d3a004ea5",
      "new_mode": 33261,
      "new_path": "tools/workspace-status.sh"
    }
  ]
}
