---
title: "Gerrit 3.8.x"
permalink: 3.8.html
hide_sidebar: true
hide_navtoggle: true
toc: true
---

Download: **[3.8.10](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.10.war)**
| [3.8.9](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.9.war)
| [3.8.8](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.8.war)
| [3.8.6](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.6.war)
| [3.8.5](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.5.war)
| [3.8.4](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.4.war)
| [3.8.3](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.3.war)
| [3.8.2](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.2.war)
| [3.8.1](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.1.war)
| [3.8.0](https://gerrit-releases.storage.googleapis.com/gerrit-3.8.0.war)

Documentation: **[3.8.10](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.10/index.html)**
| [3.8.9](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.9/index.html)
| [3.8.8](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.8/index.html)
| [3.8.6](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.6/index.html)
| [3.8.5](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.5/index.html)
| [3.8.4](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.4/index.html)
| [3.8.3](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.3/index.html)
| [3.8.2](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.2/index.html)
| [3.8.1](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.1/index.html)
| [3.8.0](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.0/index.html)

## Release highlights

### Rebase on behalf of the uploader

Rebasing a change from the web UI preserves the uploader for trivial rebases.

This has the advantage that the rebaser is not taking over the change, which is
important when the project is configured to ignore self-approvals of the
uploader, as this allows the reviewer to approve and submit the change, after
doing a rebase.

### Rebase a chain of changes

Allow to atomically rebase a chain of changes.

If the chain is outdated, i.e., there's a change that depends on an old revision
of its parent, the result is the same as individually rebasing all outdated
changes on top of their parent's latest revision.

### Browser Notifications (experimental)

Users can be notified about their attention set in browser. The notifications work
only when Gerrit is open in one of the browser tabs. When users open Gerrit, they
will be asked by a popup to allow desktop notifications on their browser to see them.
If users deny notifications on all sites, there won’t be a popup. But they can change
it in browser settings. The latency to get the notification is up to 5 minutes.

Automatic notifications are enabled by default, but users can turn them off in the
Gerrit user preferences.

See the
[documentation](https://gerrit-review.googlesource.com/Documentation/user-attention-set.html#_browser_notifications)
for more details.

This feature can be enabled in `gerrit.config` by adding this configuration:

```sh
[experiments]
    enabled = UiFeature__push_notifications
```

### Edit URL

Users can create a change and open a file for edit in that change using an Edit
URL. This enables other tools to provide a URL that directly opens an edit of
specific files.

See the
[documentation](https://gerrit-review.googlesource.com/Documentation/user-inline-edit.html#create_from_url)
for more details.

## Important notes

### Schema and index changes

This release doesn't contain schema changes.

The `changes` index version has been increased to version _82_.

### Online index schema upgrade from 3.7
By default, if you're upgrading from 3.7, the index is automatically
rebuilt upon Gerrit startup after the upgrade.

If you're upgrading from 3.6 or an earlier version, you must use the
Offline upgrade steps below.

### Offline upgrade

1. Download the new gerrit.war
2. Stop Gerrit
3. Ensure all installed plugins are compatible with the new API
4. Run init
   ```sh
    java -jar gerrit.war init -d site_path --batch
   ```
5. Reindex
  * If you are upgrading from a 3.7 version you don't need to run reindex (see
     `Online index schema upgrade from 3.7` above). If you still want to you will
     only need to run reindex of `changes`:
     ```sh
        java -jar gerrit.war reindex --index changes -d site_path
     ```
   * If you are upgrading from a 3.6 version, or an earlier version, you must
     run a reindex of all indexes:
     ```sh
    java -jar gerrit.war reindex -d site_path
     ```
     See
     the [reindex](https://gerrit-documentation.storage.googleapis.com/Documentation/3.8.0/pgm-reindex.html)
     program for other options.
6. Start Gerrit

### Online upgrade with zero-downtime

Gerrit v3.8.x supports zero-downtime upgrade from Gerrit v3.7.2 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 any API.

The zero-downtime upgrade consists of the following steps:

1. Have Gerrit servers running v3.7.2 or later, in high-availability
   configuration, healthy and able to handle the incoming traffic properly.
2. Set `gerrit.experimentalRollingUpgrade` to `true` in `gerrit.config` on both Gerrit primaries.
3. Set one of the Gerrit servers to unhealthy.
4. Shutdown the Gerrit server, update gerrit.war and plugins to v3.8.x and start
   Gerrit again.
5. Verify that the Gerrit server is working properly (e.g. run automated smoke
   tests) and then make it healthy again.
6. Wait for the Gerrit server to start serving traffic normally.
7. Repeat steps 3. to 6. for all the other Gerrit servers.
8. Remove `gerrit.experimentalRollingUpgrade` from `gerrit.config` on both Gerrit primaries.

### Downgrade

Downgrade to any Gerrit v3.7.x release is possible, but requires the
following manual steps:

1. Shutdown all migrated Gerrit v3.8.x servers
2. Update the gerrit.war and plugins to the previous v3.7.x version
3. Run offline change reindexing using the previous gerrit.war version
  ```sh
    java -jar gerrit.war init -d site_path --batch
    java -jar gerrit.war reindex --index changes -d site_path
  ```
4. Startup Gerrit server

### 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 architecture.

* [DockerHub images for arm64|amd64 architectures](https://hub.docker.com/r/gerritcodereview/gerrit/tags?page=1&name=3.8.0)
  * [gerrit:3.8.0-almalinux8](https://hub.docker.com/r/gerritcodereview/gerrit/tags?page=1&name=3.8.0-almalinux8)
    OS base image upgraded to [AlmaLinux 9.1](https://wiki.almalinux.org/release-notes/9.1.html)

  * [gerrit:3.8.0-ubuntu22](https://hub.docker.com/r/gerritcodereview/gerrit/tags?page=1&name=3.8.0-ubuntu22)
    OS base image upgraded to [Ubuntu 22](https://discourse.ubuntu.com/t/jammy-jellyfish-release-notes/24668)

### Update gerrit.reportBugUrl configuration

The issues of the Gerrit Code Review project have been migrated from
Monorail into the new Gerrit Tracker, see announcement at:
https://groups.google.com/g/repo-discuss/c/F4havFh_Bvw/m/D5MsV17yAgAJ

If the [gerrit.reportBugUrl](https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#gerrit.reportBugUrl)
setting on your Gerrit server is pointing to the Gerrit Monorail project, which
is deprecated now, please update the URL to point to the new Gerrit Tracker,
e.g. change https://bugs.chromium.org/p/gerrit/issues/entry?template=Bug+Report
to https://issues.gerritcodereview.com/issues/new.

### Known issues

* [Issue 309098227](https://issues.gerritcodereview.com/issues/309098227) [Change 360646](https://gerrit-review.googlesource.com/360646):
The introduction of a per-request ref cache for better performance may break
the repository consistency

  The addition of a new `core.usePerRequestRefCache` setting, true by
  default, introduced a per request (currently per request thread) ref
  cache, helping reduce the overhead of checking if the packed-refs file
  was outdated. However, in some scenarios, such as multi-site or
  concurrency between `git-receive-pack` and `git-gc`, it may lead to
  split-brain inconsistencies and, in the worst-case scenario, to the
  corruption of the underlying repository.

* [Issue 40015537](https://issues.gerritcodereview.com/issues/40015537):
Gerrit does not render properly the modal dialogs on Safari 15.3, Chrome 36, Edge 78, and Firefox 97
or earlier.

  Gerrit frontend uses the [HTMLDialogElement.showModal](https://developer.mozilla.org/en-US/docs/Web/API/HTMLDialogElement/showModal)
  function, which is not working properly on old browsers.

* [Issue 380898784](https://issues.gerritcodereview.com/issues/380898784):
The new `changes_by_project` cache will make the `git-upload-pack` fail intermittently
on projects containing one or more inconsistent changes.

  The introduction of the `changes_by_project` cache is incompatible with projects
  having one or more inconsistent changes, like changes with /meta refs coming from
  unexpected Gerrit serverId.
  The cache makes the `git-upload-pack` fail intermittently
  with internal server errors when it fails to load the change meta-data depending
  on the status of the cache.
  As a workaround, disable the `changes_by_project` cache as follows in `gerrit.config`:
  ```
  [cache "changes_by_project"]
        memoryLimit = 0
  ```

### Breaking changes

* [Change 365595](https://gerrit-review.googlesource.com/365595):
WebLinkInfo: Drop deprecated constructor

  Custom UI plugins that are explicitly using `WebLinkInfo` are affected by this
  and might need adapting.

* [Change 360756](https://gerrit-review.googlesource.com/360756):
Disallow uploading new prolog rules files.

    Clients should use submit-requirements instead. Please note that
    modifications and deletions of existing rules.pl files are still
    allowed.

* [Change 360054](https://gerrit-review.googlesource.com/360054):
Allow callers to format create change response

    Add `ListChangeOptions` to `ChangeInput` and `ApplyPatchPatchSetInput` such that
    callers can control what fields should be formatted in the returned ChangeInfo.
    For ApplyPatch, this commit changes the default formatting options from
    `CURRENT_COMMIT` to `no-options`.

* [Change 360219](https://gerrit-review.googlesource.com/360219):
Delete vote now fails for an already deleted vote

  An e-mail was sent each time when a vote was executed, even if the label had
  been already set to 0 and thus no actual changes were made.

  This fix can break some scenarios, where the caller expects that DeleteVoteOp
  will always succeed after the label was added at least once. This should be
  fixed on the caller side.

* [Change 358975](https://gerrit-review.googlesource.com/358975):
Skip account visibility checks when querying changes

  Skipping the account visibility check when querying changes of users
  participating in the change (the change owner, reviewers, CCs etc.). This
  affects several search predicates: `owner` / `uploader` / `label`
  + `user` / `reviewer` / `attention`
    / `commentby`

* [Change 358954](https://gerrit-review.googlesource.com/358954):
Check permissions when resolving accounts by secondary emails

  fixed an issue that allowed users to resolve secondary emails, although they
  should not have been able to see them.

* [Change 358114](https://gerrit-review.googlesource.com/358114):
removed automatic linkification of URLs that do not start with `http://` or
  `https://`.

* [Change 357298](https://gerrit-review.googlesource.com/357298):
Removed Assignee functionality in Gerrit.

  'Assignee' functionality has been superseded by 'Attention Set'. The
  functionality has no Web UI support anymore.

* [Change 357276](https://gerrit-review.googlesource.com/357276):
Removed option to disable Attention Set

  No longer support the option of disabling the Attention Set.

* [Change 356941](https://gerrit-review.googlesource.com/356941):
Do not set `real_author` in ChangeMessageInfo if `author` == `real_author`

  It's not needed to return the author twice if the change message was not
  impersonated. Documentation already stated this, but clients should double check
  they don't rely on `real_author` always being returned.

* [Change 354916](https://gerrit-review.googlesource.com/354916):
Remove registerStyleModule() plugin API

  Use `plugin.styleApi().insertCSSRule()` instead.

* [Change 351814](https://gerrit-review.googlesource.com/351814):
Remove `notify()` from AnnotationPluginApi

* [Change 351515](https://gerrit-review.googlesource.com/351515):
Remove html commentlink functionality.

  Html commentlinks allow for arbitrary html injection on the page. Replaced
  them with link commentlinks, using optional `prefix`, `suffix`, `text`
  parameters to achieve the same functionality. Existing configs can be migrated
  using scripts in `tools/migration/html_to_link_commentlink.md`

### Other changes

## Plugin changes

* download-commands:
  * [Change 365142](https://gerrit-review.googlesource.com/365142):
    Only chmod if commit-msg hook was fetched successfully
  * [Change 362879](https://gerrit-review.googlesource.com/362879):
    Allow to hide download schemes in the UI
  * [Change 359976](https://gerrit-review.googlesource.com/359976):
    Consistently use `git rev-parse` to find hooks-dir
  * [Change 359823](https://gerrit-review.googlesource.com/359823):
    Always use HTTP when downloading commit-msg hook
* reviewnotes:
  * [Change 365655](https://gerrit-review.googlesource.com/365655):
    Add comment count to review notes.
* webhooks:
  * [Change 365175](https://gerrit-review.googlesource.com/365175):
    Add HTTP response code 'SC_ACCEPTED' (202) as success case in response handler
* codemirror-editor:
  * [Change 361395](https://gerrit-review.googlesource.com/361395):
    Add support for dark mode
  * [Change 363002](https://gerrit-review.googlesource.com/363002):
    Add support for light mode
  * [Change 360836](https://gerrit-review.googlesource.com/360836):
    Update CodeMirror to V6
* gitiles:
  * [Change 356473](https://gerrit-review.googlesource.com/356473):
    * Update gitiles to 1.1.0. [Changelog](https://gerrit.googlesource.com/gitiles/+log/v1.0.0..v1.1.0?no-merges)
    * Update commonmark to 0.21.0. [Changelog](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.10.0...commonmark-parent-0.21.0)
  * [Change 347214](https://gerrit-review.googlesource.com/347214):
    Don't depend on update ACL to create a branch

* replication:
  * [Change 353294](https://gerrit-review.googlesource.com/353294):
    Provide an option to skip replication of NoteDb meta refs

    Replicating NoteDb meta refs is not needed when the remote does not run a
    Gerrit instance. This can be now disabled
    via `remote.<NAME>.replicateNoteDbMetaRefs`

## Performance changes

* [Change 360646](https://gerrit-review.googlesource.com/360646):
Introduce a per request ref cache for better performance

  Add a new `core.usePerRequestRefCache` setting. If the setting is true, use a
  per request (currently per request thread)
  ref cache. This helps reduce the overhead of checking if the packed-refs file
  is outdated. This setting is true by default.

* [Change 365144](https://gerrit-review.googlesource.com/365144):
Destination queries now use the change index

  `destination` predicate now matches any number of branch names with O(1)
  efficiency.

* [Issue 16072](https://bugs.chromium.org/p/gerrit/issues/detail?id=16072):
Fix "showchange" plugin event being triggered twice on patchset change

* [Change 363074](https://gerrit-review.googlesource.com/363074):
Performance optimization for cold-cache groups

## Gerrit UI changes

* [Change 370995](https://gerrit-review.googlesource.com/370995):
Add comments chips to patchset select

* [Change 361574](https://gerrit-review.googlesource.com/361574):
Add darkMode param to gr-editor-view extension point

* [Change 358179](https://gerrit-review.googlesource.com/358179):
 Add a new endpoint for a profile page

  The goal of this endpoint is to show a new page that's the contributions' page
  of a user.

* [Change 360134](https://gerrit-review.googlesource.com/360134):
Fix "Old Patchset" being displayed on current edits

* [Change 359814](https://gerrit-review.googlesource.com/c/gerrit/+/359814):
User can rebase whole chain from UI.

* [Issue 16545](https://bugs.chromium.org/p/gerrit/issues/detail?id=16545):
Fix issue where using in-line editor to add new files / edit existing files
  didn't show the changes in file list

* [Change 349422](https://gerrit-review.googlesource.com/349422):
Privacy information on settings page

* [Change 354154](https://gerrit-review.googlesource.com/354154):
Enter key selects emoji after ':' is typed

  The previous behavior was that enter wouldn't select emojis until more
  characters were typed after ':'.

* [Change 352682](https://gerrit-review.googlesource.com/352682):
Matching atoms in copy conditions that are posted as change messages are
  highlighted in bold now.

  When a new patch set is created and approvals are copied to the new patch set,
  Gerrit posts a change message to inform about the copied and outdated votes
  together with the corresponding copy condition. Passing and failing atoms in
  the copy condition are now highlighted in bold.

* [Change 351934](https://gerrit-review.googlesource.com/351934)
Comments tab respects special file sorting cases like .h

* [Change 348877](https://gerrit-review.googlesource.com/348877):
Show account hovercard preview on settings page

  Account preview can be displayed in-flow without requiring hovering

* [Change 348794](https://gerrit-review.googlesource.com/348794):
Account chip preview on settings page

  This lets the user see how they will appear to others and what data will
  be public.

* [Change 348536](https://gerrit-review.googlesource.com/348536):
Removed all hardcoded gr-icons.

  All core plugins have been migrated to using Material-based gr-icon which no
  longer need these hardcoded SVGs.

* [Change 353058](https://gerrit-review.googlesource.com/c/gerrit/+/353058)
Add a route and a dialog for creating a change directly from the URL.

## Documentation changes

* [Change 361696](https://gerrit-review.googlesource.com/361696):
Remove prolog rules doc page mention from the index page

    users should use submit-requirements instead of prolog rules

* [Change 348538](https://gerrit-review.googlesource.com/348538):
Improve Polygerrit README

* [Change 340255](https://gerrit-review.googlesource.com/340255):
Add a shortcut to Developer Setup

## JGit changes

* Upgrade jgit to 5ae8d28. Notable changes are:
  - Implement a snapshotting RefDirectory for use in request scope
  - If tryLock fails to get the lock another gc has it
  - Fix GcConcurrentTest#testInterruptGc
  - Don't swallow IOException in GC.PidLock#lock
  - Check if FileLock is valid before using or releasing it
  - Use Java 11 ProcessHandle to get pid of the current process
  - UploadPack: use allow-any-sha1-in-want configuration
  - Acquire file lock "gc.pid" before running gc
  - Fix getPackedRefs to not throw NoSuchFileException
  - Add pack options to preserve and prune old pack files
  - Allow to perform PackedBatchRefUpdate without locking loose refs
  - Document option "core.sha1Implementation" introduced in 59029aec
  - Shortcut during git fetch for avoiding looping through all local refs
  - FetchCommand: fix fetchSubmodules to work on a Ref to a blob
  - Allow the exclusions of refs prefixes from bitmap
  - PackWriterBitmapPreparer: do not include annotated tags in bitmap
  - BatchingProgressMonitor: avoid int overflow when computing percentage
  - Fetch-CLI: add support for shallow
  - Speedup GC listing objects referenced from reflogs
  - Fixes for multi-primary new loose object reads on NFS
  - GC: disable writing commit-graph for shallow repos
  - Introduce core.trustPackedRefsStat config
  - Add TernarySearchTree
  - CommitGraph: teach ObjectReader to get commit-graph
  - PatchApplier: fix handling of last newline in text patch
  - CommitGraph: add commit-graph for FileObjectDatabase
  - IO#readFully: provide overload that fills the full array
  - GC: Write commit-graph files when gc
  - CommitGraph: add core.commitGraph config
  - CommitGraph: implement commit-graph read
  - Gc#deleteOrphans: avoid dependence on PackExt alphabetical ordering
  - WalkPushConnection: Sanitize paths given to transports
  - Fix documentation for core.trustFolderStat
  - Update jetty to 10.0.13  d
  - PackExt: Add a commit graph extension.
  - UploadPackServlet#doPost use try-with-resource to ensure up is closed
  - Update Apache Mina SSHD to 2.9.2
  - Fix crashes on rare combination of file names
  - DfsBlockCache: Report IndexEventConsumer metrics for reverse indexes.
  - DfsStreamKey: Replace ForReverseIndex to separate metrics.
  - RawText.isBinary(): handle complete buffer correctly
  - PackExt: Add a reverse index extension.

## Other dependency changes

* [Change 345774](https://gerrit-review.googlesource.com/345774):
Upgraded bouncycastle to 1.72

* [Change 355597](https://gerrit-review.googlesource.com/355597):
Upgraded commons-codec to 1.15

* [Change 355294](https://gerrit-review.googlesource.com/355294):
Upgraded jsoup to 1.14.3

* [Change 335738](https://gerrit-review.googlesource.com/335738):
Upgrade sshd version to 2.9.2 and mina-core to 2.0.23

* [Change 312716](https://gerrit-review.googlesource.com/312716):
Update Jetty to 9.4.49.v20220914

## Other core changes

* [Change 367654](https://gerrit-review.googlesource.com/367654)
Fixed rebasing chain when a checks refs exists for one of the changes

  Fixed a NPE that might have been thrown when rebasing on changes for which
  a `checks` ref exists.

* [Change 366334](https://gerrit-review.googlesource.com/366334)
Added 'a' as alias for the 'author' search operator

  This follows the example of other aliases, e.g. 'o' for 'owner' or 'r' for '
  reviewer'.

* [Change 365901](https://gerrit-review.googlesource.com/365901)
Added global capability that allows to view secondary emails

  If users have multiple emails only the preferred email is visible to other
  users. Now, with the new `View Secondary Emails`
  global capability it's possible to allow viewing all emails.

* [Change 361460](https://gerrit-review.googlesource.com/361460)
Allow editing commit message from Change-Id: to Link: footer

  This allows to edit the commit message by replacing a valid 'Change-Id:'
  footer for a valid 'Link:' footer.

* [Change 350455](https://gerrit-review.googlesource.com/350455):
Enables transition from LDAP to Google OAuth

  When transitions to Google OAuth from LDAP, if the account exists with the
  same e-mail then the account ID is reused. This allows to have the same user
  history post migration.

* [Change 359974](https://gerrit-review.googlesource.com/359974):
Fixed calculation of insertions and change buckets for change emails

  When computing change email, the number of files, insertions and deletions
  didn't count the commit message for number of files, but for insertions the
  lines from the commit message were counted, which was inconsistent.

* [Change 358115](https://gerrit-review.googlesource.com/358115):
Allow for plugin data directory to be symlinked

* [Change 357648](https://gerrit-review.googlesource.com/357648):
Don't add owner to attention set on merged change if bot re-applies a negative vote

  Bots can no longer re-apply negative votes on merged change, leading to an
  unwanted attention set update.

* [Change 357477](https://gerrit-review.googlesource.com/357477):
Added a new 'uploaderemail:<pattern>' operator for Submit Requirements

  returns true if the uploader's email matches a specific regular expression
  pattern.

* [Change 357474](https://gerrit-review.googlesource.com/357474):
Added a new 'committeremail:<pattern>' operator for Submit Requirements

  returns true if the change committer's email matches a specific regular
  expression pattern.

* [Change 357460](https://gerrit-review.googlesource.com/357460):
Fixed `ownerin/uploaderin` for internal groups that include external groups

  Fixed an issue where the `ownerin` and `uploaderin` predicates were not matching
  correctly for internal groups that include external groups.

* [Change 350034](https://gerrit-review.googlesource.com/350034):
The commit-msg hook respects the scissors marker for the empty message detection.

  When "git commit --cleanup=scissors" the commit-msg hook couldn't detect if
  the commit message is empty properly.

* [Change 357278](https://gerrit-review.googlesource.com/357278):
Fixed parsing of URL parameters that contain a '%' that is not part of an encoded character

  Without this fix users could trigger 500 internal server errors in Gerrit by
  providing invalid strings for URL parameters.

* [Change 356762](https://gerrit-review.googlesource.com/356762):
Added support for rebasing on behalf of the uploader

  Rebasing a change on behalf of the uploader means that the uploader stays
  intact when the reviewer rebases the change.

* [Change 356354](https://gerrit-review.googlesource.com/356354):
Added project permission for removing votes/labels

  For every configured label `My-Name` in the project, there is a
  corresponding permission `removeLabel-My-Name` with a range corresponding to
  the defined values. For these values, the users are permitted to remove
  other users' votes from a change.

* [Change 356260](https://gerrit-review.googlesource.com/356260):
Fixed overriding impersonated votes

  Fix an issue where overriding an impersonated vote for a user A (real user B)
  only worked if the voting values were different. If the voting value was the
  same Gerrit wrongly assumed that the voting was a no-op.

* [Change 355574](https://gerrit-review.googlesource.com/355574):
Added support to remove a non-visible account as a reviewer through the
PostReview REST endpoint

  Fix an issue where, if a visible change had a reviewer whose account was not
  visible, this account could be seen on the change, but the reviewer could not
  be removed.

* [Change 351075](https://gerrit-review.googlesource.com/351075):
Added a REST API to rebase a chain of changes

  A new API `POST /changes/{change-id}/rebase:chain` now allows to rebase an
  ancestry chain of changes.

* [Change 355116](https://gerrit-review.googlesource.com/355116):
Added `prefixsubject` index field (requires index upgrade)

  Similarly to `prefixhashtag` and `prefixtopic` it is not possible to search
  changes by subject prefix (e.g. a bug ID in square brackets).

* [Change 354294](https://gerrit-review.googlesource.com/354294):
Custom git gc-preserve command which can preserve packs for JGit

  Implemented a custom git command "git-gc-preserve" preserving old packs
  to prevent races between git gc running on a large repository
  concurrently to fetch/clone requests.

* [Change 354037](https://gerrit-review.googlesource.com/354037):
Added `subject` index field (requires index upgrade)

  Allow to query changes by subject.

* [Change 353674](https://gerrit-review.googlesource.com/353674):
Invalid label ranges for permissions are rejected when pushing a project.config file

  Attempting to add permissions with a range where `min` is greater than `max`,
  where `min` is present but `max` is missing or vice-versa throws
  an `IllegalArgumentException`.

* [Change 353635](https://gerrit-review.googlesource.com/353635):
Set Access REST endpoint rejects invalid label ranges

* [Change 353655](https://gerrit-review.googlesource.com/353655):
Do not add a duplicated project.config entry if a duplicate input is added.

  When the same request was made to the 'Set Access' project rest endpoint, it
  resulted in adding a duplicated line in the project.config.

* [Change 353287](https://gerrit-review.googlesource.com/353287):
Votes that are copied to follow-up patch sets when a vote on an outdated patch
  set is applied are now posted as a change message.

  When votes were copied to follow-up patch sets they were applied in NoteDb, but
  users were not informed about them. Now a change message is posted to inform
  that the vote was copied forward.

* [Change 352055](https://gerrit-review.googlesource.com/352055):
Reject invalid base on push with proper error message instead of failing with
  an internal server error

* [Change 352034](https://gerrit-review.googlesource.com/352034):
Fix GetRelated if multiple changes for the same commit exist

* [Change 351534](https://gerrit-review.googlesource.com/351534):
Fix the issue that 404 page is shown after login

  After logging in using the "Sign in with a Launchpad ID" link Gerrit used to
  display a "not found" page.

* [Change 351614](https://gerrit-review.googlesource.com/351614):
Do not require trailing slash for requests on root collections

  Often users are confused why 'GET /changes/' works, but 'GET /changes' doesn't.
  Both are now allowed.

* [Change 347719](https://gerrit-review.googlesource.com/347719):
Suppressing emails on submit is disallowed now if there is a post approval diff

  Fixes a security issue where a malicious user could submit code changes
  without anyone ever seeing them. If a change is submitted and a post approval
  diff exists, no matter which notify setting the caller specified, Notify=ALL
  is used.

* [Change 351114](https://gerrit-review.googlesource.com/351114):
Add support for enabling Strict Dynamic CSP on Documentation pages.

* [Change 349175](https://gerrit-review.googlesource.com/349175):
Disallow 'cansee' account search operator with private changes

  This operator used to fail for private changes if the change owner requested
  `cansee:<private_change>`. Now, if the caller of the query is the owner or one
  of the reviewers/ccs of the change, the query returns account data for it.

* [Change 349216](https://gerrit-review.googlesource.com/349216):
Add a `has:submodule-updates` operator for submit requirements

  Returns true if the diff of the latest patchset against the default base has a
  submodule modified file

* [Change 347936](https://gerrit-review.googlesource.com/347936):
Reject uploading project config changes if they contain duplicate submit
  requirement definitions.

  Prevent project owners and admins from accidentally adding multiple definitions
  for the same submit requirement name.

* [Change 246234](https://gerrit-review.googlesource.com/246234):
The WorkQueue now uses new STARTING and STOPPING states while a listener's
  onStart() and onStop() methods are called.

* [Change 346954](https://gerrit-review.googlesource.com/346954):
Log progress for online-reindexing of changes

  When performing online reindexing, from the log file we could only observe
  when it starts and when it ends. With this change we log the progress once per
  minute.

* [Change 340061](https://gerrit-review.googlesource.com/340061):
Add old/new file modes to the 'List Files' diff endpoint

  if a file is modified with a change to the file mode only, now the file will be
  listed as modified.

* [Change 245614](https://gerrit-review.googlesource.com/245614):
Added a WorkQueue.TaskListener extension for plugins

  This extension point makes it possible for plugins to define and implement
  WorkQueue QOS policies.

## Bugfix releases

### 3.8.10

* Plugin changes

  * Replication plugin updated to `5cfb07aa0e1e133a066ae81951b8e156d7dfd4e4`:

  ```shell
  git log --oneline 584aea1a8968a9162d78460422a285a87910f502..5cfb07aa0e1e133a066ae81951b8e156d7dfd4e4
  ```

  * `5cfb07a` Fixed chance for exceptions to block future distributor runs.
    Fixed an issue where exceptions during task accumulation could cause the replaying flag to
    become stuck, potentially blocking future distributor runs.

### 3.8.9

* Security Fixes

  * [Issue 362780339](https://gerrit-review.googlesource.com/c/gerrit/+/436597):
  Don't allow CORS for plugin's static/doc resources by default.

* Performance fixes

  * [Change 438141](https://gerrit-review.googlesource.com/438141):
  Queries with multiple non-index datasource predicates are re-written correctly

    Improved query handling to make searches with multiple filters (that aren’t indexed) faster
    and more reliable, preventing slowdowns and potential failures with large data sets.

* Bug Fixes

  * [Issue 368553867](https://gerrit-review.googlesource.com/438705):
  Fix support for a number of groups higher than the `index.maxTerms`

* JGit changes

  * [Change 437301](https://gerrit-review.googlesource.com/c/gerrit/+/437301) and
    [Change 438081](https://gerrit-review.googlesource.com/c/gerrit/+/438081):
  Update JGit to 1cd87ab790

    You can retrieve the full list of changes with:

    ```shell
    git log --no-merges --format=oneline cfdfb01f4..1cd87ab790
    ```

    Notable changes are:

    * 56a5db65b AdvertisedRequestValidator: fix WantNotValidException caused by race
    * 692ccfc0c AmazonS3: Ensure SAXParserFactory sets valid/expected input params
    * d66175d7d LockFile: Retry lock creation if parent dirs were removed

### 3.8.8

* Enhancements

  * [Change 429477](https://gerrit-review.googlesource.com/429477):
  Update Material Icons, as they were last updated in 2022 and some icons were missing,
  like the `expand_circle_up`.

  * [Change 399237](https://gerrit-review.googlesource.com/399237):
  Improved WorkQueue task thread names.

* Bug Fixes

  * [Issue 346618790](https://issues.gerritcodereview.com/issues/346618790):
  Fix reload of plugins causing incorrect deregistration of dynamic items.

  * [Issue 344608194](https://issues.gerritcodereview.com/issues/344608194):
  Only suggest hashtags for those matching the input, including also regular
  expressions.

  * [Issue 343218480](https://issues.gerritcodereview.com/issues/343218480):
  Fix translation of custom Prolog rules SubmitRecord to SubmitRequirement(s).

* Security Fixes

  * [Change 431197](https://gerrit-review.googlesource.com/431197):
  Use constant-time comparison for hashed password validation, for increased security.

* Performance fixes

  * [Change 431017](https://gerrit-review.googlesource.com/431017):
  Re-use revwalk for loading ChangeKindCache.

  * [Change 431037](https://gerrit-review.googlesource.com/431037):
  Stop calling `addPatchSets()` twice call when populating change query result.

  * [Change 431039](https://gerrit-review.googlesource.com/431039):
  Lazy load labelTypes when populating change query result.

  * [Change 431040](https://gerrit-review.googlesource.com/431040):
  Reduce duplicate work when a caller uses both `--patch-sets` and  `--current-patch-set`
  in change query.

  * [Change 431018](https://gerrit-review.googlesource.com/431018):
  Clone `PatchSetAttribute` for `currentPatchSet` when populating change query result.

    if both `--patch-sets` and `--current-patch-set` are given, populate the
    `patchSetAttribute` for `currentPatchSet` using the fields already populated
    or all patch sets.

* Documentation Fixes

  * [Issue 352081004](https://issues.gerritcodereview.com/issues/352081004):
  Clarify that comment links work on html-escaped text.

  * [Change 433917](https://gerrit-review.googlesource.com/433917):
  Add warning about choosing Windows as server-side platform for running Gerrit.

  * [Change 430957](https://gerrit-review.googlesource.com/430957):
  Update `prolog-cookbook` documentation mentioning that adding a new `rules.pl` will
  result in a warning.

  * [Change 424997](https://gerrit-review.googlesource.com/424997):
  Fix name of `Gerrit-Has-Labels` email footer in documentation.

* Plugin changes

  * `replication` updated to 584aea1a

    You can retrieve the full list of changes with:

    ```shell
    git log --no-merges --format=oneline 8fd3c27..584aea1a
    ```

    notable changes are:

    * [Change 384754](https://gerrit-review.googlesource.com/c/plugins/replication/+/384754):
    Avoid opportunity to inadvertently block the distributor.

    * [Change 383694](https://gerrit-review.googlesource.com/c/plugins/replication/+/383694):
    Reduced log level for Task deletion errors in MP setups.

    * [Change 352174](https://gerrit-review.googlesource.com/c/plugins/replication/+/352174):
    Reduced log level for no-op distributor push consolidations.

* JGit changes

  * [Change 433257](https://gerrit-review.googlesource.com/c/gerrit/+/433257) and
    [Change 432237](https://gerrit-review.googlesource.com/c/gerrit/+/432237):
    Update JGit to cfdfb01f4

    You can retrieve the full list of changes with:

    ```shell
    git log --no-merges --format=oneline c0b415fb0..cfdfb01f4
    ```

    notable changes are:

    * cfdfb01f4 RepoProject: read the 'dest-branch' attribute of a project
    * 4bc6eb8a7 RepoCommand: Add error to ManifestErrorException
    * 784f0baec RepoCommand: Copy manifest upstream into .gitmodules ref field
    * e55341115 RepoProject: read the "upstream" attribute of a project
    * c0c59ccf2 PatchApplier: Set a boolean on the result if conflict markers were added
    * cac835835 WalkFetchConnection: Remove marked packs on all function exits
    * 6e9a17036 Allow applying a patch with conflicts
    * 28c3ae172 sshd: fix IdentiesOnly if SSH agent is enabled and has keys
    * c1f95130c Check an execution bit by reading it from the file system
    * 567315af5 ResolveMerger: Fix the issue with binary modify-modify conflicts
    * e4b4f063b MergeAlgorithm: Fix diff3 conflict hunk computation
    * d24eee7d5 [gpg] Correct finding public keys from pubring.gpg
    * ed8c394eb [gpg] Fix reading ed25519 GPG keys

### 3.8.7 (Withdrawn)

### 3.8.6

* Enhancements

  * [Change 424957](https://gerrit-review.googlesource.com/c/gerrit/+/424957):
  Emails notifications for comments now mention who owns the change

    When receiving the email, knowing the change owner helps the receiver prioritize
    their reviews.

  * [Issue 325309573](https://issues.gerritcodereview.com/issues/325309573):
  Add `virtual_id_number` to `ChangeInfo`.

    Introduces `virtualId` to change data to avoid clashes when starring changes
    imported from foreign server ids.

* Bug Fixes

  * [Issue 338826950](https://issues.gerritcodereview.com/issues/338826950):
  Fix NPE during git clone

  * [Change 423800](https://gerrit-review.googlesource.com/c/gerrit/+/423800):
  Removed missed reference to assignee config in docs

  * [Change 423378](https://gerrit-review.googlesource.com/c/gerrit/+/423378):
  gr-main-header: fix header to wrap the better

  * [Issue 335613081](https://issues.gerritcodereview.com/issues/335613081):
  Fix clearing cache in gr-rest-api

  * [Change 420357](https://gerrit-review.googlesource.com/c/gerrit/+/420357):
  Fix buttons on header disappearing

* Plugin changes

   * codemirror-editor updated to: 6f916580c3f26ecfd9b2a10d96cb1c0530103bc6

### 3.8.5

* Security Fixes

  * [Issue 321784734](https://gerrit-review.googlesource.com/q/bug:321784734):
  Fix endless loop when using "is:watched" in project watches.

    Previous setting up email notification with `is:watched` predicate would
    create an infinite loop that would take a CPU offline.

* Breaking changes

  * [Issue 330758152](https://issues.gerritcodereview.com/issues/330758152):
  Validate and reject SSH keys with invalid or mismatched algorithm

    Verify that the OpenSSH key algorithm matches the one associated with the
    public key. Throw a new specific InvalidKeyAlgorithmException if the two
    algorithms do not match.

    Make SshKeyCacheImpl tolerant to existing keys stored in the accounts'
    profile, otherwise Gerrit may start flagging keys that have been previously
    stored as invalid, resulting in random authentication failures by existing
    users.

    Existing invalid keys are reported in the error_log with the associated
    exceptions and automatically fixed, removing the invalid key from the accounts
    profile and adjusting the key algorithm with the one associated with the public
    key.

* Bug Fixes

  * [Issue 330195358](https://issues.gerritcodereview.com/issues/330195358):
  Fix paginationType NONE to stop querying when there are no more results

  * [Change 416560](https://gerrit-review.googlesource.com/c/gerrit/+/416560):
  Ensure that clearing reviewed flags is performed on correct change when it
  is imported from another instance

  * [Issue 325309573](https://issues.gerritcodereview.com/issues/325309573):
  Prevent starred changes clashes between local and imported changes having
  the same change number.

  * [Issue 325309574](https://issues.gerritcodereview.com/issues/3253095744):
  Assign draft comments to the correct change when there is ambiguity due to
  imported changes having the same change number.

  * [Change 411279](https://gerrit-review.googlesource.com/c/gerrit/+/411279):
  Fix change staleness check for changes with drafts and stars

  * [Issue 325821304](https://issues.gerritcodereview.com/issues/325821304):
  Fix change id parsing in SSH commands

    SSH commands did not support anything but simply the change number as
    change id. They are now able to interpret all the standard format of
    changeIds like project~changeNumber.

  * [Issue 40014889](https://issues.gerritcodereview.com/issues/40014889):
  Fix WIP changes being always considered as in conflict.

  * [Issue 328958027](https://issues.gerritcodereview.com/issues/328958027):
  Fix NONE paginationType filtering of changes

  Addresses visibility filter issues when paginationType is NONE.

* JGit changes

  * [Change 415557](https://gerrit-review.googlesource.com/c/gerrit/+/415557):
    Update JGit to c0b415fb0

    * 21f7fdff7 Introduce core.trustLooseRefStat config
    * a44b9e8bf Support public key in IdentityFile
    * 906c2bebe RebaseCommand: fix stopping on root commit conflicts
    * 788487316 BasePackFetchConnection: Skip object/ref lookups if local repo is empty
    * faa50c683 LooseObjects: Use File#exists when possible
    * ab132937f FooterLine: Protect from ill-formed message
    * 5e563e1ba PackWriter: store the objects with bitmaps in the statistics
    * 340cc787a Improve footer parsing to allow multiline footers.
    * aab75dba7 BitmapIndex: Add interface to track bitmaps found (or not)
    * 3937300f3 Optimise Git protocol v2 `ref-prefix` scanning
    * 5f563e386 UploadPack: use want-refs as advertised set in fetch v2
    * 093bde518 BasePackFetchConnection: Avoid full clone with useNegotiationTip
    * f103a1d5c Add support for git config repack.packKeptObjects
    * f5f4bf0ad Do not exclude objects in locked packs from bitmap processing
    * fb51a2234 Document commit-graph options supported by JGit
    * e29834a77 Fix some tests in ConfigTest
    * e7a09e316 Introduce core.packedIndexGitUseStrongRefs config key
    * 551ca93cc DfsGarbageCollector: provide commit graph stats
    * 6f7333693 DfsGarbageCollector: put only GC commits into the commit graph
    * b4b8f05ee DfsReader: Expose when indices are loaded
    * 462c57ec8 Merge: Add diff3 style merge conflict formatter.
    * f196c7a0e Pack: open reverse index from file if present
    * db08835c6 GC: Remove handling of extra pack for RefTree
    * ac8d7838f GC: prune all packfiles after the loosen phase
    * 6b3b2b33a GraphObjectIndex: fix search in findGraphPosition
    * 913e6cf3f Switch to Apache MINA sshd 2.10.0
    * d0564cf8a UploadPack: Record negotiation stats on fetchV2 call
    * 8c0c96e0a Support rebasing independent branches
    * 8bc13fb79 Support cherry-picking a root commit
    * 032eef5b1 Parse pull.rebase=preserve as alias for pull.rebase=merges
    * 96d9e3eb1 Prevent infinite loop rescanning the pack list on PackMismatchException
    * e06ce5960 Add protocol configuration to Amazon S3 transport
    * 060dcf1cc ListTagCommand: implement git tag --contains
    * 5cc9ecde8 RevWalk: use generation number to optimize getMergedInto()
    * 23b9693a7 DirCache: support option index.skipHash

### 3.8.4

* Breaking changes

  * [Change 404018](https://gerrit-review.googlesource.com/c/gerrit/+/404018):
  Add option to populate 'starred' field for change queries.

    A `star` option can now be provided to include the `starred` field in
    `ChangeInfo`, which indicates if the change is starred by the current user or not.

* New Features

  * [Change 406237](https://gerrit-review.googlesource.com/c/gerrit/+/406237):
  Add metrics for `git/upload-pack/bitmap_index_misses_count` and a separate one for missing bitmap indexes.

    JGit packer tracks the number of times that an object was not
    found in the bitmap index or if the bitmap index was completely
    missing.
    Added the `git/upload-pack/bitmap_index_misses_count` for being used
    in performance graphs, while the `git/upload-pack/no_bitmap_index`
    should be more suitable for alerts.

  * [Change 406004](https://gerrit-review.googlesource.com/c/gerrit/+/406004):
  Add timer for git/upload-pack/phase_searching_for_* phases.

    Add metrics for the "Finding sources" phase, which is critical for an optimal
    Git/HTTP performance.

  * [Change 402497](https://gerrit-review.googlesource.com/c/gerrit/+/402497):
  Introduce configurable shutdown timeout

    Added `container.shutdownTimeout` to configure the maximum time (in seconds)
    to wait before terminating Gerrit.

  * [Change 404718](https://gerrit-review.googlesource.com/c/gerrit/+/404718):
  Add timer for `git/upload-pack/phase_negotiating`.

    Added the `git/upload-pack/phase_negotiating` so that the Gerrit admin
    can graph how these are performing and spot any potential issues.
    JGit packer tracks time spent in the negotiation phase.
    This statistic was only exposed in the sshd_log and is not available
    when the client uses Git/HTTP.

  * [Change 393037](https://gerrit-review.googlesource.com/c/gerrit/+/393037):
  Bazel: Add support for BuildBuddy RBE provider.

    BuildBuddy provides an open-core suite of enterprise features for Bazel.

* Performance Fixes

  * [Change 392634](https://gerrit-review.googlesource.com/c/gerrit/+/392634):
  Improved performance for conflicts: operator and other mergeability
  checks when submit type is `Merge-If-Necessary`.

* Bug Fixes

  * [Change 395016](https://gerrit-review.googlesource.com/c/gerrit/+/395016)
  Fixed NPE when submitting changes.

  * [Issue 314113030](https://issues.gerritcodereview.com/issues/314113030):
  Fail the change reindex operation upon StorageException(s).

    Allows some of the indexing operations to fail, so that if a change indexing
    throws a `StorageException`, so that the change does not disappear
    from the index.

  * [Change 395741](https://gerrit-review.googlesource.com/c/gerrit/+/395741):
  Fix event parse exception when changing repository HEAD.

    Explicitly registered a type and class for `ProjectHeadUpdatedEvent` in `EventType`
    in order to successfully deserialize events.

  * [Issue 318745940](https://issues.gerritcodereview.com/issues/318745940):
  Fix serverId in identity parsing for imported human comments.

    Remapping of account-ids correctly adapts the comment's author account-ids
    and `serverId` fixing the inconsistent identity of the comments.

  * [Change 404937](https://gerrit-review.googlesource.com/c/gerrit/+/404937):
  Fix copyable change links when base URL has a path.

    Removed extra base URL prefix in `gr-copy-links`. The links are crafted from
    createChangeUrl which already returns an URL with the base URL.

  * [Issue 311925527](https://issues.gerritcodereview.com/issues/311925527):
  Fix canonical web url binding in Git over HTTP.

    Fix a problem encountered in the `virtualhost` plugin, where
    despite proper configuration for tenant canonical web URL, the git push
    output would use the value of `gerrit.canonicalWebUrl` configuration option.

* Dependency Updates

  * [Change 403721](https://gerrit-review.googlesource.com/c/gerrit/+/403721):
  Bump SSHD version to 2.12.0 with security fix for [CVE-2023-48795](https://nvd.nist.gov/vuln/detail/CVE-2023-48795)

* JGit changes

  * [Change 391575](https://gerrit-review.googlesource.com/c/gerrit/+/391575):
  Update JGit to acf21c0bc6a63a3d20fca92757b992a1f2d55f41.

    You can retrieve the full list of changes with:

    ```shell
    git log --no-merges --format=oneline 74fa245b3..acf21c0bc
    ```

    notable changes are:

      * acf21c0bc RefDirectory: Do not unlock until after deleting loose ref
      * 29c89d1f0 SnapshottingRefDirectory: Invalidate snapshot after locking ref for update
      * 747618358 Improve handling of NFS stale handle errors
      * ca54c5176 Fix handling of missing pack index file
      * b4c66104f Introduce a PriorityQueue sorting RevCommits by commit timestamp
      * e712b4716 Make sure ref to prune is in packed refs
      * 170244d05 Checkout: better directory handling
      * 244165fc5 Remove unused API problem filters
      * f103a1d5c Add support for git config repack.packKeptObjects
      * f5f4bf0ad Do not exclude objects in locked packs from bitmap processing
      * 3a6eec9bb Express the explicit intention of creating bitmaps in GC
      * ac8d7838f GC: prune all packfiles after the loosen phase
      * f6928f573 Revert "RefDirectory: Throw exception if CAS of packed ref list fails"
      * 6b3b2b33a GraphObjectIndex: fix search in findGraphPosition
      * 0f7d485bc Remove unused API filters
      * 43954ea62 [releng] API filter for PackIndex.DEFAULT_WRITE_REVERSE_INDEX
      * 2c89a3ec7 PackExt: add a #getTmpExtension method
      * d0564cf8a UploadPack: Record negotiation stats on fetchV2 call
      * ce88e62ed PackWriter: write the PackReverseIndex file

### 3.8.3

* Breaking Changes

  * [Change 383334](https://gerrit-review.googlesource.com/c/gerrit/+/387435):
  `refreshAfterWrite` and `maxAge` settings in gerrit config are now honored for both persistent and in-memory caches.

    Previously these settings were erroneously ignored for persistent caches.
    If you rely on them for persistent caches you should be aware they will be
    honoured now.

* New Features

  * [Change 383334](https://gerrit-review.googlesource.com/c/gerrit/+/383334):
  Allow to set gerrit.instanceID from java system property

    In environments where Gerrit is scaled automatically and which use
    the same static configuration for all instances, e.g. in Kubernetes,
    setting instance specific configuration in the config file is a
    cumbersome process. Instance ID can also be set using the `gerrit.instanceId`
    Java system property, which will override the instance ID in `gerrit.config`.

  * [Change 377699](https://gerrit-review.googlesource.com/c/gerrit/+/377699):
  Allow generating safe local-only documentation, without reference to external fonts in CSS

  * [Change 390658](https://gerrit-review.googlesource.com/c/gerrit/+/390658):
  Allow disable Prolog rules evaluation on closed changes

  * [Change 390614](https://gerrit-review.googlesource.com/c/gerrit/+/390614):
  Allow uploading changes to group refs except changes to group files

  * [Change 389055](https://gerrit-review.googlesource.com/c/gerrit/+/389055):
  Allow operator aliases to be used in submit requirement expressions

  * [Change 386974](https://gerrit-review.googlesource.com/c/gerrit/+/386974):
  SSH set-reviewers cmd now handles lock failures with retries

* Performance Fixes

  * [Change 376094](https://gerrit-review.googlesource.com/c/gerrit/+/376094):
  Introduce new cache `changes_by_project` to speedup git ref advertisements on replica and git-receive-pack on primary

  * [Change 377814](https://gerrit-review.googlesource.com/c/gerrit/+/377814):
  Skip building bloom filters by default speeding up offline reindex

* Security Fixes

  * [Change 389374](https://gerrit-review.googlesource.com/c/gerrit/+/389374):
  Update Jetty to 9.4.53.v20231009 with critical security fixes [CVE-2023-36478](https://nvd.nist.gov/vuln/detail/CVE-2023-36478) and [CVE-2023-44487](https://nvd.nist.gov/vuln/detail/CVE-2023-44487)

* Bug Fixes

  * [Change 394435](https://gerrit-review.googlesource.com/c/gerrit/+/394435):
  Support listing of patch-set files also for imported changes from other Gerrit servers-ids

  * [Issue 301481564](https://issues.gerritcodereview.com/issues/301481564):
  Fix the repository configuration screen remainign stale when switching tabs

  * [Issue 304335624](https://issues.gerritcodereview.com/issues/304335624):
  Fix the changing preferred email resulting in duplicate emails set in cache

  * [Change 388054](https://gerrit-review.googlesource.com/c/gerrit/+/388054):
  Eliminated startup warning for plugins whose SshModule only provides Ssh\*CommandInterceptors

  * [Change 387217](https://gerrit-review.googlesource.com/c/gerrit/+/387217):
  Fixed case where an exception in change visibility checking could break visibility of all refs in that repo

  * [Change 387055](https://gerrit-review.googlesource.com/c/gerrit/+/387055):
  Fix SSH set-topic cmd to consider 'editTopicName' permission

  * [Issue 291102119](https://issues.gerritcodereview.com/issues/291102119)
  Avoid NullPointerException when deleting a single ref

  * [Change 387216](https://gerrit-review.googlesource.com/c/gerrit/+/387216):
  Fixed potential OOM due to SubmitRuleEvaluator creating new metrics whenever an instance was created

  * [Change 387214](https://gerrit-review.googlesource.com/c/gerrit/+/387214):
  Fixed potential OOM due to DefaultRefFilter creating new metrics whenever an instance was created

  * [Change 386976](https://gerrit-review.googlesource.com/c/gerrit/+/386976):
  Fixed potential OOM due to \*QueryProcessor classes creating new metrics whenever an instance was provided

  * [Issue 300976121](https://issues.gerritcodereview.com/issues/300976121):
  Fix NPE when `auth.httpDisplaynameHeader` is configured but header is unset

  * [Change 387054](https://gerrit-review.googlesource.com/c/gerrit/+/387054):
  Fix `force topic edit` permission to consider change owner rule

  * [Change 386994](https://gerrit-review.googlesource.com/c/gerrit/+/386994):
  Fixed InactiveAccountDisconnector NPE due to race condition

  * [Issue 295457464](https://issues.gerritcodereview.com/issues/295457464):
  Fixed SSH query not returning copied approvals on per patchset level

* Documentation Fixes

  * [Change 391858](https://gerrit-review.googlesource.com/c/gerrit/+/391858):
  Document `ChecksApi.updateResult()` in PolyGerrit plugins checks API

  * [Change 391696](https://gerrit-review.googlesource.com/c/gerrit/+/391696):
  Document `check-result-expanded` plugin endpoint in PolyGerrit plugins checks API

  * [Change 388936](https://gerrit-review.googlesource.com/c/gerrit/+/388936):
  Explain in ls-projects SSH API when the "parent" field is "?-N"

  * [Change 388530](https://gerrit-review.googlesource.com/c/gerrit/+/388530):
  Explain in /projects/ REST API when the "parent" field is "?-N"

* Replication Plugin Updates

  * [Change 384754](https://gerrit-review.googlesource.com/c/plugins/replication/+/384754):
  Avoid opportunity to inadvertently block the distributor

  * [Change 383694](https://gerrit-review.googlesource.com/c/plugins/replication/+/383694):
  Reduced log level for Task deletion errors in MP setups

* Dependency Updates

  * Update jgit to 82e277c813398c9f519f16e83d080a94fa29a27c

* Native Packaging

  * [Issue 311414905](https://issues.gerritcodereview.com/issues/311414905):
  Add trailing slash in default `canonicalWebUrl` in Docker containers


### 3.8.2

* New Features

  * [Change 385116](https://gerrit-review.googlesource.com/c/gerrit/+/385116):
  Support Cloud Spanner for AccountPatchReviewStore

* Bug Fixes

  * [Change 380154](https://gerrit-review.googlesource.com/c/gerrit/+/380154):
  Documentation: NOTE on use of sshkeys, and \*projects cache on clusters

    When using the sshkeys, and \*projects caches on a cluster, warn
    the Gerrit admin he should be aware of those caches to be potentially
    stale. The problem can be minimised by either disabling them
    altogether or setting a low value of refreshAfterWrite.

  * [Change 384214](https://gerrit-review.googlesource.com/c/gerrit/+/384214):
  Align Jetty session timeout with Gerrit web_sessions maxAge

    Do not leave Jetty having sessions kept forever but expire
    them with the same timeout of Gerrit sessions.

    Verified E2E that the Jetty sessions expires with the same
    timeout of the web_sessions maxAge value.

  * [Issue 290225204](https://issues.gerritcodereview.com/issues/290225204):
  loginUrl and loginText are hardcoded in the UI

    Gerrit UI ignored the settings in the auth section of the
    configuration [1].

    In particular auth.loginUrl [2] should be used if present and
    auth.type is set to HTTP or HTTP_LDAP.
    Also auth.loginText [3] should be used if auth.loginUrl is set.

    This change backports change 381534 to stable-3.6. We didn't cherry-pick because the code changes significantly and had many conflicts.

    [1]: https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#auth
    [2]: https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#auth.loginUrl
    [3]: https://gerrit-review.googlesource.com/Documentation/config-gerrit.html#auth.loginText

  * [Issue 291102119](https://issues.gerritcodereview.com/issues/291102119):
  Avoid NullPointerException when deleting multiple tags

    To avoid NPE make sure that ref is not read again after checking if
    ref exists. This prevent the issue when other call already removed
    the tag and we try to read it. Proper behaviour is to try to delete it
    and return `Cannot delete refs/tags/...: LOCK_FAILURE` if tag is already
    deleted.

  * [Issue 289505276](https://issues.gerritcodereview.com/issues/289505276):
  Fix for: change can't be submitted if another branch contains exactly the same commit.

  * [Change 380694](https://gerrit-review.googlesource.com/c/gerrit/+/380694):
  Hide Move Change from UI if change.move is set to false

  * [Issue 290641654](https://issues.gerritcodereview.com/issues/290641654):
  Fix bug in API '/projects/*/access:review' ignoring 'message' field

    Fix API endpoint 'CreateAccessChange' '/projects/*/access:review'
    not hounouring 'message' field provided via 'ProjectAccessInput' object despite setting it.
    Add condition to check if message is provided then use it instead of default 'Review access change'

  * [Issue 298846017](https://issues.gerritcodereview.com/issues/298846017):
  Fix admin links that contain the base URL twice

    Fix Gerrit Context paths becoming doubled in Admin View navigation links.

* Plugin Updates

  * [Change 383360](https://gerrit-review.googlesource.com/c/gerrit/+/383360):
  Update webhooks plugin to 1dc0a71883

    This includes the following changes:
    1dc0a71 Add HTTP response code 'SC_ACCEPTED' (202) as success case in response handler
    16110f3 Annotate methods that return a definitely null value with @Nullable
    and fixes:
    [Issue 40015349](https://issues.gerritcodereview.com/issues/40015349) "plugins/webhooks doesn't accept HTTP 202 response code"

### 3.8.1

* Breaking changes

  * [Issue 40015585](https://issues.gerritcodereview.com/issues/40015585):
  Enhance metric name sanitize function to remove collision on '_' between metrics.

    Collision between the sanitized metric names can be easily
    created e.g. `foo_bar` will collide with `foo+bar`. In order
    to avoid collisions keep the rules about slashes and replace not
    supported chars with `_0x[HEX CODE]_` string. The
    replacement prefix `0x` is prepended with another replacement prefix.

* New Features

  * [Change 377794](https://gerrit-review.googlesource.com/c/gerrit/+/377794):
  Extend configurability of index pagination type

    Add NONE option to disable index backend pagination, this option
    needs to be honoured by the indexing backend and this change introduces
    the correct implementation for Lucene.

  * [Change 372974](https://gerrit-review.googlesource.com/c/gerrit/+/372974):
  Don't allow index searches with size greater than maxPageSize

    Queries with a 'start' parameter can perform
    an index search with size greater than the configured maxPageSize,
    i.e. when start + limit exceeds the maxPageSize. Fix such queries
    to paginate instead.

* Bug Fixes

  * [Issue 289321387](https://issues.gerritcodereview.com/issues/289321387):
  Preserve refs order in the GitBatchRefUpdateEvent event

    [Change 335757](https://gerrit-review.googlesource.com/c/gerrit/+/335757)
    introduced the concept of the single event representing batch ref update.
    However this new event did not preserve original order of the updated refs.
    This impacts event consumers behaviour and can cause failures. For example
    if meta ref is processed before patchset ref indexing operation will
    fail because of the missing patchset.

    The timeline of events is kept in the same order they are generated,
    to make sure that refs order is preserved and backward compatibility
    is kept.

  * [Change 378075](https://gerrit-review.googlesource.com/c/gerrit/+/378075):
  Fix links to URLs with nonstandard schemes

    Removed automatic linking of URLs that do not start with `https?://`

  * [Change 377796](https://gerrit-review.googlesource.com/c/gerrit/+/377796):
  Fix imported changes appearing as duplicates in index

    When parsing the change data from ChangeNotes, the in-memory created
    ChangeData contains useful information like the serverId
    that the change belongs to. The same information isn't available when
    reindexing directly from a newly created entity Change which has
    no relationship with the underlying change notes.

  * [Change 340014](https://gerrit-review.googlesource.com/c/gerrit/+/340014):
 Fix identity parsing for imported human comments

    When an account's serverId does not match the one defined in
    gerrit.config, then use the 'imported' external ids in the accounts
    for reverse lookup of the accountId.
    This allows to correctly understand and associate the imported
    changes coming from repositories of other Gerrit servers to
    the correct local accounts.

  * [Issue 40015148](https://issues.gerritcodereview.com/issues/40015148):
  Fix ExternalId differential loading when cache is inconsistent

    Make differential loading idempotent to avoid failures due to retry to
    insert the same entry again, caused by the JGit
    [Issue 582044](https://bugs.eclipse.org/bugs/show_bug.cgi?id=582044).

  * [Issue 40015614](https://issues.gerritcodereview.com/issues/40015614):
  Show correct cherry-picked list for imported changes

    The UI ran the following query to determine
    if a change had been cherry-picked from another branch:
    `project:<projectName> change:<changeID> -change:<changeNum> -is:abandoned`
    Modified the query adhering to the cherry-pick change definition:
    `project:<projectName> change:<changeID> -branch:<currentBranch> -is:abandoned`

  * [Change 357634](https://gerrit-review.googlesource.com/c/gerrit/+/357634):
  Fix parsing legacy labels for users with comma

    This change fixes a bug introduced by [336883](https://gerrit-review.googlesource.com/c/gerrit/+/336883)
    when parsing labels where a UUID was present together with a user name containing a comma.

  * [Change 347316](https://gerrit-review.googlesource.com/c/gerrit/+/347316):
  Fix Bazel build on Apple M2 ARM64 chip

    Bazel fails to select the correct java-tools binaries for Apple's ARM64
    architecture and downloads the generic x86. This fix disables the download
    of the pre-compiled java_tools, allowing Bazel to build them
    locally for the correct architecture.

  * [Change 375634](https://gerrit-review.googlesource.com/c/gerrit/+/375634):
  Fix listing files for initial commit against the first parent

    DiffOperations used an empty *tree* as the base *commit* when getting
    the diff for an initial commit and the user specified comparing against
    the first parent (which doesn't exist). In this case the request failed
    with 500 ISE because the empty tree is not a commit and thus we run into
    an IncorrectObjectTypeException.
    Instead of failing in this case we are now falling back to comparing
    against the default root.

* Documentation fixes

  * [Issue 40014489](https://issues.gerritcodereview.com/issues/40014489):
  Announce / document that building with Java 8 is no longer supported

    Documents that building with Java 8 is no longer supported.
    Java 11 is now required and removes the now unused
    error_prone_warnings_toolchain.
