blob: 86d8eb27bbb1c0badd0d2cd9f6d7ecba8686c6dd [file] [log] [blame] [view]
# Tuning
Tuning chronicle-map correctly might be a daunting task:
How many entries does a particular cache instance need?
what is the average key and value for it?
Rather than leaving you only with the trial and error (or the guesswork)
approach, this module provides a utility to help you get started in the right
direction.
Since chronicle-map is one of the first open-source alternatives to the H2
implementation, it is very likely that your Gerrit instance has been running
with the default H2 cache backend.
The idea is to read from the _actual_ H2 persisted files and output the
information that will be required to configure chronicle-map as an alternative.
You can do this _before_ installing cache-chroniclemap as a lib module so that
your Gerrit server will not need downtime. As follows:
* Drop `cache-chroniclemap.jar` file in the `plugins/` directory.
* Wait for the pluginLoader to acknowledge and load the new plugin. You will
see an entry in the `error_log`:
```
INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin cache-chroniclemap
```
* You can now run an analysis on the current status of your H2 caches
```bash
ssh -p 29418 admin@<gerrit-server> cache-chroniclemap analyze-h2-caches
```
The result will be outputted on standard output in a git config format.
This is an example (the values are made up):
```
****************************
** Chronicle-map template **
****************************
[cache "diff_summary"]
maxEntries = 101
avgKeySize = 192
avgValueSize = 1350
[cache "web_sessions"]
maxEntries = 1
avgKeySize = 68
avgValueSize = 332
[cache "pure_revert"]
maxEntries = 1
avgKeySize = 112
avgValueSize = 8
[cache "mergeability"]
maxEntries = 101
avgKeySize = 150
avgValueSize = 8
[cache "diff"]
maxEntries = 101
avgKeySize = 188
avgValueSize = 5035
[cache "persisted_projects"]
maxEntries = 2
avgKeySize = 88
avgValueSize = 4489
[cache "accounts"]
maxEntries = 5
avgKeySize = 52
avgValueSize = 505
```
Empty caches (if any) will not generate empty config stanzas, rather a warning
will be displayed on standard output.
For example:
```
WARN: Cache diff_intraline is empty, skipping
```
Please note that the generated configuration is not necessarily final and it
might still need adjustments:
* Since chronicle-map file size is pre-allocated, you might want to allow for
more entries.
* You might want account for uncertainty by specifying a `maxBloatFactor` greater
than 1.
* any other reason.
Once you gathered the information you wanted you might consider to remove the
plugin:
* Remove the jar from the `plugins` directory
```bash
rm plugins/cache-chroniclemap.jar
```
* Wait for the pluginLoader to acknowledge and unload the plugin. You will
see an entry in the `error_log`:
```
INFO com.google.gerrit.server.plugins.PluginLoader : Unloading plugin cache-chroniclemap
```