
@PLUGIN@ Configuration
=========================

The @PLUGIN@ plugin must be installed as a library module in the
`$GERRIT_SITE/lib` folder of all the instances and linked to
`$GERRIT_SITE/plugins`, which enable to use it as both libModule
and plugin.
Configuration should be specified in the `$site_path/etc/@PLUGIN@.config` file.

## Configuration parameters

```cache.synchronize```
:   Whether to synchronize cache evictions. Set to false when relying on
    low cache TTLs and therefore cache eviction is not strictly needed.
    It requires disabling the background cache evictions notifications in
    `gerrit.config` by setting `cache.threads = 0`.

    Defaults to true.

```cache.threadPoolSize```
:   Maximum number of threads used to send cache evictions to the target
    instance.

    Defaults to 4.

```cache.pattern```
:   Pattern to match names of custom caches for which evictions should be
    forwarded (in addition to the core caches that are always forwarded). May be
    specified more than once to add multiple patterns.

    Defaults to an empty list, meaning only evictions of the core caches are
    forwarded.

```event.synchronize```
:   Whether to synchronize stream events. Set to false when not using the SSH
    stream events.
    Defaults to true.

```index.numStripedLocks```
:   Number of striped locks to use during reindexing of secondary indexes.
    Defaults to 10

```index.synchronize```
:   Whether to synchronize secondary indexes. Set to false when using multi-site
    on Gerrit replicas that do not have an index, or when using an external
    service such as ElasticSearch.
    Defaults to true.

```index.synchronizeForced```
:   Whether to synchronize forced index events. E.g. on-line reindex
automatically triggered upon version upgrades.
Defaults to true.

```index.threadPoolSize```
:   Maximum number of threads used to send index events to the target instance.
    Defaults to 4.

```index.maxTries```
:   Maximum number of times the plugin should attempt to reindex changes.
    Setting this value to 0 will disable retries. After this number of failed
    tries, an error is logged and the local index should be considered stale and
    needs to be investigated and manually reindexed.

    Defaults to 2.

```index.retryInterval```
:   The time interval in milliseconds between subsequent auto-retries.
    Defaults to 30000 (30 seconds).

```broker.indexEventTopic```
:   Name of the topic to use for publishing indexing events
    Defaults to GERRIT.EVENT.INDEX

`broker.streamEventTopic`
:   Name of the topic to use for publishing all stream events.
    Default: gerrit

```broker.cacheEventTopic```
:   Name of the topic to use for publishing cache eviction events
    Defaults to GERRIT.EVENT.CACHE

```broker.projectListEventTopic```
:   Name of the topic to use for publishing cache eviction events
    Defaults to GERRIT.EVENT.PROJECT.LIST

```broker.streamEventPublishTimeoutMs```
:   The timeout in milliseconds for publishing stream events.
    Defaults to 30000 (30 seconds).

**NOTE**: All broker settings are ignored when all of the `cache`,
`index` or `event` synchronization is disabled.

```ref-database.enabled```
:   Enable the use of a shared ref-database
    Defaults: true

```ref-database.pushReplicationFilterClassEnabled```
:   Enable the filtering of push replication events checking their
    up-to-date status with the global-refdb.
    Defaults: true

```ref-database.pullReplicationFilterClassEnabled```
:   Enable the filtering of pull replication events checking their
    up-to-date status with the global-refdb.
    Defaults: true

```ref-database.localRefLockTimeout```
:   Timeout waiting for a local ref to become available to accept
    updates or for starting a replication task.
    Defaults: 30 sec

```ref-database.replicationLagEnabled```
:   Enable the metrics to trace the auto-replication lag between sites
    updating the `refs/multi-site/version/*` to the _epoch_ timestamp in
    milliseconds. Please note that the `replication-lag` REST-API is also
    disabled if this setting is false.
    Defaults: true

```ref-database.replicationLagRefreshInterval```
:   Enable the auto-refresh of the metrics to trace the auto-replication
    lag by polling on a regular basis. Set to zero for disabling the polling
    mechanism. Disabled automatically when `ref-database.replicationLagEnable`
    is set to false.
    Defaults: 60 min

