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

Download: **[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.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 introducion 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.

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

  * [40014489](https://gerrit-review.googlesource.com/c/gerrit/+/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.
