)]}'
{
  "commit": "e0ca3d1a804c8cf8463eff1671032745ba66fb5e",
  "tree": "07fb705722c2a631659a10f2d3a04f94de65654e",
  "parents": [
    "bd3ecf87b2c65ac39392eebd70b96e6d9ff9a0d2"
  ],
  "author": {
    "name": "Jacek Centkowski",
    "email": "geminica.programs@gmail.com",
    "time": "Sun May 01 14:21:31 2022 +0100"
  },
  "committer": {
    "name": "Jacek Centkowski",
    "email": "geminica.programs@gmail.com",
    "time": "Tue May 24 08:31:39 2022 +0200"
  },
  "message": "Avoid full cache scanning for pruning\n\nThe full cache scanning should be avoided at all costs\nbecause of the massive CPU and JVM heap utilisation due\nto the deserialisation of the cached values.\n\nThe prune() of the cache cannot rely on any ordering\nof entries and therefore needs another data structure\nto remember the historical insertion ordering of the\nkeys.\n\nUse an in-memory linked hash set so that MRU keys are propagated by\nremove-add on each key access to the tail of it whereas LRU key is\nalways available as a head key (therefore it is cheap to remove LRU\nkeys). In addition to key store also the value insertion time so that\nexpiring entries for maxAge is also possible.\n\nTODO: The queue is currently in memory which isn\u0027t going\nto work across restarts. The queue needs to be persisted\nto disk as a circular file with automatic reorganiation.\n\nBug: Issue 15121\nChange-Id: Ifa3068e2d27713b452c4bcab6a611e3c9b511868\n",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "34e3eac7489bdf5b60e4bfa7dc4e0afd1605e4e0",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/CacheKeysIndex.java"
    },
    {
      "type": "modify",
      "old_id": "1235e5318f4c267f96c7d696a4abf247b73f39a9",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheConfig.java",
      "new_id": "7011f65f2242bb350198bd22a1a006c3a814bbbf",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheConfig.java"
    },
    {
      "type": "modify",
      "old_id": "1161699a50179cea5bb7ba99dd8f6a2d265d00e4",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheFactory.java",
      "new_id": "98d7f420e213ad87300fcf140ade801f3a7e9559",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheFactory.java"
    },
    {
      "type": "modify",
      "old_id": "b704a7b30ecbfdc353a3d8843ea27a511974a058",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java",
      "new_id": "12a463bf39a2aead96a6bcae07c672d8a6c132c7",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheImpl.java"
    },
    {
      "type": "delete",
      "old_id": "dcf7a68b4f37851921122e0b2194e5184f232f9e",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/modules/cache/chroniclemap/InMemoryLRU.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "60d4ae14d6739a3dd66bf211823e857ea143ff30",
      "old_mode": 33188,
      "old_path": "src/main/resources/Documentation/config.md",
      "new_id": "0cacd2223dbf09f9edaf6c24de926a75f10f6b27",
      "new_mode": 33188,
      "new_path": "src/main/resources/Documentation/config.md"
    },
    {
      "type": "modify",
      "old_id": "2928708c228097018af6bde64a46d82eea684f7a",
      "old_mode": 33188,
      "old_path": "src/main/resources/Documentation/metrics.md",
      "new_id": "565fe623915067062af6a99eeb65c7fa031d92ea",
      "new_mode": 33188,
      "new_path": "src/main/resources/Documentation/metrics.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "405e5a55031bb38ebf1381dcfb67c0fd02491c0a",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/CacheKeysIndexTest.java"
    },
    {
      "type": "modify",
      "old_id": "8cb28c14c40a3a17b7bb033240f938dafcf57061",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheConfigTest.java",
      "new_id": "08f5977956cb5388ba6bb88fb1dc876f634f8fbb",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheConfigTest.java"
    },
    {
      "type": "modify",
      "old_id": "0041c53ae0e82d7f68f1ad8bf383fa7e8c7caa25",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java",
      "new_id": "ecc457a7655ec8ecdd18ba6f7b8840b942799f47",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/ChronicleMapCacheTest.java"
    },
    {
      "type": "delete",
      "old_id": "3d435c93c2154e8c771d1a1795bdd09d9d297468",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/modules/cache/chroniclemap/InMemoryLRUTest.java",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    }
  ]
}
