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

Download: **[3.4.8](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.8.war)**
| [3.4.6](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.6.war)
| [3.4.5](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.5.war)
| [3.4.4](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.4.war)
| [3.4.3](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.3.war)
| [3.4.2](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.2.war)
| [3.4.1](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.1.war)
| [3.4.0](https://gerrit-releases.storage.googleapis.com/gerrit-3.4.0.war)

Documentation: **[3.4.8](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.8/index.html)**
| [3.4.6](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.6/index.html)
| [3.4.5](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.5/index.html)
| [3.4.4](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.4/index.html)
| [3.4.3](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.3/index.html)
| [3.4.2](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.2/index.html)
| [3.4.1](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.1/index.html)
| [3.4.0](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.0/index.html)

## Release highlights

## Important notes

### JCraft JSch client library is disabled per default

Deprecated JCraft JSch client library is replaced with MINA SSHD client library
per default. There is still option to switch to using JCraft JSch client library.
Support for JCraft JSch will be removed in the next gerrit release.

### Default support for Java 11

The java language level is now set to Java 11 by default for Gerrit.

* [Issue 13494](https://bugs.chromium.org/p/gerrit/issues/detail?id=13494);
  Generate a Java 11 Eclipse project by default

* Update dev-{eclipse,intellij} development for Java 11.

Gerrit source code is still compatible with Java 8.

### Schema changes

This release doesn't contain schema changes.

The changes index version has been increased to version 61, new change search
operators were added: `mergedafter` and `mergedbefore`.

To run off-line reindexing of the changes (optional):

```sh
  java -jar gerrit.war reindex --index changes -d site_path
```

By default the changes index is automatically rebuilt upon the Gerrit startup
after the upgrade.

### Zero-downtime upgrade

Gerrit supports zero-downtime upgrade from Gerrit v3.3 when configured using
a [high-availability configuration](https://gerrit.googlesource.com/plugins/high-availability/+/refs/heads/master/README.md),
when the Git repositories are stored in a shared filesystem such as NFS or similar.

For upgrading with zero-downtime, you should enable the rolling upgrade migration
in `gerrit.config` on both Gerrit servers by setting the
[`gerrit.experimentalRollingUpgrade`](http://gerrit-documentation.storage.googleapis.com/Documentation/3.3.3/config-gerrit.html#gerrit.experimentalRollingUpgrade)
to `true`.

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 the Git protocol.

The zero-downtime upgrade consists of the following steps:

1. Have Gerrit servers upgraded to v3.3 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 servers.
3. Set the first Gerrit server unhealthy.
4. Shutdown the first Gerrit server, upgrade to v3.4 and start Gerrit again.
5. Verify that the first Gerrit server is working properly and then make it healthy again.
6. Wait for the first Gerrit server to start serving traffic normally.
7. Repeat steps 3. to 6. for the second Gerrit server.
8. Remove `gerrit.experimentalRollingUpgrade` from `gerrit.config` on both Gerrit servers.

### Downgrade

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

1. Shutdown a migrated Gerrit v3.4.x server
2. Run Gerrit v3.3.x init
3. Startup Gerrit v3.3.x server

### Breaking changes

#### `is:mergeable` predicate is disabled per default.

Computing `is:mergeable` has a O(N^2) runtime computation complexity depending
on the number of open changes on a branch and on the size of the changes.
Hence skip this computation per default to avoid the associated runtime effort.

Most Gerrit installation already disabled this feature and thus wouldn't need
to change anything. Otherwise, to restore the previous behaviour this option:
[`change.mergeabilityComputationBehavior`](http://gerrit-documentation.storage.googleapis.com/Documentation/3.4.0/config-gerrit.html#change.mergeabilityComputationBehavior)
should be changed to `API_REF_UPDATED_AND_CHANGE_REINDEX`.

#### HTML plugin support is removed

HTML plugins should be migrated to JavaScript plugins.
This also implies Polymer 2 plugins wouldn't work any more. See also this announcement
for more [details](https://groups.google.com/g/repo-discuss/c/YJY8oQZZo44/m/wt-OAosQBAAJ).

These unused JavaScript Plugin API methods were removed:

* `plugin.annotationApi().setLayer()`, `plugin.annotationApi().enableToggleCheckbox()`
* `plugin.changeMetadata().*`
* `plugin.changeReply().send()`
* `plugin.eventHelper().on()`, `plugin.eventHelper().captureClick()`,
  `plugin.eventHelper().captureTap()`
* `plugin.project().*`
* `plugin.settings().*`
* `plugin.styles().*`
* `plugin.theme().*`
* `plugin.get()`, `plugin.post()`, `plugin.put()`, `plugin.delete()`: Replaced by their counterparts in
  `plugin.restApi()`.

#### ChangeAttributeFactory is removed

As noted in the [v3.3 release notes](/3.3.html#changeattributefactory-deprecated-and-changeplugindefinedinfofactory-supported),
ChangeAttributeFactory has been removed.

## Native packaging

## New features

### Checks UI

Gerrit now has a native UI for displaying run/result info from builds, tests, analyzers, etc.
The data for this new Checks UI must be provided by JavaScript plugins using the
[Checks API](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.0/pg-plugin-checks-api.html).
Checks information will be summarized by chips below the commit message. Detailed information
is shown on a dedicated `Checks` tab next to the `Files` and `Comments` tabs.

### Unresolved Comments ported to latest patchset

Unresolved comments that were left on older patchsets will now also be shown on newer patchsets.
The backend provides two new endpoints `ported_comments/` and `ported_drafts/` for the UI to
retrieve the data and for showing the comments in the correct position.

### Comment Chips and Context

Comment state (resolved, unresolved, draft) is summarized by chips below the commit message. The
Comments Tab and the Change Log will not just show the comment thread, but also the snippet of
code (where the comment was made) as context.

### REST APIs

* Accounts
* Changes
* Groups
* Projects

## End-to-end tests

## Plugin changes

## Gerrit UI changes

* Limit overview image interactions to primary mouse button

* Fix: cannot select names in hovercards in the reply dialog

* Fix thick border on votes in reply dialog

* Add a simple hovercard for check runs

* Add hover states to summary chips

* Align relation chain section with the change info section and button

* Show 'show all' button only when commit message has 17 or more lines

* Show hovercard actions in submit requirement account chips

* Update UX for selecting and filter checks

* Show hovercard actions in change log

* Fix condition check of show_file_comment_button

* Do not try to open reply dialog when change is not loaded

* Fix Show all button on related changes for wide screen

* Explicitly refit overlay for cherry pick dialog

* Align text and radio button in cherry pick dialog

* PolyGerrit: Simplify some regular expressions

* Redesign Show all button in related changes

* Add View Diff button to comment context

* Fix show more button

* Comments tab - radio buttons

* [Issue 14057](https://bugs.chromium.org/p/gerrit/issues/detail?id=14057);
  Add check for undefined commentThread property in submit dialog

* Do not render confirm submit dialog until it is opened

* Show unresolved comments in the confirm submit dialog

* Show View Diff button for merge change messages

* trigger range highlight on long range comment chip hover

* [Issue 13905](https://bugs.chromium.org/p/gerrit/issues/detail?id=13905);
  Fix attention icon in reply dialog

* Enable prev/next button on first/last file to go to change page

* A11y - when dialog opened make rest of page unfocusable

* Add feedback button to top bar

* Fix the "View Diff" button padding

* Disable cherry pick button if branch is not specified

* Add tooltip when Send Reply button is disabled

* Do not show quick approve button on merged changes

* Use RestApiService instead of Polymer element

* Move chunks - UX improvements

* Show quick-approve button even when change is already approved

* A11y - Shortcuts tables in dialog

* A11y - return focus when closing dialog

* Provide clearer above / below mapping for context expansion buttons

* Ensure changes with outdated patchsets have a disabled submit button

* Add Publish button to editor

* Update Save button to Save & Close file in edit view

* A11y - Fix reading whole diff preferences dialog

* Replace polymer readonly attribute with ts readonly

* [Issue 13511](https://bugs.chromium.org/p/gerrit/issues/detail?id=13511);
  Fix repositioning the reply dialog when the attention section expands

* [Issue 13506](https://bugs.chromium.org/p/gerrit/issues/detail?id=13506);
  Change the tooltip of the 'MODIFY' button to be fancier

* Fix 'Send' button being enabled even without the user making any changes

* Add more functionalities to hovercard

* Change when and how attention can be modified in the reply dialog

* Use a selection chip also in the attention summary of the reply dialog

* [Issue 13427](https://bugs.chromium.org/p/gerrit/issues/detail?id=13427);
  Do not show attention related hovercard actions to guest users

## Documentation changes

* Documentation: SHA-1 iso. SHA1

* [Issue 14295](https://bugs.chromium.org/p/gerrit/issues/detail?id=14295);
  Tidy up cross-repository-changes documentation

* Add user privacy documentation

* Document how to get pretty-printed JSON for REST calls

* Fix image url in documentation page

* Documentation: avoid * in ref expressions.

* Document a 24h waiting period for features/API extension

* Update the documentation of `ReviewInput.tag`

* Document when cherry pick fields in ChangeInfo are set

* Fix documentation of config_web_links field in ProjectAccessInfo

* Add documentation for change.maxFiles and change.maxPatchSets

* Add user documentation for ported comments

* DeleteTags: document corner case behavior

* CreateTag: document why we don't check for visibility

* CommitsCollection: document parseBody() call

* Tidy up dev-plugins documentation table of files

* Add more details of what a plugin's documentation contains

* Fix documentation for MoveAPI keepAllVotes option

* [Issue 11621](https://bugs.chromium.org/p/gerrit/issues/detail?id=11621);
  Document that a CVE should be filed for security issues

* Document that external-ids paths variably nested

* Documentation: clarify how the default branch is set

* Document log4j config override

* Document how to generate the html documentation

* Replace obsolete ACCOUNT_GROUPS table in documentation

* Document how vacant non-Google ESC seats get refilled

## JGit changes

* Update JGit to c82818e0e

This update includes this [change](https://git.eclipse.org/r/c/jgit/jgit/+/122288),
which (when configured) will make repacking with Gerrit less racy by ensuring a pruned
object is still available for some amount of time after repacking finishes.

* Update jgit to 9bfb0f3a4

* Update jgit to 4560bdf7e

* InitJgitConfig: Git protocol v2 is enabled per default

* Add passing the 'compression-level' argument to the JGit ArchiveCommand

* Update JGit to 59420886e98bfcb574511cea191ccb3953004610

* Update JGit to 415788df2

* [Issue 13544](https://bugs.chromium.org/p/gerrit/issues/detail?id=13544);
  Upgrade JGit to 5cd485e5

## Elasticsearch changes

* Move elasticsearch back to WORKSPACE

* Elasticsearch: Add support for configuring REST client timeouts

## Other dependency changes

* [Issue 14075](https://bugs.chromium.org/p/gerrit/issues/detail?id=14075);
  Bazel: Specify exact dependencies for licenses rules

* Upgrade Flexmark to 0.50.42

* Upgrade jackson-core to 2.12.0

* Upgrade protobuf version to 3.14.0

* Upgrade jetty version to 9.4.36.v20210114

* Upgrade rules_nodejs version to 3.2.3

* Upgrade MINA SSHD version to 2.6.0

* Trim dependencies in httpd/auth/restapi/BUILD

## Other core changes

* [Issue 13140](https://bugs.chromium.org/p/gerrit/issues/detail?id=13140);
  [Issue 14330](https://bugs.chromium.org/p/gerrit/issues/detail?id=14330);
  OpenID: Remove support for Yahoo! OpenID provider

* ChangeInfo: change _number from int to Integer

* PatchScriptFactory: Access Metrics constants in static way

* MissingMetaObjectException: Add default serialVersionUID

* Flush file diff cache after change Ic1eeccfeb6b18f6

* Support panning magnified image by dragging

* Add comments on boolean arg for calls of ProjectLevelConfig#getWithInheritance

* Re-render diff when useNewImageDiffUi is changed

* Include the boy scout rule in Gerrit contribution guide

* Add the meta_diff endpoint to the Change API

* Indicate soft hyphen in diff

* Use MINA sshd library for key generation and export

* [Issue 12599](https://bugs.chromium.org/p/gerrit/issues/detail?id=12599);
  Git transport: Switch to using Apache MINA ssh client per default

* [Issue 12599](https://bugs.chromium.org/p/gerrit/issues/detail?id=12599);
  Git transport: Add option to switch to using MINA ssh client

* Update file status colors

* Make rows in change log with same height (36px)

* Fix file size for executable files in new diff cache

* Ensure image diff data URLs are accepted by goog.html.SafeUrl

* [Issue 14301](https://bugs.chromium.org/p/gerrit/issues/detail?id=14301);
  Fix change reload not loading because js error in checks service

* [Issue 14300](https://bugs.chromium.org/p/gerrit/issues/detail?id=14300);
  Revert "Revert "Convert gr-app_test to typescript""

* Convert SectionSortCache to use get/loader instead of getIfPresent/put

* Add comments chips to tab navigation

* [Issue 14300](https://bugs.chromium.org/p/gerrit/issues/detail?id=14300);
  Revert "Convert gr-app_test to typescript"

* Expose auto-value-gson in plugin API

* Improve vote chips in dark theme

* Let image diff builder know when to use new UI

* Add border outline for +1, -1

* Glossary terms regarding Events

* Improve alert message for syntax highlighting turned off

* Show both 'Expand All' and 'Collapse All' if some files are expanded

* Add the missing green-400 color

* Add basic overlay / blink image viewer

* Fix regression - enable insensitive search for repo search

* Introduce a glossary section

* Move all soy templates files to unique namespaces

* Add commitSha to the Checks API fetch() interface

* Load multiple groups more efficiently

* Persist group cache by uuid

* Preload comments with context

* Add simple attempt support to Checks UI

* Update the header of the Checks tab

* Specify background color for dark theme for ported comments

* Move InternalGroup to the entities package

* Add an internalId to check runs and results

* Fix expanded result rows to not react on click to expand/collapse

* [Issue 12639](https://bugs.chromium.org/p/gerrit/issues/detail?id=12639);
  Bump guice version to 5.0.1

* Compute AutoMerge commits synchronously when processing merge commits

* Reduce tooltip delay from 500 to 200 ms

* Add comment context to draft comments

* Add 6 colors for check result tags

* Update colors

* SubmitRecords: Accept empty records from the change index

* ChangeData: Disallow computing submit rules when serving query results

* Fix computation of ChangeData#merge

* Describe Timing reporting constants

* Adapt old path in FileInfoJsonNewImpl to old diff cache representation

* Fix NPE in FileInfoJsonComparingImpl when base = null

* Add ChangeInfo to the ChangeData that the Checks API send to plugins

* Introduce reporting constants - Timing

* Navigate to previous unreviewed file when pressing "p"

* Add timeout to DiffOperations

* Switch GetDiff to use the new diff cache

* Add spacing between party poppers and text in the comment tab

* Add more spacing between related changes sections

* Stop container jump on show all/less in Other Labels

* Implement host-level default for 'HEAD' when new projects are created.

* Add user guide for using topics.

* Fix auto-merge detection in new diff cache

* Replace tap by click event

* Ignore new work-in-progress status if it hasn't changed

* Add frontend reporting of "usp" URL parameter

* Add tracking to the global Gerrit object

* Fix endpoint parameters for check result rows

* Fix typing of 'reply' event

* Add link that mentions bots to the attention set user guide

* Introduce reporting constants - Execution

* Lowercase C in 'No Comments'

* GrCursorManager: One-way-bind index

* Move GrCursorManager element hooks to parents

* [Issue 14214](https://bugs.chromium.org/p/gerrit/issues/detail?id=14214);
  Fix alert text color

* Replace this.async() with setTimeout()

* Dark launch the new diff cache for the list files endpoint

* Nothing to be forward-compatible with Lit 2

* Replace at-/de-tached with dis-connectedCallback

* Introduce reporting constants - Life Cycle

* Related changes sections use all space if needed

* Autocomplete for adding topic

* Update designdoc to current state

* Show toast when user stars a change

* [Issue 14199](https://bugs.chromium.org/p/gerrit/issues/detail?id=14199);
  Add attention operator for auto-complete

* UI improvements for show all bar in commit message

* Clean up ported comments experiment

* Fix tracking of plugin-api calls

* Update logic for clicking checks chips in the summary

* Adapt old/new paths of the new diff cache to current Get Diff behaviour

* Add tooltips to check links

* Do not mark file reviewed when navigating using "n"

* Read SubmitRecords back from NoteDb if allowClosed is false

* PatchScriptFactory: Add logging statements for dark launch in mismatch

* Minor improvements to ported comments message without range

* Show arrows that indicate collapsed ancestors/descendents

* Add count of results to section headers of check results

* Add a 'usp' URL parameter that can be used for tracking

* Hide comment context if screen width is less than 1200 px

* Minor improvements to comment context

* Add a request parameter to the Get Diff endpoint to use new diff cache

* [Issue 12983](https://bugs.chromium.org/p/gerrit/issues/detail?id=12983);
  Allow users to specify default branch when creating a repo

* Add commit message to ChangeData of Checks API interface

* Move show file comment to RenderPreferences

* Convert ranged comment and move chips into hints

* Implement syntax highlighting for comment context

* Only show run and results filters in new Checks UI when needed

* Modify the GetDiff endpoint to use the redesigned diff cache

* Use Python 3 in populate-fixture-data.py

* Fix reading empty subsections from plugin config

* Add tracking for all frontend API calls

* Add regular polling for checks

* Implement patchset picker for new Checks UI

* ProjectLevelConfig: Cache parsed config and avoid reparsing

* Feedback for triggered actions

* Fix tiny performance nit in ApprovalInferance

* Enforce size limits for post submit diffs

* Do not call Diff Cache when not needed

* New Change Summary - fixing styling issues

* Use StringBuilder instead of String concatenation to avoid O(n^2) performance.

* Add separator between date and patchset in change log

* Add a loading state to the checks model and use it for the summary

* Fix how the change gets updated in the change-model and -service

* [Issue 14141](https://bugs.chromium.org/p/gerrit/issues/detail?id=14141);
  Add more data to successful runs in the new Checks UI

* Update all rows of a change on the dashboard when one is changed

* Handle checks summary chip clicks by filtering the tab accordingly

* ReviewJson: Load SubmitRecords from ChangeData to avoid reevaluation in loop

* Fix caching for SubmitRecords in ChangeData

* Implement expanding and collapsing of run and result sections

* Replace all colors with css vars defined in app-theme

* Fix chip styles in Checks UI for dark theme

* Introduce components for new image diff UI

* Fix alignment of runnable chip title

* Retry the creation of auto-merge commits more persistently

* Use primary background color var to support dark theme

* Retry submits more persistently

* Add 'parentof' operator that matches parent changes for a change

* Allow CCs to change the attention set

* Avoid using underscores for private properties

* Implement filtering and lazy loading of checks

* New change summary - align count nonvisible changes

* Change the long comment threshold from 5 to 10.

* Adding sameTopic, mergeConflicts, cherrypicks to new change summary

* Fix rebase action in new change summary

* Expose instanceId in GerritInfo

* Add readonly to restApiService property

* Properly check the required 'action' property

* Change the Checks fetch API to send a data object

* Add a plugin endpoint to the expanded check result

* Add support for top-level actions

* Do not render more than 5 links in one check result row

* Fix the gap between commit message and summaries

* Limit total lines of context shown

* Highlight the entire line in comment context for line comments

* Click on comment chip will select same category in comments tab

* Move render only properties to RenderPreferences

* Filter out merged changes when submitting a topic

* [Issue 14102](https://bugs.chromium.org/p/gerrit/issues/detail?id=14102);
  Return empty context if the comment range is outside file boundaries

* GetChange: provide meta=SHA1 option

* Change expand diff context shortcut to be a toggle

* New Change Summary - small fixes

* Disallow creating projects with Gerrit internal refs as branch input

* Add context padding to comment context request

* Add zero state messages for Checks and Comments

* Reduce the gap between commit message and summaries

* GetChange: populate ChangeInfo.metaRevId with the NoteDb meta ref SHA1

* Change cursor to pointer for run selection chips

* Fix 'Completed without results.' font-weight

* Highlight comment range

* Vertically align first run section with first result section

* Show the lines of code around a comment as context

* Adding Related changes to new change summary

* Request comment context along with the comments from server

* Exclude unneeded ref prefixes when getting refs

* Set commit message min-height to 100px

* Add resolved text to comment

* Filter robotComments without Human Reply

* Change horizontal padding of summary chip from 4px to 8px

* Add experiment ID for new image diff UI

* Support experiment features in Gerrit backend

* Create and move plugin APIs to api/ folder

* [Issue 14080](https://bugs.chromium.org/p/gerrit/issues/detail?id=14080);
  Split configs for RevisionDiffIT to different subclasses

* Manually revert RefFilterOptions.returnMostRecentRefChanges

* Check for old and new file modes in FileDiffCacheImpl

* Handle single file diffs for non-existent files

* Fix the alignment of the Change Info section

* Change SAVE to SEND AS WIP

* Set min-width for search

* Add handling for run actions in new Checks UI

* uploadPackAuditEventLog: Avoid commit timestamp mismatch

* Find out why the error-manager initiates page reloads

* Fix bug: don't lookup in NoteDb when reading cached changes

* InternalServerWithUserMessageException: Add serialVersionUID

* [Issue 14046](https://bugs.chromium.org/p/gerrit/issues/detail?id=14046);
  Fix bug: Do not change WIP status when not needed during rebase

* Fix long range comment selection on Firefox

* Clarify LOST value of LineNumber

* Fix the height and background color of comments tab header

* Fix the metadata reviewers line height

* Small styling fix of successful check summary

* Collapsing related changes

* [Issue 13836](https://bugs.chromium.org/p/gerrit/issues/detail?id=13836);
  Add a css var for coloring change log entries by service users

* Fix account overflow problems in Change Log

* Fix bug: also advertise refs/changes/../robot-comments when applicable

* Fix bug not loading robot comments notes

* Show all bar when editing commit message

* Clean up auto reload dashboard experiment

* Fix CmdLineParser.MyParser to not throw ClassCastException

* Add option to dismiss new messages toast

* [Issue 13717](https://bugs.chromium.org/p/gerrit/issues/detail?id=13717);
  Add reviewers to attention set when replying to WIP changes

* Some small checks summary UI tweaks

* Fix a tiny bug in FileDiffCache for commit messages

* Add selection of check run chips

* Update comment tooltip if shortcuts are disabled

* Drop outdated comments from Change.java

* Configure maximum allowed value for the number of context padding lines

* Add the context-padding parameter to the comment context

* [Issue 13571](https://bugs.chromium.org/p/gerrit/issues/detail?id=13571);
  Suppress keyboard shortcuts if user has disabled them

* Revise the summary of the new Checks UI

* Inline entity protobufs directly into cache protobufs

* Fix FilesInCommitCollection when parent = 0

* Add to missing `declare` statements

* New Change Summary - Submitted together

* FileEdits: Simplify instance creation

* Retry more often on submit

* Show avatars for unresolved comments authors

* Extract persistent cache base factory

* Move DiffLayer to the API

* Move move-link-click event details to API

* Move LineNumber to API

* Move ContentLoadNeededEventDetail to the API

* Make GrDiffGroupRange use LineRange

* Fix being able to reload the Checks UI

* Comments summary - unresolved comments + styling

* Introducing new component for relation chain

* Use a new custom exception instead of StorageException on submit

* Left align 'No changes need your attention' message'

* Add a RefFilterOption to always return all most recent ref changes

* Send all user's votes instead of only changed votes

* Add single file diff to the DiffOperations interface

* [Issue 14034](https://bugs.chromium.org/p/gerrit/issues/detail?id=14034);
  Fix bug of removableReviewers without votes

* Add extra width to display full names

* Resolve TODO about removing SPECIAL_PATCH_SET_NUM

* Comments Summary - initial work

* [Issue 13392](https://bugs.chromium.org/p/gerrit/issues/detail?id=13392);
  Fix text overflow in account labels

* [Issue 12536](https://bugs.chromium.org/p/gerrit/issues/detail?id=12536);
  Auto focus on the first input field

* [Issue 14000](https://bugs.chromium.org/p/gerrit/issues/detail?id=14000);
  Fix being able to flip your own attention flag

* Fix font-weight in new Checks UI

* LocalDiskRepositoryManager: Don't compute base path before it is needed

* Handle the comment context for merge list

* Fix comment context for commit messages

* New change summary - commit message with show all bar

* Apply same spacing rules for long range chips as in move detection

* Add message that files were not changed on submit

* Fix loading of plugin provided coverage layer

* Allow user to re-vote their same vote

* ReviewerRecommender: Fix an imprecise comment

* Add author name to new messages toast

* [Issue 2335](https://bugs.chromium.org/p/gerrit/issues/detail?id=2335);
  Add repository browser link to repo detail page

* Adapt getRefs + filter to use the more efficient implementation

* Use quotes in search query only when neccessary

* Use the redesigned diff cache in the list files endpoint

* Fix diff cursor side for chunks on first or last line of file

* Add undefined check for accessing account id

* Change linked URL for topic

* Return the commit message and merge list for auto-merge with \> 2 parents

* Prevent duplicate ranged comment chips on rerender

* Update message text in ported comments

* Replace the placeholders in checks tab with something more decent

* Allow posting the same vote on a new patchset

* Do not show fake runs by default, but allow them to be toggled

* Introduce material web components for use

* Prevent skipping chunks on first or last line of file

* A11y - announce that change is in edit mode

* Propagate error's text received from backend to a plugin

* Add an option for checks to provide HTML results

* [Issue 12838](https://bugs.chromium.org/p/gerrit/issues/detail?id=12838);
  Add manual sync of cursor for gr-change-list

* Move CommentRange to api/

* Move GetOAuthToken out of the core restapi

* Return empty comment context if line and range info are not available

* Add basic support for expanding a checks row

* Fix issue with rounding in calculation of time duration

* Reload dashboard when visibility changes

* [Issue 13970](https://bugs.chromium.org/p/gerrit/issues/detail?id=13970);
  Increase the memory allocation for acceptance tests to 512m

* Move the Side enum to the API

* Reload ported comments when patchset picker is changed

* [Issue 13914](https://bugs.chromium.org/p/gerrit/issues/detail?id=13914);
  Prioritize 'ADDED' entries over 'DELETED' for file diffs

* Refine the Checks Results UI

* A11y - Each page should have only one main

* Fix getSelection error

* Reland: Use LoadingCache#getAll in AccountCacheImpl

* Adapt voting chips to new chip style sizing

* Handle clicks on new checks chips

* Refine the UI of the checks chips

* Add long range comment chip

* Add ported drafts to comment count string

* Throw one exception for both unresolvable commits and permission denied

* Move OAuth and LDAP support out of server target

* Add lit elements for Runs and Results

* Only allow involved users to change the attention set

* Disallow creating branches in Gerrit internal or tag refs namespaces

* Create Branch: clarify that BranchInput and URL should match for ref

* Add tracking when user navigates to original comment

* Propagate the exception cause in CherryPickChange#cherryPick

* DeleteRef: clarify 'prefix' argument

* Make code compile in Eclipse

* Rebase: Include conflicting files into the conflict response

* Allow rebase with conflicts

* Exempt JimFS from Library-Compliance.

* tools/coverage.sh: Expand bash aliases and source bash profile

* Add handling for Commit message and Rebase change messages

* Add handling for ported comments with side=Parent

* CheckAccess: print a useful message if no rules apply

* restapi/project: move CheckAccessReadView into CheckAccess

* restapi/project: add some comments

* restapi/accounts: clarify permission related behaviors

* Introduce the new DiffsOperations interface

* Replace enable_context with enable-context in docs

* Set path to null after filling the comment context

* Allow users to select which changes to cherry pick

* Create enum for the progress status of cherry picked change

* Expose the entire commit message instead of only the subject

* Disallow creating changes on internal Gerrit refs

* Filter disabled experiments from settings view

* Add the file diff cache

* ExternalUser: Allow specifying a PropertyMap

* Expose email addresses for ExternalUsers

* Increase visibility of failed retries

* Avoid passing @Singleton to args4j

* Move ExternalUser from change.query into server package

* Add status chip to file dropdown in diff view

* [Issue 13571](https://bugs.chromium.org/p/gerrit/issues/detail?id=13571);
  Add preference to disable all keyboard shortcuts

* Update _computeMessageContent to use optional properties

* Add diff between patchset N vs N - 1 on uploaded messages

* Use current timestamp for creating group

* CurrentUser: Expose set of ExternalId.Keys

* GroupBackend: Accept CurrentUser instead of IdentifiedUser

* CreateChange: Allow specifying correct project

* Take empty arrays into account to break down chunks

* Disallow creating changes on NoteDb refs

* Fix compile error because of required new `actions` parameter

* Fix unquoted properties of HTMLElementEventMap

* Verify destination change of cherry-pick before trying to update it

* Fix the z-index of the main header

* Add top-level actions for Checks API

* Allow porting comments to contribute to comment count string

* Update comment route to handle comments created with side=PARENT

* Only request ported comments when experiment is enabled

* Add checks service

* Add a model for router and change

* Update existing change on cherry-pick with CommitApi

* Implement mergedafter and mergedbefore change search operator

* Change the default permissions from READ on refs/* to refs/heads/*

* Support refs/users/self for the GET branch rest endpoint

* Fixes for tools/coverage.sh

* Adopt last updated time predicates to reuse for merged time predicates

* Add an extension point to extend the change message on post review

* Port drafts across patchsets

* New change summary - introduce edit pencil

* Fix PluginLogFile to not open multiple appenders when run in parallel

* Port comments across patchsets

* Fix for text selection in comment

* Hide quick-approve for your own change or if you have already given max vote

* Move __editing property to be part of only UIDraft

* Add missing parameter to getThreadsBy* call

* Add an option to keep votes when moving the change to another branch.

* Clean up error reporting

* [Issue 13770](https://bugs.chromium.org/p/gerrit/issues/detail?id=13770);
  Do not add owner to the attention set when added as reviewer

* Define a default errFn for REST API calls from plugins

* Convert commentSide to diffSide in GrCommentThread

* Move chunks: Add links to line numbers

* Change all components to use the service for rest-api-interface

* Add a service for rest-api

* Set AutocompleteSuggestion property value to be string

* Expose the mergedOn date of a change in ChangeNotes

* Ignore no-unused-vars rule on args pattern ^_

* Do not collapse lines of code with less than 4 lines

* Get rid of some globals

* Avoid throwing IllegalArgumentException when failing to parse an enum

* Extend PatchSetWebLink to include subject and branch name

* Replace non-standard event.path with event.composedPath

* Show Submitted Date in change summary

* [Issue 13728](https://bugs.chromium.org/p/gerrit/issues/detail?id=13728);
  Fix dashboard not showing up for not-logged in user

* A11y - improve announcing

* Add a constant for 'current'

* [Issue 13734](https://bugs.chromium.org/p/gerrit/issues/detail?id=13734);
  Fix the change message for removing cc

* Move java_tools javac argument into tools parameter.

* Fix A11y regression

* Fix DynamicOptions to support a custom bean

* Exempt guava from LC review

* New change summary ui - flag, metadata

* Do not re-initialise toast displayed time when navigating

* Add braces to arrow functions returning void

* Add simple visual distinction for move control text

* A11y - Fix tabbing out of searchbar

* Replace comment route in url bar with meaningful url

* Clean-up ChangeNotesCache.Weigher

* Add basic scaffolding for the checks tab

* Add 'prefer null' to frontend style guide

* Wrap isAtStart/End() in GrDiffCursor

* Move some of the old diff cache entities to a new package

* Add the git file diff cache

* Make isAtStart/End() return true when no stops

* Show all comments upon creation if user had hidden them

* Show robot id for robot comments in comment card

* Pass on CursorMoveResult

* Show reviewer on comment tooltip

* ChangeInfo: Serve reviewers when LABELS are requested

* A11y - Improve diff a11y

* Show alert when syntax highlighting is turned off

* Improve description of moved chunks

* Fix empty filter handling in list-view

* [Issue 13689](https://bugs.chromium.org/p/gerrit/issues/detail?id=13689);
  Bazel: Fix eclipse project generation

* Fix Shift-A shortcut for hiding the left side of the diff

* Update stops when a diff starts or stops loading

* Make show_on... fields boolean

* ProjectConfig: Write resolved groups to file

* ChangeNotes: Don't use ChangeIndex when we can avoid it

* [Issue 13612](https://bugs.chromium.org/p/gerrit/issues/detail?id=13612);
  Fix bazel run_shell usage for newer versions

* [Issue 13669](https://bugs.chromium.org/p/gerrit/issues/detail?id=13669);
  Remove --line-height-code in favor of calc() rules

* Reduce boiler plate for event listening

* When added as author, be added as CC and not reviewer

* auth-check: Set content length only if authorization is valid

* Add new ChecksApi to PluginApi

* Treat spaces as ordinary characters in diff view

* [Issue 13658](https://bugs.chromium.org/p/gerrit/issues/detail?id=13658);
  Convert comment counts to comment thread counts around the UI

* Specify line-height for code in terms of rem

* Refuse to expand skip groups with WHOLE_FILE

* Fix showing "Add Patchset Description" for users that are not logged in

* Support diffing for octopus merges against a specific parent

* Fix broken link to release notes of 2.2.2 in prolog cookbook

* Update developer list in Maven pom files

* Abort cursor movements across a loading diff

* [Issue 7458](https://bugs.chromium.org/p/gerrit/issues/detail?id=7458);
  Fix iron-dropdown positioning

* Abort cursor moves via a sentinel, not a callback

* Don't unset scroll on non-existant stop

* ported draft comments: Require authentication

* Allow multiple plugins to provide coverage data

* Hide patch file download when the commit has multiple parents

* Add support to skip chunks

* [Issue 13336](https://bugs.chromium.org/p/gerrit/issues/detail?id=13336);
  Support accessing other users' named queries

* Only request ported drafts if user is logged in

* Catch errors in getPortedComments request

* Allow adding and removing invisible users to the attention set

* [Issue 13336](https://bugs.chromium.org/p/gerrit/issues/detail?id=13336);
  Support to query for user specific named destinations

* Ensure users are active on the change when adding to attention set

* Use ChangeData in LabelJson

* Add latency tracking for porting comments

* Add hasDrafts property to re-compute attention set

* Fix headline for user queries for users without name

* A11y - headlines for Diff Page

* A11y - headlines for Change Page

* Flip the defaults of the attention and assignee flags

* A11y - headlines for Dashboard Page

* Add the GitModifiedFilesCache and ModifiedFilesCache

* Add constant for Service Users

* Linkify branch name in repo detail list

* Do not navigate to Base vs X if X is Base and file is unchanged

* Submit emails should always be sent

* [Issue 13522](https://bugs.chromium.org/p/gerrit/issues/detail?id=13522);
  Fix topic creation in command line to send a topicEditedEvent

* Improve message if submit fails due to non-fulfilled submit requirements

* Add fatal to consistency and validation error enums

* Add keyboard shortcut 'f' to open file list in diff view

* Fix DefaultPermissionBackend#absentUser to work outside the request scope

* [Issue 13543](https://bugs.chromium.org/p/gerrit/issues/detail?id=13543);
  Fix navigate back to change page with '[' on first diff.

* Update mixins to avoid compilation issues

* Required fixes to match internal google rules

* Ensure that all assignment to window.Gerrit properties are safe

* Use overridden ChangeEmail#add instead of OutgoingEmail#add

* Show comment in viewport when navigating to Base vs X

* Do not skip lines marked as dueToMove

* Replace parseInt() with Number

* Fix TseTse errors

* DefaultPermissionBackend: Reuse current user where possible

* Add event detail interfaces for dispatchEventThroughTarget

* Replace "Since" by "Waiting"

* Fix patchset comparison when adding coverages

* Compute known groups lazily when writing groups to the trace

* Fix TseTse errors.

* Toggle default to show unresolved comments

* Do not add reviewer to the attention set when they add themselves

* Fix attention set tip not showing up

* Add email notification option ATTENTION_SET_ONLY

* Add more fine logging to SubmitStrategyOp

* Replace dispatchEvent with dispatchEventThroughTarget

* Add a header about attention set for all change emails

* IdentifiedUser.RequestFactory#runAs allow passing properties

* Allow user preference to receive emails only when in attention set

* Fix TseTse error

* Convert patchNum into integer if possible

* Bold the user name, if they are in the attention set

* Fix showing the CC section in the attention modify section

* Change attention set logic to take unresolved state into account

* Do not add the owner to an otherwise empty attention set

* Fix "Do not update attention set" message

* Do not rely on SortedMap / Set semantics for Flogger tags

* Cache the comment context

* Add 'Since' and 'Submitted' columns to dashboard sections

* Change the sorting of changes in the 'Your Turn' dashboard section

* Highlight the dashboard rows with attention as reviewer

* Use auto-value-gson

* Maintain all attention set updates in ChangeNotesState

* ReceivePackRefCache, locate patch-sets instead of refs

* Include repo config into CommitReceivedEvent

* PostWatchedProjects: Throw BRE in case of empty input

* CheckAccess: Return ACL debug logs

* download-commands: use unqiue constants for each download command

## Bugfix releases

### 3.4.8

* Performance Improvements

  * [Change 350236](https://gerrit-review.googlesource.com/c/gerrit/+/350236)
    Optimized change visibilty checking when the project is hidden

    Looping over every change when the whole project isn't readable is a
    waste of CPU. It's a bigger waste to fetch all the change data in the
    first place.

* Native packaging

  * GerritForge RPM repository updated for arm64 architecture

    [GerritForge RPM v1.4](https://gerritforge.com/gerritforge-repo-1-4.noarch.rpm)
    has been released, including the native packages for arm64 architecutre.

  * DockerHub images for arm64 architecture

    [DockerHub Gerrit images](https://hub.docker.com/r/gerritcodereview/gerrit/tags?page=1&name=3.4.8)
    include images for arm64 architecture.

* Bug Fixes

  * [Issue 16404](https://crbug.com/gerrit/16404):
    Fix disabled caches when reading all keys at once

    When disabling some caches like `git_file_diff` the fetching of the keys
    was causing a ClassCastException and the associated Gerrit functionality
    was broken. This change fixes the bulk loading of all keys and allows
    to disable any of the Gerrit caches without regressions.

  * [Change 350414](https://gerrit-review.googlesource.com/c/gerrit/+/350414)
    Fix index rewriter to rewrite all Or/AndPredicates.
    AndSource chooses right source more often

### 3.4.7 - Not recommended

* Known issues

  * [Issue 16404](https://crbug.com/gerrit/16404):
  Fix disabled caches when reading all keys at once

* New features

  * [Issue 16322](https://crbug.com/gerrit/16322):
  Limit the number of changes that can be submitted together

    When chaining changes together, the sequence of commits to navigate
    was previously unbound, causing the potential operations explosion.
    The explosion could have also been accidental and caused by the push
    of a change with a non-existent branch, which would have resulted
    in the full scan of the repository for changes.
    Introduce a new Gerrit configuration `change.maxSubmittableAtOnce` with
    a safe default of `1024`, which would allow any use case that would have
    also worked before this change.

  * [Change 347496](https://gerrit-review.googlesource.com/c/gerrit/+/347496):
  Enable project_list cache warmer when `cache.project_list.maxAge` is set

  * [Change 341454](https://gerrit-review.googlesource.com/c/gerrit/+/341454):
  GitwebServlet: Retrieve git path from FileRepository so that it can be used
  with multi-site and cached-refdb modules

* Performance Fixes

  * [Issue 16379](https://crbug.com/gerrit/16379):
  Remove key locking for disabled caches

    This change also makes the memoryLimit behaviour consistent with the
    diskLimit set to zero means disabling the implementation of the cache.

  * [Change 349895](https://gerrit-review.googlesource.com/c/gerrit/+/349895):
  Add AndCardinalPredicate and OrCardinalPredicate

    Before this change, IndexSource derived cardinality from predicate
    which implement `HasCardinality`. Since `AndPredicate` and `OrPredicate`
    does not return cardinality, IndexSource defaults to 10 when query
    comprises more than one predicate. Due to this behavior, `AndSource`
    chooses IndexSource almost always when query contains more than one
    index predicate.
    This helps `AndSource` to choose the right source more often.

  * [Change 347956](https://gerrit-review.googlesource.com/c/gerrit/+/347956):
  Introduce possibility to define the cardinality so that `AndSource` predicate
  can work more efficiently

    Before this change, cardinality of the IndexSource was always set to
    10. This makes `AndSource` to choose IndexSource over other sources most of
    the time.
    Add a `HasCardinality` interface which can be used by all the predicates
    which implement IndexPredicate to set a cardinality. This helps
    AndSource to choose the right datasource.

  * [Change 349355](https://gerrit-review.googlesource.com/c/gerrit/+/349355):
  Cache repository locations in LocalDiskRepositoryManager

    Obtaining the actual location of a repository using base-path
    and project name can be slow as it involves some guessing to
    locate the repository. Cache the locations once they are
    obtained to avoid repeated work, thereby improving performance
    when opening repositories.

  * [Change 347955](https://gerrit-review.googlesource.com/c/gerrit/+/347955):
  Consider cardinality while choosing the data source for `AndSource` predicate

    Before this change, `AndSource` considered cost to choose a datasource.
    Ideally cost should be used to determine which predicate to run
    `#match()` against first, so that queries are faster. Cardinality should
    be used to determine which datasource to be picked so that there are
    fewer changes to process.
    Consider cardinality of the datasource to choose the source and use
    cost when cardinality is same.

* Bug Fixes

  * [Change 350014](https://gerrit-review.googlesource.com/c/gerrit/+/350014):
  Do not set cherryPickOf on RevertSubmission

    The RevertSubmission internally uses CherryPickChange operation.  It
    creates the 'normal' revert for the first change in the relation chain,
    for each subsequent change it creates a revert commit that is then
    cherry-picked. This cherry-pick is not a cherry-pick of the reverted
    change. This is a cherry-pick of the revert commit of the original
    change.
    This change fixes the bug in the logic that sets cherryPickOf to the
    original (reverted) change, using the CherryPickChange operation.

  * [Change 349894](https://gerrit-review.googlesource.com/c/gerrit/+/349894):
  Don't always rewrite And/OrPredicate to And/OrSource

    Before this change OrPredicate was always rewritten to OrSource. This
    is not the right thing to do as `OrSource#read()` will eventually fail
    when there is at least one non-datasource child. Since
    [Change 347955](https://gerrit-review.googlesource.com/c/gerrit/+/347955),
    `AndSource` picks a source which has the lowest cardinality
    which makes the `OrSource#read()` failures more visible.
    Rewrite `OrPredicate` to `OrSource` only when all the children in the
    predicate are DataSources.

  * [Change 348715](https://gerrit-review.googlesource.com/c/gerrit/+/348715);
  Clarify that a restart is needed before changes to email templates take
  effect

  * [Issue 16182](https://crbug.com/gerrit/16182):
  Reintroduce the Change-Id footer in change screen

    This change reintroduce the Change-Id footer below the commit message on
    the Gerrit UI.

  * [Issue 10168](https://crbug.com/gerrit/10168):
  Fix HTTP 404 when browsing tags on Gitweb

    The Gitweb links to tags have been broken in v2.14.10 onwards.
    Gitweb supports the 'a=tags' rendering action for annotated tags
    only, returning 404 for all lightweight tags.
    Use the generic 'a=shortlog' for Gitweb links to tags which would
    work for both annotated and lightweight ones.

  * [Change 347495](https://gerrit-review.googlesource.com/c/gerrit/+/347495):
  Fix for IllegalStateException during the Gerrit start when
  `cache.projects.refreshAfterWrite` is set to true and prolog rules are used

  * [Issue 15997](https://crbug.com/gerrit/15997):
  Make DelegateRepository#delegate() method public to allow plugins/modules to
  access it

### 3.4.6

* Security Fixes

  * [Issue 16054](https://crbug.com/gerrit/16054):
  Fix confidentiality leak by users with create ref permission
  using the create branch REST-API

    Any user with create ref permission was able to gain
    access to any SHA1 or refs, including the ones that they would
    not have permission to see.

* Breaking changes

  * [Issue 15941](https://crbug.com/gerrit/15941):
  Fix SSH queries to not show commit-message unless --commit-message is provided

    This issue has existed for several years and should be considered
    breaking as users might expect commit message to be included by
    default in SSH query results.
    Obtaining the commit message is a costly operation as the commit
    data has to be loaded. So, showing it even when --commit-message
    is not provided degrades the performance of SSH queries.

  * [Change 344300](https://gerrit-review.googlesource.com/344300):
  Add missing return values in MetricMaker's `newCallbackMetric` and
  `newConstantMetric`

    When new callback and constant metrics were created the RegistrationHandle
    was not returned, making impossible to de-register them.
    The method signature is now aligned, however, all plugins, including the core ones,
    that were registering callback or constant metrics would need to be rebuilt from
    source or downloaded from the latest build on
    [Gerrit-CI](https://gerrit-ci.gerritforge.com).

* New features

  * [Change 343096](https://gerrit-review.googlesource.com/343096):
  Introduce `index.paginationType=SEARCH_AFTER` configuration for speeding up
  query pagination

  * [Change 343798](https://gerrit-review.googlesource.com/343798):
  Introduce `index.pageSizeMultiplier` configuration to paginate index
  queries with increasing size

  * [Change 344334](https://gerrit-review.googlesource.com/344334):
  Implement `no-limit` queries with multiple pages, make them usable with
  Elasticsearch

  * [Change 345017](https://gerrit-review.googlesource.com/345017):
  Add public `EventTypes.getRegisteredEvents()` for accessing all stream
  event types from plugins

  * [Change 340714](https://gerrit-review.googlesource.com/340714):
  Introduce metrics configuration for different data reservoirs

* Performance Fixes

  * [Change 338834](https://gerrit-review.googlesource.com/338834):
  Avoid creating an IdentifiedUser multiple times in a SSH query
    This improves performance of SSH queries.

  * [Change 338574](https://gerrit-review.googlesource.com/338574):
  Cache ProjectControl instances in SSH queries
    A PerThreadCache is used to cache ProjectControl instances to
    improve SSH query performance.

  * [Change 338474](https://gerrit-review.googlesource.com/338474):
  Allow async receive-commits to have a thread-local cache
    Improve caching when merging changes through git push

  * [Change 338154](https://gerrit-review.googlesource.com/338154):
  Lazy load change notes when submit by push
    Improves performance of change submit via push

* Bug Fixes

  * [Change 347474](https://gerrit-review.googlesource.com/347474):
  Fix DefaultMemoryCacheFactory to correctly set refreshAfterWrite
    Setting refreshAfterWrite in gerrit.config now works and does not mistakenly
    set expireAfterAccess

  * [Issue 15997](https://crbug.com/gerrit/15997):
  Make delegate() method public
    git-repo-metrics plugin now works with multi-site setup

  * [Issue 16038](https://crbug.com/gerrit/16038):
  Fix "internal error" when pushing to refs/users/xx/xxxx
    Push over HTTP to refs/users/* branch now works and doesn't fail with "error: internal error" / Not Signed In

  * [Issue 16001](https://crbug.com/gerrit/16001):
  AsciiDoctor: skip attribute when looking for title
    Fix documentation search showing :linkattrs: instead of the document title

  * [Issue 15134](https://crbug.com/gerrit/15134):
  Apply the match operator to filter projects
    Next-arrow is now not hidden when searching for repositories in the Repository section

  * [Change 337474](https://gerrit-review.googlesource.com/337474):
  Use sane value for QueryProcessor's effective limit on "--no-limit"
    Fix errors seen when --no-limit query option is used with ES index backend

  * [Change 339754](https://gerrit-review.googlesource.com/339754):
  Fix gerrit review command with branch option

    The gerrit review command was not able to find the commit with branch
    option; ensure "refs/heads/" prefix is present for branch option.

  * [Issue 16106](https://crbug.com/gerrit/16106):
  Fix label operator to work with external groups, which never worked before since
  its addition in v2.10.

  * [Change 331762](https://gerrit-review.googlesource.com/331762):
  Cache permission filtering for All-Projects, allowing a faster ACL evaluation
  to any refs.

  * [Change 343694](https://gerrit-review.googlesource.com/343694):
  Improve performance of queries that check the visibility of changes wrt a non-current user

  * [Change 346254](https://gerrit-review.googlesource.com/346254):
  Fix change queries evaluation of `AND` terms  to run match on predicate whose cost is
  least

    Sort the change queries predicates in `AND` based on cost and cardinality, which
    was broken since [Change 79391]().

    **WARNING**: queries containing predicates with poorly defined costs or cardinalities
    could perform worse now.

* Dependency Updates

  * Update JGit to 035e0e23f251fdb766a6630509bcf342efb8b3ad, including the following fixes
    and improvements:

    * 011c26ff3 - Fix connection leak for smart http connections
    * d67ac798f - Remove stray files (probes or lock files) created by background threads
    * 035e0e23f - UploadPack: don't prematurely terminate timer in case of error
    * 66ace4b9a - UploadPack: do not check reachability of visible SHA1s

* Other Fixes

  * [Change 340534](https://gerrit-review.googlesource.com/340534):
  Fix link to change.mergeabilityComputationBehavior in user-search.txt

  * [Change 337835](https://gerrit-review.googlesource.com/337835):
  rest-api-projects: Fix documentation for #inherited-boolean-info

### 3.4.5

* Bug Fixes

  * [Change 335705](https://gerrit-review.googlesource.com/335705):
  Fix bazel build on Mac M1 (aarch64)

  * [Change 334762](https://gerrit-review.googlesource.com/334762):
  Use original javax.servlet-api instead of tomcat's copy

  * [Change 334299](https://gerrit-review.googlesource.com/334299):
  Reject invalid queries with status code 400 on `POST /accounts/<account-identifier>/watched.projects`

  * [Issue 14109](https://crbug.com/gerrit/14109):
  Fix NPE with cherry pick REST-API onto an existing change in a different branch

* Dependency Updates

  * Update rules_nodejs version to 5.1.0.

  * Update JGit to 78c9b9260a5287d09c87b407e396021590714513.

  * Update Apache sshd-mina, sshd-sftp and sshd-osgi to 2.7.0.

  * Update hamcrest to 2.2.

### 3.4.4

* Security Fixes

  * [Change 333304](https://gerrit-review.googlesource.com/333304):
  Ignore `--no-limit` query changes option for anonymous users

    Prevent the use of `no-limit` option with query changes REST API.
    The option can result in excessive resources usage make Gerrit subject
    to DoS and DDoS by any remote endpoint without the need to have any
    Gerrit account or signing in.

* Breaking changes

  * [Issue 15589](https://crbug.com/gerrit/15589):
  Add SHA-1 hash variable to gitweb file links

    This change necessitates a Gitiles plugin update to
    [v3.4.4](https://gerrit.googlesource.com/plugins/gitiles/+/refs/tags/v3.4.4).

* Docker Images

  * [Change 329639](https://gerrit-review.googlesource.com/329639):
  CentOS 8 AppStream has disappeared: use AlmaLinux 8.5 as replacement for Gerrit image

* Bug Fixes

  * [Issue 14945](https://crbug.com/gerrit/14945):
  Account cache is not caching the access to the account data refs

    Account cache in Gerrit v3.4 does not cache the access to the All-Users.git
    repository because of the refactoring of the cache key, which requires lookup
    of the All-Users.git refs. Gerrit allows now the refs in-memory caching using
    the [cached-refs](https://gerrit.googlesource.com/modules/cached-refdb) libModule.

  * [Issue 14912](https://crbug.com/gerrit/14912):
  Fix lost watch notifications when attention-set-only is configured

  * [Issue 15407](https://crbug.com/gerrit/15407):
  MultiBaseLocalDiskRepositoryManager cannot be overloaded by libModules

     Allow the replacement of multi-base git repositories through libModules, which
     wasn't possible before. Allow to use multi-base git repositories with the
     [multi-site](https://gerrit.googlesource.com/plugins/multi-site/) plugin and the
     [cached-refs](https://gerrit.googlesource.com/modules/cached-refdb) libModule

  * [Issue 15500](https://crbug.com/gerrit/15500):
  Fix java.util.IllegalFormatArgumentIndexException on Java 17 in
  MergeUtil#mergeWithConflicts

  * [Issue 15590](https://crbug.com/gerrit/15590):
  Fix SLF4J binding to Reload4J

    Use Reload4J-specific binding for SLF4J, fixing the broken MDC
    since the swap of Log4J with Reload4J done in
    [Change 328081](https://gerrit-review.googlesource.com/c/gerrit/+/328081).

  * [Change 330359](https://gerrit-review.googlesource.com/c/gerrit/+/330359):
  Fix gerrit ls-members --recursive

    Fix a regression introduced with
    [Change 134334](https://gerrit-review.googlesource.com/c/gerrit/+/134334)
    that caused it to ignore the --recursive flag.

  * [Change 327950](https://gerrit-review.googlesource.com/c/gerrit/+/327950):
  PrologRuleEvaluator: Fix endless loop on type error

* Documentation Fixes

  * [Change 331361](https://gerrit-review.googlesource.com/c/gerrit/+/331361):
  Fixup old references to Database in documentation

  * [Change 331360](https://gerrit-review.googlesource.com/c/gerrit/+/331360):
  Remove leftover receive.changeUpdateThreads references

  * [Change 290603](https://gerrit-review.googlesource.com/c/gerrit/+/290603):
  Fix gerrit ls-groups flag `-g` in documentation

* Other Fixes

  * [Issue 15667](https://crbug.com/gerrit/15667):
  Fix Zuul build with obsolete Python 3.5.

* Dependency Updates

  * Update SLF4J version to 1.7.36.

  * Replace Log4J with reload4j version 1.2.19.

### 3.4.3

* Security Fixes

  * [Issue 15481](https://crbug.com/gerrit/15481):
  Remove support for Elasticsearch versions vulnerable to [CVE-2021-44228](https://nvd.nist.gov/vuln/detail/CVE-2021-44228)

    [Elasticsearch v7.16.2](https://www.elastic.co/guide/en/elasticsearch/reference/current/release-notes-7.16.2.html)
    includes the fix for the Log4J v2 vulnerability CVE-2021-44228.

    Remove support in Gerrit for all other vulnerable Elasticsearch versions and keep
    compatibility with v7.16.2 only.

  * [Change 325218](https://gerrit-review.googlesource.com/325218):
  Show the bi-directional Unicode chars as red exclamation marks.

    Bidirectional Unicode chars can be used to hack code base, as shown
    in [Trojan Source web-site](https://trojansource.codes/).
    Gerrit diff-view finds bidirectional unicode and shows them as red
    exclamation marks.

* New Features

  * [Change 325217](https://gerrit-review.googlesource.com/325217):
  Soft hyphen are used in localization, show them similarly to tab indicator in diff-view.

* Reindexing performance improvements

  * [Change 325417](https://gerrit-review.googlesource.com/325417):
  Changes off-line reindex: schedule slices immediately

    If a site has one huge repository and several small/medium sized repos,
    then slice creation for the large repo will effectively block other
    smaller repos from starting to reindex their changes. Schedule slices
    without waiting for any other slice creation, providing up to 25%
    performance improvement for large sites.

* Bug Fixes

  * [Change 325299](https://gerrit-review.googlesource.com/325299):
  Disable cache display stats when initializing new Gerrit sites, as not useful.

* Replication Plugin Fixes

  * [Issue 15315](https://crbug.com/gerrit/15315):
  Document in the replication plugin that remoteNameStyle might result in a names clashes

  * [Issue 15318](https://crbug.com/gerrit/15318):
  Document in the replication plugin that remoteNameStyle is for non-Gerrit remote repos

* Gitiles Plugin Fixes

  * [Issue 15307](https://crbug.com/gerrit/15307):
  Fix Bazel build on MacOS

  * [Change 273397](hhttps://gerrit-review.googlesource.com/273397):
  Load fonts directly from Gerrit instead of 3rd party domains

    In environments without public Internet access or where tight control
    of loaded resources is necessary, loading fonts from 3rd party domains
    might be restricted. Use only the fonts included in the Gerrit war
    distribution and domain.

### 3.4.2

* Breaking changes

  * [Change 323855](https://gerrit-review.googlesource.com/323855) [Change 324115](https://gerrit-review.googlesource.com/324115):
  ProjectCache#evict no longer triggers a reindex.

    During offline project reindexing evict() was triggering a duplicate reindex
    on the project when we only wanted to evict the project cache entry. This same
    issue occurred with the HA plugin and could be/been present in other plugins.

    If you have relied on a reindex being done on evict() you need to use
    evictAndReindex() instead. This behavior is now consistent with other evict()
    methods in Gerrit.

* New features

  * [Change 324095](https://gerrit-review.googlesource.com/324095):
  Display cache statistics after reindex operation.

     Help analyzing the cache utilization during reindex command
     and provide insight into sizing them for optimal performance.

  * [Change 323786](https://gerrit-review.googlesource.com/323786):
  Allow context-dependent group suggestions in gr-permission.

  * [Change 322975](https://gerrit-review.googlesource.com/322975):
  Shows the number of changes that failed reindexing even if less than 10% fail.

  * [Issue 14930](https://bugs.chromium.org/p/gerrit/issues/detail?id=14930):
    Include `Command-Status` in the `httpd_log` and the `httpd_log.json`

    Indicates the overall result of the GIT _command_ over HTTP.

    Refer to the [docs](https://gerrit-documentation.storage.googleapis.com/Documentation/3.4.2/logs.html#_httpd_log)
    for more details.

  * [Issue 14895](https://bugs.chromium.org/p/gerrit/issues/detail?id=14895):
  Support author:self and committer:self in change queries

    It is possible to use `self` for searching own changes (for both author and
    committer predicates).

* Reindexing performance improvements

  * [Change 323215](https://gerrit-review.googlesource.com/323215)
    [Change 322296](https://gerrit-review.googlesource.com/322296):
  Disable auto flushing during offline Lucene indexing.

  * [Change 322835](https://gerrit-review.googlesource.com/322835):
  Use thread count specified on offline reindex command line.

    Honor the "--threads" command line option when provided instead of
    batchThreads property from `gerrit.config`.

  * [Change 323396](https://gerrit-review.googlesource.com/323396):
  Avoid lucene index deletes during offline reindexing.

  * [Change 323297](https://gerrit-review.googlesource.com/323297):
  Avoid scanning for change refs for each project slices when reindexing all changes.

    Avoiding the duplicate work brings down the reindex time from 45 mins to 15 mins
    for a test-site with 160k changes across 4 repos on NFS.

  * [Change 324115](https://gerrit-review.googlesource.com/324115):
  Avoid double indexing work during project reindexing.

* Bug Fixes

  * [Issue 14963](https://crbug.com/gerrit/14963):
  Fix /access REST APIs returning incorrect rule when group is duplicated for same rule.

  * [Issue 14097](https://crbug.com/gerrit/14097):
  Fix GC action not shown in project commands with Gerrit in multi-site configuration.

  * [Issue 15293](https://crbug.com/gerrit/15293):
  Fix fetch of group suggestions for projects with a `/` in their name.

  * [Issue 15251](https://crbug.com/gerrit/15251):
  Ensure that user without edit permission can't change plugin configuration.

  * [Change 313561](https://gerrit-review.googlesource.com/313561):
  Handle null account-ids when sending e-mails.

  * [Change 307602](https://gerrit-review.googlesource.com/307602):
  Fix NPE while accessing draft refs.

  * [Change 307482](https://gerrit-review.googlesource.com/307482):
  EqualsLabelPredicate: fix bug that prevents matching owner votes.

  * [Change 321875](https://gerrit-review.googlesource.com/321875):
  Ignore patchset level comments when computing unresolved count.

  * [Change 322935](https://gerrit-review.googlesource.com/322935):
  Fix buggy Index-Interactive Executor.

     Fix index.threads when set to a negative value which was not using a
     direct executor as mentioned in docs.

  * [Issue 9812](https://crbug.com/gerrit/9812) [Issue 7338](https://crbug.com/gerrit/7338):
  Merge commit cannot be moved

     If a merge was targetting branch A, but then it was decided to create
     a new branch for this merge named B, which starts from A - The merge
     is still valid for B, and the user has no way to move it without amending
     and creating a new change.

  * [Issue 15024](https://crbug.com/gerrit/15024):
  Gerrit event json formatter produces inconsistent payload for different projects

     AllProjectsName and AllUsersName were serialised as: {"name":"All-Projects"} and {"name":"All-Users"}
     while all other projects were serialised as a JSON string. The different JSON
     payloads were causing issues with the HA configuration using the
     [high-availability plugin](https://gerrit.googlesource.com/plugins/high-availability).

  * [Issue 14968](https://crbug.com/gerrit/14968):
  PluginServletContext does not implement javax.servlet.ServletContext.getVirtualServerName()

     Remove the noise on error_log of c.g.g.h.p.PluginServletContext does not implement
     j.s.ServletContext.getVirtualServerName(), when running Gerrit on Tomcat 8.5.69.

* Plugin API fixes

  * [Change 314962](https://gerrit-review.googlesource.com/314962):
  Fix DynamicOptions to invoke listeners registered to BeanParseListener.

* Dependency Updates

  * Update JGit to 60b81c5a9280e44fa48d533a61f915382b2b9ce2.

### 3.4.1

* Security Fixes

  * [Issue 14732](https://crbug.com/gerrit/14732):
  Commits/IncludedIn exposes branch names without respecting the ACLs on branches

     When calling the REST endpoint for listing all branches that a commit SHA1
     is part of, the commit is properly checked for visibility against the ACLs
     (it is a REST resource) but the branches are not checked.

     The included-in may expose the list of non-visible branches to a user that
     has visibility of the SHA1.

  * [Issue 7282](https://crbug.com/gerrit/7282):
  Hide repository name and description when user has no access

     Gitiles did not respect Gerrit's permission and would show the repo name
     and description to any user who could guess the name.
     The repositories list as well as the content APIs were not affected.

* New Features

  * Pop up accounts when typing within assignee or attention on the searchbar

  * Add attention operator for auto-complete on the searchbar

* Bug Fixes

  * [Issue 14726](https://crbug.com/gerrit/14726):
  Make "conflicts" cache reentrant for preventing deadlocks with concurrent
  cache loads of change conflicts computation.

  * [Issue 14785](https://crbug.com/gerrit/14785):
  Limit returned changes for a triplet without Change-Id

    Fix a bug where invoking the REST-API /changes/repo~branch~ without
    mentioning the change-id resulted in the full scan of all changes
    on a repository/branch causing a high CPU overload and occupying
    the request threads for a long time.

  * [Issue 14776](https://crbug.com/gerrit/14776):
  Prevent removing e-mail associated with OpenID external IDs

    Gerrit prevents the user from removing the email address
    associated with their OpenId account.

  * [Issue 14872](https://crbug.com/gerrit/14872):
  Disable setting cancelLeftPadding if avatars are not set in the config

  * [Issue 13745](https://crbug.com/gerrit/13745)
    [Issue 14173](https://crbug.com/gerrit/14173):
  Firefox: fix suggested reviewers pop up instantly and not disappearing when out of focus


  * [Issue 13955](https://crbug.com/gerrit/13955):
  Safari 14.1 for Mac OS BigSur 11.3.1: Multi-line code comment broken

  * [Issue 14495](https://crbug.com/gerrit/14495):
  SSH thread leak with authentication exception

    A show-queue will show tasks in the Batch (or Interactive) queue hanging forever
    as a consequence of a Git/HTTP thread ended because of an error.

  * [Issue 14561](https://crbug.com/gerrit/14561):
  Conflicting changes section not visible even when change.mergeabilityComputationBehavior is enabled

  * [Issue 14577](https://crbug.com/gerrit/14577):
  Dedicated mergeable endpoint shouldn't be called if change.mergeabilityComputationBehavior
  is set to API_REF_UPDATED_AND_CHANGE_REINDEX

  * [Issue 14600](https://crbug.com/gerrit/14600):
  Empty registered field on profile settings screen

  * [Issue 14603](https://crbug.com/gerrit/14603):
  Attention-set operations count towards change.maxUpdates limit.

  * [Issue 14613](https://crbug.com/gerrit/14613):
  Gerrit is killed before the gracefulStopTimeout

    Avoids gerrit.sh killing the in-flight Git/HTTP just after 30 seconds regardless of
    the `httpd.gracefulStopTimeout` configuration value.

  * [Issue 14628](https://crbug.com/gerrit/14628):
  Project deletion replication events are failing to be serialized

  * [Issue 14639](https://crbug.com/gerrit/14639):
  Searching repositories by name is case-sensitive

    Restore the correct project search that was case-insensitive in 2.16.27,
    3.1.3 and 3.3.2.

  * [Issue 14644](https://crbug.com/gerrit/14644):
  Weak security settings accidentally removed in SSH transport

  * [Issue 14645](https://crbug.com/gerrit/14645):
  Username to lowercase conversion fails with duplicates

    Duplicated accounts names associated with the same account id was making
    the conversion to lowercase fail.

  * [Issue 14649](https://crbug.com/gerrit/14649):
  Config setting change.maxUpdates was skipped when the change involved an update
  to the attention-set without comments

  * [Issue 14676](https://crbug.com/gerrit/14676):
  Legacy host key file with RSA algorithm is overridden with ecdsa key during init.

  * [Change 312602](https://gerrit-review.googlesource.com/c/gerrit/+/312602):
  Fix Mariadb status matching for AccountPatchReview

    Mariadb connector uses SQLException.getSQLState() which returns the ANSI
    SQLSTATE value, not the MariaDB/mysql error code.
    Fix the removal of duplicate key detection when an already reviewed file
    opened up again returned 500 because of the incorrect handling of SQLSTATE
    value.

  * [Change 312382](https://gerrit-review.googlesource.com/c/gerrit/+/312382):
  Fix deleting edits when change is merged

    Fix the support of deleting a change edit after it has been merged or
    abandoned.

  * [Change 313702](https://gerrit-review.googlesource.com/c/gerrit/+/313702):
  Remove contenteditable="false" from within dragDropArea which caused issues with uploading

* Plugins Fixes

  * [Change 314364](https://gerrit-review.googlesource.com/c/plugins/codemirror-editor/+/314364):
  codemirror-editor: stop propagation for all keys but exempt the save button

    This fixes an issue where if using contenteditable (default on mobile)
    and you typed "/", it would get intercepted within the app.

* Dependency Updates

  * Update CodeMirror to 5.62.2.

    Fix an issue on mobile where typing causes the keyboard line to go out
    of sync.

  * Update JGit to 06ca6cb3b01cdd618cc80f94bf0bf2fb78ab6e82.

    * [JGit bug 573791](https://bugs.eclipse.org/bugs/show_bug.cgi?id=573791):
    Stale file handle raised when loading a collection of notes with a NoteMap over NFS

    * [JGit Bug 574178](https://bugs.eclipse.org/bugs/show_bug.cgi?id=574178):
    Fix garbage collection failing to delete pack file

    * Noteworthy improvements for gerrit in this jgit update, improving performance
    from O(nˆ2) to O(n):

      [Change 180697](https://git.eclipse.org/r/c/jgit/jgit/+/180697):
      BatchRefUpdate: Skip saving conflicting ref names and prefixes in memory

      [Change 180559](https://git.eclipse.org/r/c/jgit/jgit/+/180559):
      Optimize RefDirectory.isNameConflicting(): this fix reduces number of open file
      handles jgit needs in all scenarios where lock files are created (e.g. ref updates).

      [Change 180432](https://git.eclipse.org/r/c/jgit/jgit/+/180432):
      LockFile: create OutputStream only when needed