```ref-database.enforcementRules.<policy>```
:   Level of consistency enforcement across sites on a project:refs basis.
    Supports two values for enforcing the policy on multiple projects or refs.
    If the project or ref is omitted, apply the policy to all projects or all refs.

    The <policy> can be one of the following values:

    1. REQUIRED - Throw an exception if a git ref-update is processed again
    a local ref not yet in sync with the shared ref-database.
    The user transaction is cancelled. The Gerrit GUI (or the Git client)
    receives an HTTP 500 - Internal Server Error.

    2. IGNORED - Ignore any validation against the shared ref-database.

    *Example:*
    ```
    [ref-database "enforcementRules"]
       IGNORED = AProject:/refs/heads/feature
    ```

    Ignore the alignment with the shared ref-database for AProject on refs/heads/feature.

    Defaults: No rules = All projects are REQUIRED to be consistent on all refs.

```projects.pattern```
:   Specifies which projects events should be send via broker. It can be provided more
    than once, and supports three formats: regular expressions, wildcard matching, and single
    project matching. All three formats match case-sensitive.

    Values starting with a caret `^` are treated as regular
    expressions. For the regular expressions details please follow
    official [java documentation](https://docs.oracle.com/javase/tutorial/essential/regex/).

    Please note that regular expressions could also be used
    with inverse match.

    Values that are not regular expressions and end in `*` are
    treated as wildcard matches. Wildcards match projects whose
    name agrees from the beginning until the trailing `*`. So
    `foo/b*` would match the projects `foo/b`, `foo/bar`, and
    `foo/baz`, but neither `foobar`, nor `bar/foo/baz`.

    Values that are neither regular expressions nor wildcards are
    treated as single project matches. So `foo/bar` matches only
    the project `foo/bar`, but no other project.

    By default, all projects are matched.

```replication.push-filter.minWaitBeforeReloadLocalVersionMs```
:   Specifies the minimum amount of time in milliseconds replication plugin filter will
    wait before retrying check for ref which is not up to date with global-refdb.

    By default: 1000 milliseconds

```replication.push-filter.maxRandomWaitBeforeReloadLocalVersionMs```
:   Specifies the additional amount of time in milliseconds replication filter will
    wait before retrying check for ref which is not up to date with global-refdb.

    If maxRandomWaitBeforeReloadLocalVersionMs is set to zero random sleep for not in sync
    refs is disabled.

    By default: 1000 milliseconds

```replication.fetch-filter.minWaitBeforeReloadLocalVersionMs```
:   Specifies the minimum amount of time in milliseconds pull-replication filter wait
    before retrying check for ref which is not up to date with global-refdb.

    By default: 1000 milliseconds

```replication.fetch-filter.maxRandomWaitBeforeReloadLocalVersionMs```
:   Specifies the additional amount of time in milliseconds pull-replication filter will
    wait before retrying check for ref which is not up to date with global-refdb.

    If maxRandomWaitBeforeReloadLocalVersionMs is set to zero random sleep for not in sync
    refs is disabled.

    By default: 1000 milliseconds

## Replication filters

The @PLUGIN@ plugin is also responsible for filtering out replication events that may
risk to create a split-brain situation.
It integrates the push and pull replication filtering extension points for validating
the refs to be replicated and dropping some of them.

**Replication plugin**

When using the Gerrit core replication plugin, also known as push-replication, link the
`replication.jar` to the `$GERRIT_SITE/lib` directory and add the following libModule
to `gerrit.config`:

```
[gerrit]
  installModule = com.googlesource.gerrit.plugins.replication.ReplicationExtensionPointModule
```

The above configuration would be automatically detected by the @PLUGIN@ plugin which would then
install the PushReplicationFilterModule for filtering outgoing replication refs based
on their global-refdb status:

- Outgoing replication of refs that are NOT up-to-date with the global-refdb will be
  discarded, because they may cause split-brain on the remote replication endpoints.

- All other refs will be pushed as normal to the remote replication ends.

**Pull-replication plugin**

When using the [pull-replication](https://gerrit.googlesource.com/plugins/pull-replication)
plugin, link the `pull-replication.jar` to the `$GERRIT_SITE/lib` directory and add the following
two libModules to `gerrit.config`:

```
[gerrit]
        installModule = com.googlesource.gerrit.plugins.replication.pull.ReplicationExtensionPointModule
```

The above configuration would be automatically detected by the @PLUGIN@ plugin which would then
install the PullReplicationFilterModule for filtering incoming fetch replication refs based
on their global-refdb status.

- Incoming replication of refs that locally are already up-to-date with the global-refdb will be
  discarded, because they would not add anything more to the current status of the local refs.

- All other refs will be fetched as normal from the replication sources.
