blob: 365886298a4bfc7b63173dfb4fbf4be70175d543 [file] [log] [blame] [view]
---
title: "Gerrit 3.5.x"
permalink: 3.5.html
hide_sidebar: true
hide_navtoggle: true
toc: true
---
Download: **[3.5.6](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.6.war)**
| [3.5.5](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.5.war)
| [3.5.4](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.4.war)
| [3.5.3](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.3.war)
| [3.5.2](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.2.war)
| [3.5.1](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.1.war)
| [3.5.0.1](https://gerrit-releases.storage.googleapis.com/gerrit-3.5.0.1.war)
Documentation: **[3.5.6](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.6/index.html)**
| [3.5.5](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.5/index.html)
| [3.5.4](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.4/index.html)
| [3.5.3](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.3/index.html)
| [3.5.2](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.2/index.html)
| [3.5.1](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.1/index.html)
| [3.5.0.1](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0.1/index.html)
## Release highlights
### Case-insensitive usernames
Users can login with mixed case usernames without the risk to create
duplicate accounts.
The change affects the following external ids:
* `gerrit` (LDAP)
* `username` (login, authenticated REST and git endpoints)
For a new Gerrit setup, usernames are case insensitive by default, while for
existing installations the Gerrit admin can switch the functionality on/off
using the [`auth.userNameCaseInsensitive`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#auth.userNameCaseInsensitive)
setting in `gerrit.config`.
> **NOTE**: In the All-Users.git repository, the SHA-1 sum of the account
> is computed preserving the case of the external ID. See the full details
> in the [Gerrit config accounts documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-accounts.html#external-ids). Existing accounts can be migrated to
> the new SHA-1 sum using the
> [offline](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/pgm-ChangeExternalIdCaseSensitivity.html)
> or [online](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/externalid-case-insensitivity.html#online-migration) migration tool.
### Request cancellation and execution deadlines
To limit the maximal execution time for requests, administrators can configure
server-side deadlines. More details are available in the
[Gerrit documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-request-cancellation-and-deadlines.html).
Any operation in Gerrit can now be subject to a configurable deadline, using
the [`deadline`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#deadline.id)
section in `gerrit.config`.
> **NOTE**: Deadlines are supported for `REST`, `SSH` and `GIT_RECEIVE`
> requests, but not for `GIT_UPLOAD` requests.
Gerrit commands can define an execution deadline, so that the processing
triggered on the server would be able to end in a definite time, even in case
of network interruption of the connection with the client.
### Removal of external ids
Gerrit external ids, including the username, can now be removed using the
[SSH command](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/cmd-set-account.html)
or [REST API](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/rest-api-accounts.html#delete-account-external-ids).
> **NOTE**: Users that have the __Modify Account__ permission can delete
> external ids that belong to other accounts. External ids in the `username`
> scheme can only be deleted by users that have __Administrate Server__
> or both `Maintain Server` and `Modify Account`. See the
> [documentation](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/rest-api-accounts.html#delete-account-external-ids)
> for further details.
### Copy labels to new patch-sets
Gerrit matches patch set approvals against the provided query
string and, if the query matches, the approval is copied from one patch set
to the next.
The copy label feature is controlled by the
[`label.Label-Name.copyCondition`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-labels.html#label_copyCondition)
in `project.config`.
### New change predicates
It is possible to search for changes by uploader, using the new
[`uploader` and `uploaderin`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-search.html#uploader)
predicates.
Hashtags search is improved with the [`inhashtag`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-search.html#inhashtag)
predicate which returns all the changes where any hashtag contains a substring,
using a full-text search.
It is now possible to use the new
[`has:attention` and `is:attention` predicates](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-search.html#has-attention)
to search for changes having the attention of the current user.
Cherry-picked changes can now be searched using the
[`is:cherrypick`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-search.html#cherrypick)
predicate.
The special ["non_uploader" parameter](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-search.html#labels)
is now available as parameter for change predicates and matches any
user who's not the uploader of the latest patchset.
### Performance improvements on the change screen
The change screen has been improved by enabling extra caching and disabling
some expensive computation.
A new [`approvals` cache](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#cache_names)
contains approvals for a given patch set.
The new [`change.conflictsPredicateEnabled`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#change.conflictsPredicateEnabled)
setting in `gerrit.config` disables the computation of the conflicts section
avoiding a computation of complexity of O(nˆ2), where n is the number of open
changes for the project the change belongs to.
When set to false the GUI will leave the conflict changes section on change
screen empty.
## Important notes
### Support for Java 8 dropped
The Java language level is now set to Java 11 for Gerrit, the support
for Java 8 is dropped.
Gerrit source code may not be compatible with Java 8 anymore.
### Schema and index changes
This release doesn't contain schema changes.
The `changes` index version has been increased to version 71. By default the
index is automatically rebuilt upon the Gerrit startup after the
upgrade.
To run offline reindexing of the changes (optional when upgrading from v3.3.x
or later):
```sh
java -jar gerrit.war reindex --index changes -d site_path
```
### Zero-downtime upgrade
Gerrit v3.5.x supports zero-downtime upgrade from Gerrit v3.2.x or later when
configured using a [high-availability configuration](https://gerrit.googlesource.com/plugins/high-availability/+/refs/heads/master/README.md),
and the Git repositories are stored in a shared filesystem such as NFS or
similar.
During the zero-downtime upgrade, Gerrit end-users would not notice any outage
or service disruption. They will be able to perform any read/write Gerrit
operation on the GUI or using using any API.
The zero-downtime upgrade consists of the following steps:
1. Have Gerrit servers running v3.2.x or later, in high-availability
configuration, healthy and able to handle the incoming traffic properly.
2. Set the Gerrit server unhealthy.
3. Shutdown the Gerrit server, update gerrit.war and plugins to v3.5.x and start
Gerrit again.
4. Verify that the Gerrit server is working properly (e.g. run automated smoke
tests) and then make it healthy again.
5. Wait for the Gerrit server to start serving traffic normally.
6. Repeat steps 2. to 5. for all the other Gerrit servers.
### Downgrade
Downgrade to any Gerrit v3.3.x or v3.4.x release is possible, but requires the
following manual steps:
1. Shutdown all migrated Gerrit v3.5.x servers
2. Update the gerrit.war and plugins to the previous v3.3.x or v3.4.x version
3. Run offline reindexing using the previous gerrit.war version
3. Startup Gerrit server
> **NOTE**: Downgrading is not always possible in Gerrit and is subject to
> specific restrictions on different releases. Always read the release notes
> carefully and look for the supported downgrade paths.
### Breaking changes
* The support for [ElasticSearch index](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.1/config-gerrit.html#elasticsearch)
is removed from Gerrit core. Existing setups can still use ElasticSearch through
external non-core libModules.
* The "Reply" button label and tooltip cannot be customized anymore: the
`change.replyLabel` and `change.replyTooltip` are ignored.
* The `repo_download` [`download.scheme`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#download.scheme)
is renamed to `repo`.
* The `bower` Bazel rules are removed: all front-end plugins would have to
migrate to `yarn`.
* REST APIs with incompatible changes
* [`AccountExternalIdInfo`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/rest-api-accounts.html#account-external-id-info)
`email` field is renamed to `email_address`.
* The `/accounts/{account-id}/stars.changes` endpoint
is removed. Looking for starred changes is still available through the use
of `is:starred` or `has:star` predicates.
* [Change 323855](https://gerrit-review.googlesource.com/323855) [Change 324115](https://gerrit-review.googlesource.com/324115):
ProjectCache#evict no longer triggers a reindex.
During offline project reindexing evict() was triggering a duplicate reindex
on the project when we only wanted to evict the project cache entry. This same
issue occurred with the HA plugin and could be/been present in other plugins.
If you have relied on a reindex being done on evict() you need to use
evictAndReindex() instead. This behavior is now consistent with other evict()
methods in Gerrit.
### Other changes
* Request tracing can exclude URI patterns, using the
[`tracing.traceid.excludedRequestUriPattern`](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#tracing.traceid.requestUriPattern)
setting in `gerrit.config`.
* Git receive-pack can have a grace-period configurable as
[`receive.cancellationTimeout` setting](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/config-gerrit.html#receive.cancellationTimeout)
for terminating after having received the cancellation signal from the client.
* Attention-set rules can be disabled upon push, using the
[`--ignore-automatic-attention-set-rules` or `%ias` option](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.0/user-upload.html#ignore-attention-set).
## Plugin changes
* codemirror-editor
* [Issue 14845](https://crbug.com/gerrit/14845):
Improve performance in the editor
Stop setting viewportMargin and instead use the default value.
Add support for the inbuilt search support within codemirror.
* delete-project
* Use base url for return url after deleting a repo
* gitiles
* [Change 305442](https://gerrit-review.googlesource.com/c/gitiles/+/305442):
Test that Branch Redirect supports having short ref names in gitiles url.
* [Change 298802](https://gerrit-review.googlesource.com/c/gitiles/+/298802):
Redirect gitiles url using Repo's branch redirect config when format type is default (not provided in gitiles url).
* [Change 296662](https://gerrit-review.googlesource.com/c/gitiles/+/296662):
Fix straggling FQN in LogDetails.soy template call.
* [Change 292082](https://gerrit-review.googlesource.com/c/gitiles/+/292082):
Support branch redirect in Gitiles for helping users keep their old URLs working when migrating branch names.
* [Change 282376](https://gerrit-review.googlesource.com/c/gitiles/+/282376):
Add support for rendering webp image files, supported for all browsers and Safari 14 or later.
* [Change 277999](https://gerrit-review.googlesource.com/c/gitiles/+/277999):
Set correct target url for symlinks, which were calculated incorrectly.
* [Change 273661](https://gerrit-review.googlesource.com/c/gitiles/+/273661):
Drop u-pre's font-weight in CSS.
* plugin-manager
* [Issue 13521](https://crbug.com/gerrit/13521):
Use relative URL to access Gerrit base URL
Plugin-manager now works for Gerrit setups
with a reverse-proxy and a non-root base path.
* replication
* [Issue 14819](https://crbug.com/gerrit/14819):
Inherit remote replication events from a common parent.
* [Issue 14628](https://crbug.com/gerrit/14628):
Register ProjectDeletion events for gson serialization.
ProjectDeletion events were not registered event types.
This caused failures when EventGson tried to serialize/deserialize
objects having those events as field, Throwing the JsonParseException:
```
Unknown event type: project-deletion-replication-scheduled
```
* [Issue 13216](https://crbug.com/gerrit/13216):
Add possibility to split large pushes to remote into batches.
* Add a cluster replication configuration section.
Add a section describing how to setup more than one primary to cooperate
for replication and how this can impact cluster scaling and service
levels.
## Gerrit UI changes
* [Issue 12268](https://crbug.com/gerrit/12268):
Fix spacing between change status chip and change number when logged out.
* [Issue 13471](https://crbug.com/gerrit/13471):
Change diff highlighting colors for dark theme.
* [Issue 13990](https://crbug.com/gerrit/13990):
Fix Uploaded patch set message with votes.
* [Issue 14041](https://crbug.com/gerrit/14041):
Show all comments in Comments Tab if no resolved comments.
* [Issue 14470](https://crbug.com/gerrit/14470):
Remove attention set configuration option (frontend).
* [Issue 14521](https://crbug.com/gerrit/14521):
Fix fully reloading the change view when the new patchset is unknown.
* [Issue 14522](https://crbug.com/gerrit/14522):
Do not process keyboard shortcuts for invisible views.
* [Issue 14769](https://crbug.com/gerrit/14769):
Show tooltip below for diff view options.
* [Issue 14820](https://crbug.com/gerrit/14820):
Fix Normal text mistakenly shown with code block fixed-width formatting.
* [Issue 14828](https://crbug.com/gerrit/14828):
Saving a comment incorrectly closes/discards other unsaved comments.
* [Issue 14854](https://crbug.com/gerrit/14854):
Expand drafts in comment threads by default.
* [Issue 14872](https://crbug.com/gerrit/14872):
Account name misaligned in chip when there is no user avatars enabled.
* [Issue 15105](https://crbug.com/gerrit/15105):
Don't automatically open suggestions dropdown in "Add reviewer" and "Add CC".
## Documentation changes
* PolyGerrit UI screenshots and associated documentation have been updated.
* [Issue 11388](https://crbug.com/gerrit/11388):
Extend the section associated with NoteDb format documentation.
## JGit changes
Update JGit to 60b81c5a9280, which includes the following changes:
* [60b81c5a9](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/60b81c5a9):
Fix RevWalk.getMergedInto() ignores annotated tags.
* [c5b305473](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/c5b305473):
Optimize RevWalk.getMergedInto().
* [847077151](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/847077151):
GitServlet: allow to override default error handlers.
* [35eeab41b](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/35eeab41b):
RevWalk: getMergedInto's result is wrong on the second call.
* [24d6d6053](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/24d6d6053):
Retry loose object read upon "Stale file handle" exception.
* [64b0dee98](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/64b0dee98):
Fix garbage collection failing to delete pack file.
* [64d0aaa2b](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/64d0aaa2b):
Teach independent negotiation (no pack file) using an option "wait-for-done".
* [1788b72d1](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/1788b72d1):
Skip detecting content renames for binary files.
* [c59626ad7](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/c59626ad7):
RepoCommand: Retry commit on LockFailure.
* [0667b8ec4](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/0667b8ec4):
RepoCommand: Do not set 'branch' if the revision is a tag.
* [8bc166b00](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/8bc166b00):
BatchRefUpdate: Skip saving conflicting ref names and prefixes in memory.
* [303dd019d](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/303dd019d):
Optimize RefDirectory.isNameConflicting().
* [003862722](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/003862722):
LockFile: create OutputStream only when needed.
* [e58bf0870](https://git.eclipse.org/r/plugins/gitiles/jgit/jgit/+/e58bf0870):
Add git config for conflict style merge/diff3.
## Other dependency changes
* Update auto-value-gson-\* to 1.3.1
* Update testcontainers to 1.15.3
* Update flogger to 0.6
* Update docker-java-\* to 3.2.8
* Update lucene-\* to 6.6.5
* Update polymer/decorators to 3.0.0
* Update polymer to 3.4.1
* Update typescript-api to 3.4.4
* Update lit to 2.0.2
## Other core changes
* [Issue 13563](https://crbug.com/gerrit/13563):
Fallback to a single region for incorrect intra-line diffs.
In some rare cases, intra-line diffs produce incorrect results, which
confuse users since the light/dark colors of added and removed areas do
not accurately represent what was added and deleted.
* [Issue 13965](https://crbug.com/gerrit/13965):
commit-msg: simplify generation of a unique hash.
Refactors the commit-msg hook, changing the random bits of
data used to generate the value for the Change-Id trailer.
* [Issue 14362](https://crbug.com/gerrit/14362):
Export PluginPushOption for use in plugins.
* [Issue 14556](https://crbug.com/gerrit/14556):
Fix error handling in checks-service.
* [Issue 14772](https://crbug.com/gerrit/14772):
Fix attention set modifications for users with no permissions.
* [Issue 15149](https://crbug.com/gerrit/15149):
Add changeInfo to LabelsChangedCallback in ChangeReplyPluginApi.
## Bugfix releases
### 3.5.6
* Security Fixes
* [Issue 16890](https://crbug.com/gerrit/16890)
[CVE-2019-12402](https://nvd.nist.gov/vuln/detail/CVE-2019-12402):
Fix DoS for Gerrit servers exposing Gitiles with the ability to download source archive
Bump common:compress version to 1.22 for protecting against an infinite loop
triggered by downloading a source archive of files with a Unicode filename.
* Bug Fixes
* [Change 362914](https://gerrit-review.googlesource.com/c/gerrit/+/362914)
Fix internal server error caused by double flush in BaseCommand.TaskThunk
Ignore `SshChannelClosedException` when flushing the task's output and error
streams. JGit commands like `UploadPack` flush these streams already. When
`TaskThunk` tries to flush them again `SshChannelClosedException` is thrown
and leads to an internal server error.
* [Change 364478](https://gerrit-review.googlesource.com/c/gerrit/+/364478):
AndSource: Run `isVisibleToPredicate` based on its cost
`isVisible` check can be expensive and always running it ahead of other
cheaper predicates can increase the query time. Update `AndSource` to treat
`isVisibleToPredicate` like any other predicate so that it runs based on its
estimated cost.
* [Change 364591](https://gerrit-review.googlesource.com/c/gerrit/+/364591)
Allow to hide download schemes from the UI
Allow hiding a download scheme in the UI by still allowing to use it.
* [Issue 16819](https://crbug.com/gerrit/16819):
Enable LDAP "Remember me" in login form per default
When users are presented with the LDAP login page, the "Remember me" checkbox
is disabled by default. This might be a problem because, if the user doesn't
explicitly click the checkbox, the session will be tied to the browser
session.
* [Issue 16814](https://crbug.com/gerrit/16814):
Improve `Rebase-SubmitStrategy` performance in some cases
Set uninteresting branches based on project configuration:
`create_new_change_for_all_not_in_target`.
* [Change 369415](https://gerrit-review.googlesource.com/c/gerrit/+/369415):
Fix metric computation with file paths in metric name.
Don't fail metric computation due to duplicated metric names.
* [Change 370354](https://gerrit-review.googlesource.com/c/gerrit/+/370354):
Improved performance of queries when backend index returns more results than needed
Matching changes more than the limit is just extra work that is discarded at
the end when the results are trimmed to match the limit. This can help improve
performance of queries where a small percentage of changes are filtered in the
initial page and the remaining results are obtained from the next page.
* [Change 357834](https://gerrit-review.googlesource.com/c/gerrit/+/357834):
Improved performance for plugin-provided SSH commands that perform multiple
permission checks or ref lookups for the same project
Move creation of `PerThreadCache` to `SshCommand` so that the cache is available
to most commands, including plugins.
* Download-commands plugin fixes
* [Issue 15944](hhttps://crbug.com/gerrit/15944):
Update download-commands to latest master
* Dependency Updates
* Update jgit to 74fa245b3c3ccf13afcbec7911c7c8459e48527d.
* [JGit Bug 565854](https://bugs.eclipse.org/bugs/show_bug.cgi?id=565854)
SshdSession: close channel gracefully
Close the channel gracefully to give the server a chance to clean up properly on
its side.
* Update bouncycastle to 1.72.
* Update commons-compress to 1.22.
* Update tukaani-xz to 1.9.
### 3.5.5
* New features
* [Issue 16565](https://crbug.com/gerrit/16565):
Introduce cache.threads option to allow custom executors for Caffeine caches.
The introduction of `cache.threads` in `gerrit.config` allows to configure
a separate thread pool which can be tuned and decoupled from the
rest of the JVM common threads.
* [Change 353177](https://gerrit-review.googlesource.com/c/gerrit/+/353177):
Add tsconfig-plugins-base.json to Gerrit TypeScript Plugin API.
Adds `tsconfig-plugins-base.json` to the npm package so downstream plugins
can easily use the same set of TypeScript settings.
* [Change 351674](https://gerrit-review.googlesource.com/c/gerrit/+/351674):
SSH review cmd handles lock failures with retries.
Retrying on lock failures helps mitigating lock failures when there is
contention to lock the notedb ref. Retries were already implemented
in REST API code path at a high enough layer so that it applies for all
REST APIs.
* [Change 353594](https://gerrit-review.googlesource.com/c/gerrit/+/353594):
Inserting new patch-sets is retried on lock failures.
Mitigates failures when creating new patch-sets fails if the notedb
ref is locked for another update on the change.
* [Issue 16445](https://crbug.com/gerrit/16445):
Add slice number to the change indexing task description.
To indicate to the administrator each task is indeed doing something
different, add the slice number if there is more than one slice in
total.
* [Change 356215](https://gerrit-review.googlesource.com/c/gerrit/+/356215):
Support `init --reindex-threads=-1` to skip reindexing after init.
Admins may wish to run other commands after `init` and before `reindex`, but
previously would have needed to observe and interrupt the `init` command
process once it started reindexing in order to do so. Providing an option to
`init` that skips the reindexing phase simplifies that workflow and makes it
less error prone.
* [Change 356234](https://gerrit-review.googlesource.com/c/gerrit/+/356234):
Add CUDA syntax highlighting.
* [Change 352534](https://gerrit-review.googlesource.com/352534):
Introduce `--show-cache-stats`for printing cache stats during `init` and `reindex`,
disabled by default.
* Bug Fixes
* [Issue 14686](https://crbug.com/gerrit/14686), [Issue 14779](https://crbug.com/gerrit/14779), [Issue 16030](https://crbug.com/gerrit/16030):
In [Change 293978](https://gerrit-review.googlesource.com/c/gerrit/+/293978), eTag was
removed from GetRevisionActions, but not RevisionResource. This resulted
in the UI to show a stale 'submit' action on the change in the same
submission chain. The UI now uses RevisionResource eTag, that does not include
MergeSuperSet (all related changes).
* [Issue 16409](https://crbug.com/gerrit/16409):
Report pack protocol errors to the client via smart-HTTP.
A regression introduced by [JGit Change 1926771](https://git.eclipse.org/r/c/jgit/jgit/+/192677),
caused pack protocol errors to be reported as 500 Server errors.
Such situations should be reported to the user as a 200 OK containing the
details of the failed operation.
* [Change 351759](https://gerrit-review.googlesource.com/351759):
Fix `contrib/find-duplicate-usernames.sh` output when usernames contain spaces.
* [Issue 16449](https://crbug.com/gerrit/16449):
Fix project root computation in Gitweb servlet.
* [Change 355196](https://gerrit-review.googlesource.com/355196):
Fix the ability to configure JSCH as client implementation in `gerrit.config`.
The JGit's SSH loading of the default session factory may lead to a
non-deterministic instance if more than one factory is available.
Make the legacy JSCH implementation explicit to enable configuring
it instead of the default Apache Mina SSH.
* [Change 356715](https://gerrit-review.googlesource.com/356715):
Fixed bug with negated label for queries with external groups.
* [Change 359176](https://gerrit-review.googlesource.com/359176):
Fix LabelPredicate group matching for included external groups.
* [Change 357874](https://gerrit-review.googlesource.com/357874):
Fixed ownerin/uploaderin for internal groups that include external groups.
* [Change 355054](https://gerrit-review.googlesource.com/355054):
Wrap #mobileSearch in a div.
Fixes an issue on wikimedia where the search button was hidden
even though the rules executed to make it show.
* Replication plugin fixes
* [Change 352174](https://gerrit-review.googlesource.com/352174):
Replication distributor: reduce log level for no-op consolidations.
* Dependency Updates
* Update jgit to a1901305b26ed5e0116f138bc02837713d2cf5c3.
Update from stable-6.1 to stable-6.5:
* Notable enhancements and fixes from [6.2.0](https://projects.eclipse.org/projects/technology.jgit/releases/6.2.0) are:
* [4dd9a94e](https://git.eclipse.org/r/c/jgit/jgit/+/192433): Better feedback on SSH authentication failure
* [7b1c8cf14](https://git.eclipse.org/r/c/jgit/jgit/+/191924): Retry reading a file when there are concurrent writes
* [fed1a5493](https://git.eclipse.org/r/c/jgit/jgit/+/197714): Refresh 'objects' dir and retry if a loose object is not found
(Fixes cases where a new loose object is not immediately visible on a NFS
client if it was created on another client)
* [011c26ff3](https://git.eclipse.org/r/c/jgit/jgit/+/193939): Fix connection leak for smart http connections
* [ac127a793](https://git.eclipse.org/r/c/jgit/jgit/+/196849): Do not handle internal git errors as an HTTP error
* Notable enhancements and fixes from [6.3.0](https://projects.eclipse.org/projects/technology.jgit/releases/6.3.0) are:
* [1a364c49e](https://git.eclipse.org/r/c/jgit/jgit/+/194200): JGit blame very slow for large merge commits that rename
files
* [66ace4b9](https://git.eclipse.org/r/c/jgit/jgit/+/193496): Do not check reachability of visible SHA1s in git-upload-pack
* [035e0e23](https://git.eclipse.org/r/c/jgit/jgit/+/194500): Do not prematurely terminate timer in case of error during git-upload-pack
* Notable enhancements and fixes from [6.4.0](https://projects.eclipse.org/projects/technology.jgit/releases/6.4.0) are:
* [fe9aeb02e6](https://git.eclipse.org/r/c/jgit/jgit/+/196497), [93097f0018](https://git.eclipse.org/r/c/jgit/jgit/+/196323): Receive and parse client [git session-id](https://git-scm.com/docs/gitprotocol-capabilities#_session_idsession_id)
* [59029aec3](https://git.eclipse.org/r/c/jgit/jgit/+/196905): Add option to allow using JDK's SHA1 implementation
* [3e7281662](https://git.eclipse.org/r/c/jgit/jgit/+/197151): UploadPackServlet#doPost use try-with-resource to ensure
UploadPack is closed
* [1e04046a6](https://git.eclipse.org/r/c/jgit/jgit/+/194411): Fix crashes on rare combination of file names (This issue
has been seen during offline reindex of changes with specific merge
commits)
* Update sshd to 2.9.2
* [CVE-2022-45047](https://nvd.nist.gov/vuln/detail/CVE-2022-45047): Avoid using Java deserialization to load a serialized java.security.PrivateKey
* [SSHD-1302](https://issues.apache.org/jira/browse/SSHD-1302): Reading again from exhausted ChannelExec#getInvertedOut() throws IOException instead of returning -1
* [SSHD-966](https://issues.apache.org/jira/browse/SSHD-966): Deadlock on disconnection at the end of key-exchange
* [SSHD-1231](https://issues.apache.org/jira/browse/SSHD-1231): Public key authentication: wrong signature algorithm used (ed25519 key with ssh-rsa signature)
* [SSHD-1257](https://issues.apache.org/jira/browse/SSHD-1257): Shell is not getting closed if the command has already closed the OutputStream it is using.
* [SSHD-1261](https://issues.apache.org/jira/browse/SSHD-1261): Sometimes async write listener is not called
* [SSHD-1290](https://issues.apache.org/jira/browse/SSHD-1290): Race condition is logged in ChannelAsyncOutputStream
* Update mina-core to 2.0.23
* Documentation fixes
* [Change 353177](https://gerrit-review.googlesource.com/353177):
Document Gerrit TypeScript Plugin API @gerritcodereview/typescript-api in pg-plugin-dev.
### 3.5.4
* New features
* [Issue 13930](https://crbug.com/gerrit/13930);
Support ssh kex server-sig-algs for modern RSA clients.
* Native packaging
* GerritForge RPM repository updated for arm64 architecture
[GerritForge RPM v1.4](https://gerritforge.com/gerritforge-repo-1-4.noarch.rpm)
has been released, including the native packages for arm64 architecutre.
* DockerHub images for arm64 architecture
[DockerHub Gerrit images](https://hub.docker.com/r/gerritcodereview/gerrit/tags?page=1&name=3.5.4)
include images for arm64 architecture.
* Performance Fixes
* [Change 350577](https://gerrit-review.googlesource.com/c/gerrit/+/350577)
copy-approvals: use multiple threads for copy-approvals, improve performance
Split the work into slices of changes and then utilize one thread per slice.
Also skip unnecessary reindexing. On a large Gerrit site with 1.3 million
changes, this reduced the time for copy-approvals from 5 hours to 15-20
minutes.
* [Change 350236](https://gerrit-review.googlesource.com/c/gerrit/+/350236)
Optimized change visibilty checking when the project is hidden
Looping over every change when the whole project isn't readable is a
waste of CPU. It's a bigger waste to fetch all the change data in the
first place.
* [Issue 16379](https://crbug.com/gerrit/16379):
Remove key locking for disabled caches
This change also makes the memoryLimit behaviour consistent with the
diskLimit set to zero means disabling the implementation of the cache.
* [Change 349895](https://gerrit-review.googlesource.com/c/gerrit/+/349895):
Add AndCardinalPredicate and OrCardinalPredicate
Before this change, IndexSource derived cardinality from predicate
which implement `HasCardinality`. Since `AndPredicate` and `OrPredicate`
does not return cardinality, IndexSource defaults to 10 when query
comprises more than one predicate. Due to this behavior, `AndSource`
chooses IndexSource almost always when query contains more than one
index predicate.
This helps `AndSource` to choose the right source more often.
* [Change 347956](https://gerrit-review.googlesource.com/c/gerrit/+/347956):
Introduce possibility to define the cardinality so that `AndSource` predicate
can work more efficiently
Before this change, cardinality of the IndexSource was always set to
10. This makes `AndSource` to choose IndexSource over other sources most of
the time.
Add a `HasCardinality` interface which can be used by all the predicates
which implement IndexPredicate to set a cardinality. This helps
AndSource to choose the right datasource.
* [Change 347955](https://gerrit-review.googlesource.com/c/gerrit/+/347955):
Consider cardinality while choosing the data source for `AndSource` predicate
Before this change, `AndSource` considered cost to choose a datasource.
Ideally cost should be used to determine which predicate to run
`#match()` against first, so that queries are faster. Cardinality should
be used to determine which datasource to be picked so that there are
fewer changes to process.
Consider cardinality of the datasource to choose the source and use
cost when cardinality is same.
* [Change 349355](https://gerrit-review.googlesource.com/c/gerrit/+/349355):
Cache repository locations in LocalDiskRepositoryManager
Obtaining the actual location of a repository using base-path
and project name can be slow as it involves some guessing to
locate the repository. Cache the locations once they are
obtained to avoid repeated work, thereby improving performance
when opening repositories.
* Bug Fixes
* [Change 350576](https://gerrit-review.googlesource.com/350576)
copy-approvals: continue when there are corrupt meta-refs in a project
If there was a corrupt meta-ref in a project, the copy-approvals
failed for all changes in that project. Mitigates [Issue 16326].
* [Change 350575](https://gerrit-review.googlesource.com/350575)
copy-approvals: don't stop when it fails on one project
When copying of approvals failed in one project it skipped copying of
approvals for other projects where it would potentially finish
successfully.
* [Change 350414](https://gerrit-review.googlesource.com/c/gerrit/+/350414)
Fix index rewriter to rewrite all Or/AndPredicates.
AndSource chooses right source more often
* [Change 349314](https://gerrit-review.googlesource.com/349314)
Fix reindex with label copyCondition containing group.
* [Change 350014](https://gerrit-review.googlesource.com/c/gerrit/+/350014):
Do not set cherryPickOf on RevertSubmission
The RevertSubmission internally uses CherryPickChange operation. It
creates the 'normal' revert for the first change in the relation chain,
for each subsequent change it creates a revert commit that is then
cherry-picked. This cherry-pick is not a cherry-pick of the reverted
change. This is a cherry-pick of the revert commit of the original
change.
This change fixes the bug in the logic that sets cherryPickOf to the
original (reverted) change, using the CherryPickChange operation.
* [Change 349894](https://gerrit-review.googlesource.com/c/gerrit/+/349894):
Don't always rewrite And/OrPredicate to And/OrSource
Before this change OrPredicate was always rewritten to OrSource. This
is not the right thing to do as `OrSource#read()` will eventually fail
when there is at least one non-datasource child. Since
[Change 347955](https://gerrit-review.googlesource.com/c/gerrit/+/347955),
`AndSource` picks a source which has the lowest cardinality
which makes the `OrSource#read()` failures more visible.
Rewrite `OrPredicate` to `OrSource` only when all the children in the
predicate are DataSources.
* [Change 348715](https://gerrit-review.googlesource.com/c/gerrit/+/348715);
Clarify that a restart is needed before changes to email templates take
effect
* [Issue 16182](https://crbug.com/gerrit/16182):
Reintroduce the Change-Id footer in change screen
This change reintroduce the Change-Id footer below the commit message on
the Gerrit UI.
* [Issue 10168](https://crbug.com/gerrit/10168):
Fix HTTP 404 when browsing tags on Gitweb
The Gitweb links to tags have been broken in v2.14.10 onwards.
Gitweb supports the 'a=tags' rendering action for annotated tags
only, returning 404 for all lightweight tags.
Use the generic 'a=shortlog' for Gitweb links to tags which would
work for both annotated and lightweight ones.
* [Change 77495](https://gerrit-review.googlesource.com/c/gerrit/+/347495):
Fix for IllegalStateException during the Gerrit start when
`cache.projects.refreshAfterWrite` is set to true and prolog rules are used
* Replication plugin fixes
* [Change 350234](https://gerrit-review.googlesource.com/350234)
Fix URI double escaping. Stored tasks with (broken) double escaped URIs must be manually removed
* [Issue 15804](https://crbug.com/gerrit/15804);
Do not retry replication when local repository not found
* Dependency Updates
* [Issue 14861](https://crbug.com/gerrit/14861);
Update jgit to c6b0ee04e49c96e0beec4154196c416abcf2bcc9.
This update to current stable-5.9 contains the following changes:
* fed0ab9ba Use FileSnapshot without using configs for FileBasedConfig
* 5606a5315 FileSnapshot: Lazy load file store attributes cache
* 6aa29d116 Better git system config finding
* d160e8a93 Fix missing peel-part in lsRefsV2 for loose annotated tags
* 5f8c48413 reftable: drop code for truncated reads
* b4782d74f reftable: pass on invalid object ID in conversion
* Documentation fixes
* Other Fixes
* [Issue 16322](https://crbug.com/gerrit/16322):
Limit the number of changes that can be submitted together
When chaining changes together, the sequence of commits to navigate
was previously unbound, causing the potential operations explosion.
The explosion could have also been accidental and caused by the push
of a change with a non-existent branch, which would have resulted
in the full scan of the repository for changes.
Introduce a new Gerrit configuration `change.maxSubmittableAtOnce` with
a safe default of `1024`, which would allow any use case that would have
also worked before this change.
* [Change 347496](https://gerrit-review.googlesource.com/c/gerrit/+/347496):
Enable project_list cache warmer when `cache.project_list.maxAge` is set
* [Change 341454](https://gerrit-review.googlesource.com/c/gerrit/+/341454):
GitwebServlet: Retrieve git path from FileRepository so that it can be used
with multi-site and cached-refdb modules
* [Issue 15997](https://crbug.com/gerrit/15997):
Make DelegateRepository#delegate() method public to allow plugins/modules to
access it
### 3.5.3
* Security Fixes
* [Issue 16054](https://crbug.com/gerrit/16054):
Fix confidentiality leak by users with create ref permission
using the create branch REST-API
Any user with create ref permission was able to gain
access to any SHA1 or refs, including the ones that they would
not have permission to see.
* Breaking changes
* [Issue 15941](https://crbug.com/gerrit/15941):
Fix SSH queries to not show commit-message unless --commit-message is provided
This issue has existed for several years and should be considered
breaking as users might expect commit message to be included by
default in SSH query results.
Obtaining the commit message is a costly operation as the commit
data has to be loaded. So, showing it even when --commit-message
is not provided degrades the performance of SSH queries.
* [Change 344300](https://gerrit-review.googlesource.com/344300):
Add missing return values in MetricMaker's `newCallbackMetric` and
`newConstantMetric`
When new callback and constant metrics were created the RegistrationHandle
was not returned, making impossible to de-register them.
The method signature is now aligned, however, all plugins, including the core ones,
that were registering callback or constant metrics would need to be rebuilt from
source or downloaded from the latest build on
[Gerrit-CI](https://gerrit-ci.gerritforge.com).
* New features
* [Change 343096](https://gerrit-review.googlesource.com/343096):
Introduce `index.paginationType=SEARCH_AFTER` configuration for speeding up
query pagination
* [Change 343798](https://gerrit-review.googlesource.com/343798):
Introduce `index.pageSizeMultiplier` configuration to paginate index
queries with increasing size
* [Change 344334](https://gerrit-review.googlesource.com/344334):
Implement `no-limit` queries with multiple pages, make them usable with
Elasticsearch
* [Change 345017](https://gerrit-review.googlesource.com/345017):
Add public `EventTypes.getRegisteredEvents()` for accessing all stream
event types from plugins
* [Change 340714](https://gerrit-review.googlesource.com/340714):
Introduce metrics configuration for different data reservoirs
* Performance Fixes
* [Change 338154](https://gerrit-review.googlesource.com/338154):
Lazy load change notes when submit by push
Improves performance of change submit via push
* [Change 338614](https://gerrit-review.googlesource.com/338614)
Optimize SSH queries to avoid loading individual accounts
This improves performance of SSH queries.
* [Change 338474](https://gerrit-review.googlesource.com/338474):
Allow async receive-commits to have a thread-local cache
Improve caching when merging changes through git push
* [Change 338574](https://gerrit-review.googlesource.com/338574):
Cache ProjectControl instances in SSH queries
A PerThreadCache is used to cache ProjectControl instances to
improve SSH query performance.
* [Change 338834](https://gerrit-review.googlesource.com/338834):
Avoid creating an IdentifiedUser multiple times in a SSH query
This improves performance of SSH queries.
* Bug Fixes
* [Change 347474](https://gerrit-review.googlesource.com/347474):
Fix DefaultMemoryCacheFactory to correctly set refreshAfterWrite
Setting refreshAfterWrite in gerrit.config now works and does not mistakenly
set expireAfterAccess
* [Issue 15997](https://crbug.com/gerrit/15997):
Make delegate() method public
git-repo-metrics plugin now works with multi-site setup
* [Issue 16018](https://crbug.com/gerrit/16018)
Don't try to mark files as reviewed when not logged in
Fix marking of reviewed flag when not logged in. "Log in is required to perform that action" popup is no longer seen
when viewing file diffs unauthenticated.
* [Issue 16038](https://crbug.com/gerrit/16038):
Fix "internal error" when pushing to refs/users/xx/xxxx
Push over HTTP to refs/users/* branch now works and doesn't fail with "error: internal error" / Not Signed In
* [Issue 16001](https://crbug.com/gerrit/16001):
AsciiDoctor: skip attribute when looking for title
Fix documentation search showing :linkattrs: instead of the document title
* [Issue 15134](https://crbug.com/gerrit/15134):
Apply the match operator to filter projects
Next-arrow is now not hidden when searching for repositories in the Repository section
* [Change 337474](https://gerrit-review.googlesource.com/337474):
Use sane value for QueryProcessor's effective limit on "--no-limit"
Fix errors seen when --no-limit query option is used with ES index backend
* [Change 339754](https://gerrit-review.googlesource.com/339754):
Fix gerrit review command with branch option
The gerrit review command was not able to find the commit with branch
option; ensure "refs/heads/" prefix is present for branch option.
* [Issue 16106](https://crbug.com/gerrit/16106):
Fix label operator to work with external groups, which never worked before since
its addition in v2.10.
* [Change 331762](https://gerrit-review.googlesource.com/331762):
Cache permission filtering for All-Projects, allowing a faster ACL evaluation
to any refs.
* [Change 343694](https://gerrit-review.googlesource.com/343694):
Improve performance of queries that check the visibility of changes wrt a non-current user
* [Change 346254](https://gerrit-review.googlesource.com/346254):
Fix change queries evaluation of `AND` terms to run match on predicate whose cost is
least
Sort the change queries predicates in `AND` based on cost and cardinality, which
was broken since [Change 79391]().
**WARNING**: queries containing predicates with poorly defined costs or cardinalities
could perform worse now.
* Dependency Updates
* Update JGit to 035e0e23f251fdb766a6630509bcf342efb8b3ad, including the following fixes
and improvements:
* 011c26ff3 - Fix connection leak for smart http connections
* d67ac798f - Remove stray files (probes or lock files) created by background threads
* 035e0e23f - UploadPack: don't prematurely terminate timer in case of error
* 66ace4b9a - UploadPack: do not check reachability of visible SHA1s
* 8984e1f66 HTTP Smart: set correct HTTP status on error
* Update SSHD to 2.8.0, including the following fixes and improvements:
* [SSHD-1163](https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1163):
Wrong server key signature algorithm chosen in DH group key exchange
* [SSHD-1197](https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1197):
A race condition in key exchange fixed.
* [SSHD-1216](https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1216):
Server-side implementation of the RFC 8332 server-sig-algs
extension: the server announces that it prefers the SHA-2 signatures
for RSA keys.
Additionally, SSHD 2.8.0 now supports (and prefers) the
chacha20-poly1305@openssh.com cipher ([SSHD-1017](https://issues.apache.org/jira/projects/SSHD/issues/SSHD-1017)),
and supports the curve25519 and curve448 KEX algorithms
([SSHD-704](https://issues.apache.org/jira/projects/SSHD/issues/SSHD-704)).
* Documentation fixes
* [Change 340534](https://gerrit-review.googlesource.com/340534)
Fix link to change.mergeabilityComputationBehavior in user-search.txt
* [Change 339235](https://gerrit-review.googlesource.com/339235)
Add copy-approvals SSH command link to the index page
* [Change 338949](https://gerrit-review.googlesource.com/338949)
Fix auto-generated documentation header for plugins
* [Change 337835](https://gerrit-review.googlesource.com/337835)
rest-api-projects: Fix documentation for #inherited-boolean-info
* Other Fixes
* [Change 337835](https://gerrit-review.googlesource.com/337835):
rest-api-projects: Fix documentation for #inherited-boolean-info
* [Change 340245](https://gerrit-review.googlesource.com/340245)
Propagate auto flush value to external index module
* [Change 340534](https://gerrit-review.googlesource.com/340534):
Fix link to change.mergeabilityComputationBehavior in user-search.txt
### 3.5.2
* Important Notes
This version is a mandatory update before migrating further to v3.6.0.
The following two improvements are available to support the future upgrades:
* [Change 336883](https://gerrit-review.googlesource.com/336883):
Make the NoteDb parsing code accept the new label format that is introduced in Gerrit v3.6.0.
* [Change 337697](https://gerrit-review.googlesource.com/337697):
Introduce [copy-approvals](https://gerrit-documentation.storage.googleapis.com/Documentation/3.5.2/cmd-copy-approvals.html)
SSH command for copying votes to the latest patch-sets online
* [Change 337308](https://gerrit-review.googlesource.com/337308):
Introduce `copy-approvals` site program for copying votes to the latest patch-sets offline
> **NOTE**: The execution of the `copy-approvals` SSH command (online) or the `java -jar gerrit.war copy-approvals`
> site command (offline) may take a long time to complete due to the full scanning of all projects.
* New Features
* [Change 337231](https://gerrit-review.googlesource.com/337231):
Expose proto package in plugin API, allowing to reuse the runtime libraries included in Gerrit
* Bug Fixes
* [Change 335705](https://gerrit-review.googlesource.com/335705):
Fix bazel build on Mac M1 (aarch64)
* [Change 334762](https://gerrit-review.googlesource.com/334762):
Use original javax.servlet-api instead of tomcat's copy
* [Change 334299](https://gerrit-review.googlesource.com/334299):
Reject invalid queries with status code 400 on `POST /accounts/<account-identifier>/watched.projects`
* [Issue 14109](https://crbug.com/gerrit/14109):
Fix NPE with cherry pick REST-API onto an existing change in a different branch
* [Issue 15887](https://crbug.com/gerrit/15887):
Fix the auto-complete on the Gerrit search box
* [Issue 15889](https://crbug.com/gerrit/15889):
Remove spams of "Logging context is not empty" in Gerrit's error_log
* [Issue 15531](https://crbug.com/gerrit/15531):
Disable tracing.performanceLogging by default because of increase of memory footprint
* [Change 335194](https://gerrit-review.googlesource.com/335194):
Fix threading issue in diff cache which caused sporadic Zlib exception making it look like
the pack file was currupted
* Dependency Updates
* Update rules_nodejs version to 5.1.0.
* Update JGit to 78c9b9260a5287d09c87b407e396021590714513.
### 3.5.1
* Security Fixes
* [Change 333304](https://gerrit-review.googlesource.com/333304):
Ignore `--no-limit` query changes option for anonymous users
Prevent the use of `no-limit` option with query changes REST API.
The option can result in excessive resources usage make Gerrit subject
to DoS and DDoS by any remote endpoint without the need to have any
Gerrit account or signing in.
* Breaking changes
* [Issue 15589](https://crbug.com/gerrit/15589):
Add SHA-1 hash variable to gitweb file links
This change necessitates a Gitiles plugin update to
[v3.5.1](https://gerrit.googlesource.com/plugins/gitiles/+/refs/tags/v3.5.1).
* Docker Images
* [Change 329639](https://gerrit-review.googlesource.com/329639):
CentOS 8 AppStream has disappeared: use AlmaLinux 8.5 as replacement for Gerrit image
* Bug Fixes
* [Issue 14945](https://crbug.com/gerrit/14945):
Account cache is not caching the access to the account data refs
Account cache in Gerrit v3.5 does not cache the access to the All-Users.git
repository because of the refactoring of the cache key, which requires lookup
of the All-Users.git refs. Gerrit allows now the refs in-memory caching using
the [cached-refs](https://gerrit.googlesource.com/modules/cached-refdb) libModule.
* [Issue 14912](https://crbug.com/gerrit/14912):
Fix lost watch notifications when attention-set-only is configured
* [Issue 15407](https://crbug.com/gerrit/15407):
MultiBaseLocalDiskRepositoryManager cannot be overloaded by libModules
Allow the replacement of multi-base git repositories through libModules, which
wasn't possible before. Allow to use multi-base git repositories with the
[multi-site](https://gerrit.googlesource.com/plugins/multi-site/) plugin and the
[cached-refs](https://gerrit.googlesource.com/modules/cached-refdb) libModule
* [Issue 15500](https://crbug.com/gerrit/15500):
Fix java.util.IllegalFormatArgumentIndexException on Java 17 in
MergeUtil#mergeWithConflicts
* [Issue 15531](https://crbug.com/gerrit/15531):
Disable performance metrics by default.
Performance metrics were introduced in 3.5.
This caused, for example when upgrading from 3.4 to 3.5,
a 10X increase of metrics, from thousands to tens of thousands.
Disabling it by default to avoid an unexpected 10X increase
of metrics payload, which could lead to an increase of latency
when returning it.
* [Issue 15590](https://crbug.com/gerrit/15590):
Fix SLF4J binding to Reload4J
Use Reload4J-specific binding for SLF4J, fixing the broken MDC
since the swap of Log4J with Reload4J done in
[Change 328081](https://gerrit-review.googlesource.com/c/gerrit/+/328081).
* [Change 330359](https://gerrit-review.googlesource.com/c/gerrit/+/330359):
Fix gerrit ls-members --recursive
Fix a regression introduced with
[Change 134334](https://gerrit-review.googlesource.com/c/gerrit/+/134334)
that caused it to ignore the --recursive flag.
* [Change 327950](https://gerrit-review.googlesource.com/c/gerrit/+/327950):
PrologRuleEvaluator: Fix endless loop on type error
* [Change 330579](https://gerrit-review.googlesource.com/c/gerrit/+/330579):
Restore transition support for cache-automerge refs which point to a tree
Versions of Gerrit older than v2.13 may have cache-automerge refs
which point to a tree. These older refs are not considered valid by
AutoMerger, but are not removed or invalidated.
* [Change 331379](https://gerrit-review.googlesource.com/c/gerrit/+/331379):
Improve performance in ACL permissions evaluation by computing project state only when needed
* [Change 331639](https://gerrit-review.googlesource.com/c/gerrit/+/331639):
Memoize compiled ref pattern in project cache, known to be expensive
* [Change 331762](https://gerrit-review.googlesource.com/c/gerrit/+/331762):
Cache permission filtering for All-Projects
* [Change 331763](https://gerrit-review.googlesource.com/c/gerrit/+/331763):
Move ordering of the project access section to the cached value creation for better performance
* Documentation Fixes
* [Change 331361](https://gerrit-review.googlesource.com/c/gerrit/+/331361):
Fixup old references to Database in documentation
* [Change 331360](https://gerrit-review.googlesource.com/c/gerrit/+/331360):
Remove leftover receive.changeUpdateThreads references
* [Change 290603](https://gerrit-review.googlesource.com/c/gerrit/+/290603):
Fix gerrit ls-groups flag `-g` in documentation
* Other Fixes
* [Issue 15667](https://crbug.com/gerrit/15667):
Fix Zuul build with obsolete Python 3.5.
* Dependency Updates
* Update SLF4J version to 1.7.36.
* Replace Log4J with reload4j version 1.2.19.