| # 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 |
| ``` |