Use static, per-thread buffers for (de)serialization

Notes:
* TimedValue was turned to mutable object to leverage on re-suing
  objects and furthere reduce the memory footprint (see [1])
* serialization of 'created' and 'length' happens through bytes array
  ('out.write(buffer.array());') therefore deserialization has to be
  performed in the same way and per-thread read/write buffer (which is
  bytes array) was added

[1] Read interface documentation excerpt:
(...) should attempt to reuse the given using object, i. e. to read
the deserialized data into the given object. If it is possible, this
object then returned from this method back. If it is impossible for
any reason, a new object should be created and returned (...)

Change-Id: I89871476f8186d4f5d2bceef34276b4f5756b181
2 files changed
tree: 891e7fbcadb113cd2fe9fd27c3fcc07ba6cb713d
  1. src/
  2. .gitignore
  3. BUILD
  4. external_plugin_deps.bzl
  5. Jenkinsfile
  6. LICENSE
  7. README.md
README.md

Persistent cache for Gerrit, based on ChronicleMap

Non-blocking and super-fast on-disk cache libModule for Gerrit Code Review based on ChronicleMap on-disk implementation.

How to build

This libModule is built like a Gerrit in-tree plugin, using Bazelisk. See the build instructions for more details.

Setup

  • Install cache-chronicalmap module

Install the chronicle-map module into the $GERRIT_SITE/lib directory.

Add the cache-chroniclemap module to $GERRIT_SITE/etc/gerrit.config as follows:

[gerrit]
  installModule = com.googlesource.gerrit.modules.cache.chroniclemap.ChronicleMapCacheModule

For further information and supported options, refer to config documentation.

Migration from H2 caches

You can check how to migrate from H2 to chronicle-map here.