blob: f61d6c15ca5f014fab495ab6a05f922eef4f333e [file] [log] [blame] [view]
# About
The remote-gerrit-account-cache lib provides a way to sync accounts from
a remote Gerrit system. This library overrides the Accounts cache
implementation from core and loads accounts from a remote Gerrit
system using /accounts/ REST APIs. Upon fetching the account info from
the remote Gerrit REST API, the account is saved into NoteDb and re-indexed.
If the remote Gerrit REST API fails to return the account, the cache falls
back to the account stored in NoteDb.
The HTTP user needs to have 'View All Accounts', 'Modify Account' and
'View Secondary Emails' Capabilities in remote gerrit site inorder to
fetch account details using /accounts/{account-id}/detail and
/accounts/{account-id}/external.ids REST APIs.
The remote REST APIs fired from this lib module are rate limited to
8 per second. This can be changed with a config if needed.
## Test scenarios:
#### Add new email
Add new email address for a user in the remote Gerrit site.
The new email address must be visible on the internal site either after
accounts cache expiry or flushing the accounts cache.
#### Update preferred email
Update preferred email for a user in the remote Gerrit site.
The update must be visible on the internal site either after
accounts cache expiry or flushing the accounts cache.
#### Delete an email
Delete an email for a user in the remote Gerrit site.
The update must be visible on the internal site either after
accounts cache expiry or flushing the accounts cache.
#### Add a new account
Add a new account in the remote Gerrit site. The new account must
be visible on the internal site whenever the new account is
queried for.
#### Delete an account
Delete an account in the remote Gerrit site. The internal
Gerrit site continues to return the account as it falls-back
to NoteDB when /accounts/ API fails to return an account.
#### Accounts cache timeout
The entries in the accounts cache must be evicted after maxAge
duration reaches.
#### API throttling
The remote REST APIs must be throttled based on the requestsPerSecond
gerrit setting.
# How to build
This libModule is built like a Gerrit in-tree plugin, using Bazelisk.
Build in Gerrit tree
Create a symbolic link of the repository source to the Gerrit source tree /plugins/remote-gerrit-account-cache directory.
Example:
```
git clone https://gerrit.googlesource.com/gerrit
git clone https://gerrit.googlesource.com/modules/remote-gerrit-account-cache
cd gerrit/plugins
ln -s ../../remote-gerrit-account-cache .
```
From the Gerrit source tree issue the command bazelisk build plugins/remote-gerrit-account-cache
Example:
```
bazelisk build plugins/remote-gerrit-account-cache
```
The libModule jar file is created under bazel-bin/plugins/remote-gerrit-account-cache/remote-gerrit-account-cache.jar
To execute the tests run bazelisk test plugins/remote-gerrit-account-cache/... from the Gerrit source tree.
Example:
```
bazelisk test plugins/remote-gerrit-account-cache/...
```
# How to import into Eclipse as a project
Add remote-gerrit-account-cache in the CUSTOM_PLUGINS section of the tools/bzl/plugins.bzl.
Example:
```
CUSTOM_PLUGINS = [
"remote-gerrit-account-cache",
]
```
Run tools/eclipse/project.py for generating or updating the Eclipse project.
# How to install
Copy the remote-gerrit-account-cache.jar into the `${GERRIT_SITE}/lib/`
so that it is being loaded when the Gerrit instance is started. Note
that the following configuration options need to be added.
# Configuration
## Section gerrit
### gerrit.installModule
AccountCache module which will be overriding the core AccountCache
implementation. By default, unset.
Example:
```
[gerrit]
installModule = com.googlesource.gerrit.plugins.remotegerritaccountcache.AccountCacheImpl$AccountCacheModule
```
## Section remote-gerrit-account-cache
### remote-gerrit-account-cache.remoteGerritBaseUrl
The remote Gerrit site base URL. By default, unset.
Example:
```
[remote-gerrit-account-cache]
remoteGerritBaseUrl = https://gerrit.example.com
```
### remote-gerrit-account-cache.httpUsername
The remote Gerrit site HTTP username. By default, unset.
Example:
```
[remote-gerrit-account-cache]
httpUsername = example
```
### remote-gerrit-account-cache.httpPassword
The remote Gerrit site HTTP password. By default, unset.
Example:
```
[remote-gerrit-account-cache]
httpPassword = ***
```
### remote-gerrit-account-cache.requestsPerSecond
The maximum rate at which the remote REST APIs are fired.
By default, set to 8 per second.
Example:
```
[remote-gerrit-account-cache]
requestsPerSecond = 10
```
## Section cache
### cache.accounts.maxAge
Maximum age to keep an entry in the accounts cache. By default,
the entries in accounts cache expire in a day.
Example:
```
[cache "accounts"]
maxAge = 1d
```
### cache.accounts.refreshAfterWrite
Duration after which account cache entries are eligible for asynchronous
refresh. By default, set to 23h.
Example:
```
[cache "accounts"]
refreshAfterWrite = 23h
```