Download: 3.3.11 | 3.3.10 | 3.3.9 | 3.3.8 | 3.3.7 | 3.3.6 | 3.3.5 | 3.3.4 | 3.3.3 | 3.3.2 | 3.3.1 | 3.3.0

Documentation: 3.3.11 | 3.3.10 | 3.3.9 | 3.3.8 | 3.3.7 | 3.3.6 | 3.3.5 | 3.3.4 | 3.3.3 | 3.3.2 | 3.3.1 | 3.3.0

Release highlights

  • Java 11 by default for Gerrit

  • New logs timestamp format

  • Attention Set

Important notes

Default support for Java 11

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

  • Issue 13494; Generate a Java 11 Eclipse project by default

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

Schema changes

This release contains schema changes. To upgrade:

  java -jar gerrit.war init -d site_path

Upgrading to this schema version (184) renames the Non-Interactive Users group to Service Users.

Zero-downtime upgrade

Gerrit supports zero-downtime upgrade from Gerrit v3.2 when configured using a high-availability configuration, 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 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.2 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.3 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.

NOTE: The schema version 184 is tolerated by the Gerrit v3.2 because the group-id of the Non-Interactive Users remains the same, hence all existing ACLs are evaluated as expected also when the group is renamed to Service Users. During steps 4, 5 and 6, the Gerrit server still running v3.2 will display Service Users on the repositories ACLs screen.


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

  1. Shutdown a migrated Gerrit v3.3.x server
  2. Bump the All-Projects.git version (refname: refs/meta/version) to 183:
    git update-ref refs/meta/version $(echo -n 183|git hash-object --stdin)

    See git hash-object and git update-ref.

  3. Revert the All-Users.git schema-184 migration commit (refname: refs/meta/group-names)
  4. Run Gerrit v3.2.x init
  5. Startup Gerrit v3.2.x server

Breaking changes

  • New logs timestamp format:

    The new format supports both ISO-8601 and RFC3339, which means that if you are parsing it as general ISO-8601 it should work as before. However you will be affected if you are parsing the timestamp with a static format.

ChangeAttributeFactory deprecated and ChangePluginDefinedInfoFactory supported

Similar to the ChangeAttributeFactory, a ChangePluginDefinedInfoFactory allows plugins to provide additional data in change results. ChangePluginDefinedInfoFactory has the advantage that it allows plugins to know the full set of changes up front so that they can do bulk operations.

ChangeAttributeFactory will be removed in the next release.

JGit auto-configuration

Auto-disable receive.autogc option

By JGit’s default, git-receive-pack will run auto gc after receiving data from git-push and updating refs.

Init step is added to auto-disable receive.autogc configuration option in $gerrit_site/etc/jgit.config file.

Auto-enable git wire protocol version 2

By JGit’s default, git wire protocol version 2 is disabled. Given, that git wire protocol version 2 on the server side is considered to be now very stable, activate it per default in init site program, so that gerrit sites benefit from improved fetch performance.

Security fixes

  • Issue 13621; CVE-2020-8919: Make PermissionBackend#ForRef authoritative.

    Fixes a misconception that leads to data being accessible through Gerrit APIs that should be locked down.

    Gerrit had two components for determining if a Git ref is visible to a user: (Default)RefFilter and PermissionBackend#ForRef (e.g., RefControl). The former was always capable of providing correct results for all refs. The latter only had logic to decide if a Git ref is visible according to the Gerrit READ permissions. This includes all refs under refs/heads as well as any other ref that isn’t a database ref or a Git tag. This component was unaware of Git tags and notedb-related refs. Hence, when asked for a database reference such as refs/changes/xx/yyyyxx/meta, the logic would allow access if the user has READ permissions on any of the ref prefixes (such as the default “read refs/* Anonymous Users”).

    That was problematic, because it bypassed documented behavior where a user should only have access to a change if he can see the destination ref. The same goes for other database references.

  • Issue 13514; CVE-2020-8920: Work around Gitiles bug on All-Users visibility.

    Gitiles has a special FilteredRepository wrapper that allows carefully hiding refs based on the project’s ACLs. There is however an optimization that skips the filtering in case a user has READ permissions on every ACL pattern(s). When the target repository is All-Users, the optimization turns into a security issue because it allows seeing all personal information associated with all accounts, i.e.:

    • draft comments
    • draft edits
    • personally identifiable information (PII) of all users
    • external ids

    This fix now blocks Gitiles or any other part of Gerrit to abuse this power when the target repository is All-Users, where nobody can be authorized to skip the ACLs evaluation anyway.

  • Issue 12629; Verify hostname when sending emails via SMTP server with SMTPSClient.

    The SMTP server’s certificate and hostname must be verified if encryption is enabled with SSL verification in the host settings (sendemail.smtpEncryption and sendemail.sslVerify).

    SMTPSClient from Apache Commons Net used for SSL processing. It has the following downside: if encryption is not required, SMTPSClient is used in ‘explicit’ mode with the upgrade to TLS never called. Thus, the client is somewhat misused.

Native packaging

  • Allow to use init as a param in docker run

    This allows to easily run the Gerrit image with the init argument to explicitly re-run the initialization on an existing or new site.

  • CentOS docker image upgrade to v8.2.2004

New features

  • Attention Set:

    For every change Gerrit maintains an “Attention Set” with users that are currently expected to act on the change. Both on the dashboard and on the change page, this is expressed by an arrow icon before the user name.

    Enabled by default. The former assignee feature is therefore now disabled by default.

  • The reply dialog posts patchset level comments instead of change messages.

    This is an experiment that is enabled by default. However, it can be disabled by adding ‘UiFeature__patchset_comments’ as disabled key in experiments section of gerrit.config. This is useful if your CI system parses back change messages (e.g. “/rerun”) and has not been updated yet to parse patchset level comments. The option to revert this behavior will be removed in Gerrit 3.4. Until then, administrators need to have migrated.

  • Issue 13670; Introduce cache.openFiles setting in gerrit.config.

    Persistent caches might require the allocation of additional file descriptors depending on their configuration and backend engine. This new setting allows the to be aware of that and increase the number of files accordingly before starting Gerrit.

    E.g. when swapping the default H2 persistent cache implementation with the chronicle-map implementation the number of open files needs raising, since the latter is bound to open more file descriptors, mostly due to its usage of memory mapped files.

REST API changes

  • Reject REST requests with invalid enum values as bad request

  • Expose ‘Service User’ tag on the REST API

  • Add endpoints to allow enhancement on submit requirements

  • Add parameter for added reviewers on reply-reviewers endpoint

  • Add an alternate CreateChange endpoint

  • Issue 13357; Add the work_in_progress option to the revert and revertSubmission endpoints

End-to-end tests

Plugin changes



  • New command: “Reset To”

    Add a new command that allows to reset the current branch to the commit that was fetched. This is useful in cases when the user is working on a local branch and the existing commands are not appropriate:

    • “Checkout” will check out the FETCH_HEAD, i.e. moving off the current branch and leaving the local repository in ‘detached head’ state.

    • “Cherry-Pick” will commit the fetched change again, resulting in a ‘new’ commit (i.e. changed sha1) which will result in a new patch set if the user creates any commits on top of it and pushes for review.

  • Issue 10021; Avoid quoting on basic strings



  • Add method to push changes directly to given replica

    This makes it possible to push changes directly to given replica instance without sending unnecessary requests to others.

    The method is intended to be used by other plugins that extend the replication plugin.

  • Prevent persistent task listing interruptions on IOExceptions

    Improved the logging by differentiating between failures that are severe versus potentially related to other node actions since in a multi-primary scenario with shared storage, it is common for operations on one node to “interfere” with task listing operations on another node without causing a malfunction. Specifically, improve the exception handling so that the logging in these latter cases have a likely explanation of the listing error, and do not consider these specific filesystem errors operational errors.

    NOTE: The multi-primary replication is still experimental.

  • Issue 12769; Fix synopsis in replication start cmd documentation

    --url is usable with --all or projects and on its own. Updated the usage to reflect this.

  • Issue 12769; Don’t wait for pending events to process on startup

    Previously, on large Gerrit installations with many projects and/or many replication destinations, the replication plugin could take very long periods of time to startup. This was particularly a problem if the pending (persisted) event count was large as they all were rescheduled before the plugin finished initializing. Change this behavior so that startup merely begins the process of scheduling the pending events, but does not wait for them to complete.

  • Issue 13480; Don’t output directories during task walk

Polygerrit UI changes

  • Add comment icon to CR column of the dashboard

  • Lock scroll for background when reply-dialog open

  • Fix use of registration dialog instead of overlay

  • A11y - Add meaningful label for Edit button on change page

  • Enable download dialog shortcut in diff page

  • Add title and shortcuts for some links and buttons

  • Fix titles for buttons

  • Add help icon to search bar with link to the doc

  • Fix first and last focusable elements in download and diff pref dialogs

  • Refine the UX on account chips

  • Add doc/bug icons to hovercard and change to help-outline icon

  • Re-use logic for opening up download dialog from ‘d’

  • Update hovercard text to say Your/their turn to take action

  • Offer an option to hide the file comment button

  • Update pg-plugin-dev document with polymer 3 examples

  • Fix broken link/icon to the master build status

  • Add link icon to messages in change log

  • A11y - Fix label and navigation for More Actions Button

  • Disable the ‘Send’ button when a comment is being edited

  • Fix the dangling comma after reviewer on dashboard

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

UI issues

  • Issue 7458; Fix iron-dropdown positioning

  • Issue 13080; Fix the position of the hovercard

  • Issue 13175; Fix gr-hovercard-behavior under Firefox

  • Issue 13328; Redirect GWT links to project dashboard to Polygerit

  • Issue 13433; Unlock scroll if hovercard detached

  • Issue 13543; Fix navigate back to change page with ‘[’ on first diff.

  • Issue 13658; Convert comment counts to comment thread counts around the UI

Documentation changes

  • config-reverseproxy.txt: Document X-Forwarded-For header

  • Document possibility to resume reviews with meetings

  • Document how to mitigate the issue of broken Eclipse project on MacOS

  • Clarify documentation about parent project access right

  • Document jgit options respected by gerrit gc; receive

JGit changes

  • Issue 13544; Ensure that GC#deleteOrphans respects pack lock.

    If pack or index files are guarded by a pack lock (.keep file), deleteOrphans() should not touch the respective files protected by the lock file. Otherwise it may interfere with PackInserter concurrently inserting a new pack file and its index.

  • Issue 13694; Fix the git wire protocol v2 issue on JDK 15

Elasticsearch changes

  • ElasticContainer: Upgrade V6_8 to elasticsearch 6.8.13

  • ElasticContainer: Upgrade V7_8 to elasticsearch 7.8.1

  • Issue 12704; Simplify Init for Elasticsearch

Other dependency changes

  • Upgrade caffeine to 2.8.5

  • Upgrade jackson-core to 2.11.3

  • Upgrade metrics-core to

  • Upgrade soy to 2020-08-24

  • Issue 13474; Upgrade testcontainers to 1.15.0

Other core changes

  • Limit graceful shutdown to SSH sessions serving git requests

  • NoteDbMigrator: Improve log message when saving ref updates

  • Explicitly check READ permission when processing a git push

  • Introduce sshd.gracefulStopTimeout

  • Fix eclipse project generation

  • Update instructions for running on Docker

  • Fix links and file name in emails for patchset-level comments

  • Add JavaScript style guide

Core issues

  • Issue 11637; Add a process to remove a core plugin

  • Issue 11774; Change filtering of messages in experimental ChangeLog

  • Issue 12707; Apply diff preferences immediately after clicking save

  • Issue 12934; Fix selection on diff with range comments

  • Issue 12994; Fix toggle on iOS

  • Issue 13014; Clean up disrespectful terms

  • Issue 13054; Restore keyboard shortcut for expand all diff context

  • Issue 13073; Fix highlight on multi-line range comments

  • Issue 13184; Respect log.textLogging and log.jsonLogging using –console-log

  • Issue 13266; Allow to use ‘Apply fix’ several times on the commit message

  • Issue 13349; When SSH is disabled, it should also be disabled on replica

  • Issue 13350; Decode group id before using it to add [cc-]reviewers

  • Issue 13376; Make sure that comment drafts are sorted to the end

  • Issue 13464; Use persistent cache provided by libModule for offline reindex

  • Issue 13754; Fix NPE with StoredCommentLinkInfoSerializer when enabled is null

Bugfix releases

Unreleased changes

  • Breaking changes

    • Issue 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.

  • Performance Fixes

    • Change 338834 Avoid creating an IdentifiedUser multiple times in a SSH query

      This improves performance of SSH queries.

    • Change 338574 Cache ProjectControl instances in SSH queries

      A PerThreadCache is used to cache ProjectControl instances to improve SSH query performance.

    • Change 338474 Allow async receive-commits to have a thread-local cache

      Improve caching when merging changes through git push

    • Change 338154 Lazy load change notes when submit by push

      Improves performance of change submit via push

  • Bug Fixes

    • Change 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


  • Bug Fixes

    • Change 335705: Fix bazel build on Mac M1 (aarch64)

    • Change 334762: Use original javax.servlet-api instead of tomcat’s copy

    • Change 334299: Reject invalid queries with status code 400 on POST /accounts/<account-identifier>/watched.projects

    • Issue 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.


  • Security Fixes

    • Change 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.

  • Docker Images

    • Change 329639: CentOS 8 AppStream has disappeared: use AlmaLinux 8.5 as replacement for Gerrit image
  • Bug Fixes

    • Issue 14945: Account cache is not caching the access to the account data refs

      Account cache in Gerrit v3.3 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 libModule.

    • Issue 14912: Fix lost watch notifications when attention-set-only is configured

    • Issue 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 plugin and the cached-refs libModule

    • Issue 15500: Fix java.util.IllegalFormatArgumentIndexException on Java 17 in MergeUtil#mergeWithConflicts

    • Issue 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.

    • Change 330359: Fix gerrit ls-members –recursive

      Fix a regression introduced with Change 134334 that caused it to ignore the –recursive flag.

  • Documentation Fixes

    • Change 331361: Fixup old references to Database in documentation

    • Change 331360: Remove leftover receive.changeUpdateThreads references

    • Change 290603: Fix gerrit ls-groups flag -g in documentation

  • Other Fixes

    • Issue 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.


  • Security Fixes

    • Issue 15481: Remove support for Elasticsearch versions vulnerable to CVE-2021-44228

      Elasticsearch v7.16.2 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: 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. Gerrit diff-view finds bidirectional unicode and shows them as red exclamation marks.

  • New Features

    • Change 325217: Soft hyphen are used in localization, show them similarly to tab indicator in diff-view.
  • Reindexing performance improvements

    • Change 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: Disable cache display stats when initializing new Gerrit sites, as not useful.
  • Replication Plugin Fixes

    • Issue 15315: Document in the replication plugin that remoteNameStyle might result in a names clashes

    • Issue 15318: Document in the replication plugin that remoteNameStyle is for non-Gerrit remote repos

  • Gitiles Plugin Fixes

    • Issue 15307: Fix Bazel build on MacOS

    • Change 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.


  • Breaking changes

    • Change 323855 Change 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: 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: Allow context-dependent group suggestions in gr-permission.

  • Reindexing performance improvements

    • Change 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.

    • Change 323215 Change 322296: Disable auto flushing during offline Lucene indexing.

    • Change 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: Avoid lucene index deletes during offline reindexing.

    • Change 324115: Avoid double indexing work during project reindexing.

  • Bug Fixes

    • Issue 14963: Fix /access REST APIs returning incorrect rule when group is duplicated for same rule.

    • Issue 14097: Fix GC action not shown in project commands with Gerrit in multi-site configuration.

    • Issue 15293: Fix fetch of group suggestions for projects with a / in their name.

    • Issue 15251: Ensure that user without edit permission can’t change plugin configuration.

    • Change 313561: Handle null account-ids when sending e-mails.

    • Change 307602: Fix NPE while accessing draft refs.

    • Change 307482: EqualsLabelPredicate: fix bug that prevents matching owner votes.

    • Change 323255: Skip creating slices for projects with no changes during changes off-line reindexing so that empty slices are no longer included in the slice count.


  • New Features

    • Issue 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).

    • Issue 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 for more details.

  • Bug Fixes

    • Issue 9812 Issue 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: 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.

    • Issue 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.


  • Security Fixes

    • Issue 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: 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: Make “conflicts” cache reentrant for preventing deadlocks with concurrent cache loads of change conflicts computation.

    • Issue 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: 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: Disable setting cancelLeftPadding if avatars are not set in the config

    • Issue 13745 Issue 14173: Firefox: fix suggested reviewers pop up instantly and not disappearing when out of focus

    • Change 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: Fix deleting edits when change is merged

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

    • Change 313702: Remove contenteditable=”false” from within dragDropArea which caused issues with uploading

  • Plugins Fixes

    • Change 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.


  • Breaking Changes

    • Elasticsearch: Support for EOL versions 7.4 and 7.5 is discontinued, as they became EOL earlier this year.
  • Bug Fixes

    • Issue 13955: Safari 14.1 for Mac OS BigSur 11.3.1: Multi-line code comment broken.

    • Issue 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 14577: Dedicated mergeable endpoint shouldn’t be called if change.mergeabilityComputationBehavior is set to API_REF_UPDATED_AND_CHANGE_REINDEX

    • Issue 14600: Empty registered field on profile settings screen

    • Issue 14603: Attention-set operations count towards change.maxUpdates limit.

    • Issue 14613: Gerrit is killed before the gracefulStopTimeout

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

    • Issue 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 14645: Username to lowercase conversion fails with duplicates

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

    • JGit Issue 573791: Stale file handle raised when loading a collection of notes with a NoteMap over NFS

    • Change 307602: Fix NPE while accessing draft refs

    • Change 307482: EqualsLabelPredicate: fix bug that prevents matching owner votes

  • Dependency Updates

    • Update JGit to 24d6d605388c82201092cf1699b51095299380a2.

    • Update highlightjs version to 10.7.2.


  • Bug Fixes

    • Issue 13721: Don’t serve polygerrit assets for git requests

      After migration to Polymer UI, PolyGerrit static resources are mounted at the root of the gerrit URL, and would collide with project namespaces, so that the project with these prefixes cannot be served with Git over HTTP protocol.

    • Fix EqualsLabelPredicate to not fail when calling match() from a plugin

      Calling match() on the EqualsLabelPredicate returned from ChangeQueryBuilder.parse() in a plugin fails when in the context of an HTTP query.

    • Fix registration redirect on OpenID

    • Log when a new SSH connection is rejected due to exceeded limit

      When the sshd.maxConnectionsPerUser got exceeded for a user, new connections from that user were rejected but no log entry was reported.

    • Issue 14127: Fix binding of DELETE REST calls from plugins.

      The processing of the DELETE request actually never reached the delete-project plugin due to bug in the RestApiServlet which wrongly delegated the request to a child collection in Gerrit core.

    • Issue 13140: OpenID: Remove support for Yahoo! OpenID provider.

      Yahoo! discontinued support for OpenID provider: “OpenID2 will be EOLed on 6/30/20”

    • Issue 14246: Creation of internal account does not respect auth.userNameToLowerCase.

      The CreateAccount SSH command and REST API was able to create accounts with usernames that contained uppercase letters even if auth.userNameToLowerCase was set to true.

    • Issue 14490: Missing LDAP metrics for authentication.

      Expose the LDAP metrics in terms of latency and call rates so that any problem can be highlighted early on and potentially alerted to the Gerrit admin.

    • Issue 14497: Git/HTTP traffic overloads LDAP with duplicate authentication requests.

      When authenticating incoming Git calls over HTTP the BasicAuth filter was called 3 times per call triggering multiple authentications against the backend.

    • Issue 14508: Allow GerritAccount Cookie authentication for Git/HTTP.

      Allow to create a Gerrit session from the GerritAccount cookie set on the Git client, so that only the first HTTP call will actually authenticate and create a session whilst all the others would just reuse the existing cookie.

    • Issue 14553: Gerrit REST-API fails when using /a/ prefix and cookies

      Recent fix to support GerritAccount Cookie authentication for Git/HTTP broke existing Python (or other) scripting when performing automation with Gerrit REST-API. That is due to the generation of the GerritAccount cookie in the HTTP response, which Python automatically manages to reuse in subsequent calls.

    • Issue 11142: ssh to gerrit with no args requires standard input to terminate.

    • JGit Issue 552173 Too many open files when fetching repos with lots of refs

      JGit update fixes “Too many open files” errors.

  • Dependency Updates

    • Update JGit to 73f8acdc5c97e068143c86765995c4fb6923ee91.


  • New Features

  • Breaking Changes

    • Elasticsearch: Support for EOL versions 7.2 and 7.3 is discontinued. Both elasticsearch versions became EOL recently.

    • Issue 13931: Disallow editing the Change-Id during inline edits.

  • Bug Fixes

    • Issue 12443: Stop generating continuous “logging context is not empty” in error_log.

    • Issue 12847 Issue 12862: Fix NPE on trying to send email for user without email address.

    • Issue 13899: Shows reviewers column in the user’s open changes dashboard.

    • Issue 14097: Allow enabling of Git GC button for non-local Git repository managers, such as multi-site repositories.

    • Issue 14117: Do not suggest service users as reviewers on changes.

    • Issue 14118: Quota management: enforce repository size on pack rather than on object.

    • Issue 14193: Ensure InternalUser can parse groups.

  • PolyGerrit Fixes

    • Issue 14035: Change –gr-formatted-text-prose-max-width from 80ch to 120ch.

    • Issue 14036: Fix multiline range commenting in Firefox.

    • Issue 14104: Decorate the number line element of a blank side, otherwise it won’t be affected by the “hide-left” action to hide one side of the diff.

    • Issue 14127: Fix binding of DELETE REST calls from plugins which impacted the ability the delete projects using the delete-project plugin.

    • Issue 14257: Fix empty TopMenu drop down list.

  • Documentation updates

    • Align the recommended buildifier version to v4.0, the same used in the CI.

    • Development guidelines: mention that Optional in arguments is discouraged (use @Nullable instead) but may be used as return type.

    • New configuration setting suggest.skipServiceUsers for preventing the suggestion of service users as reviewers.

    • New configuration setting gerrit.installBatchModule for adding additional Guice modules to Gerrit init command.

    • Remove the now obsolete section about Java configuration for Strong Cryptography.

  • Dependency Updates

    • Update highlight.js to 10.6.0.


  • New Features

    • Add change query option allowing administrators to skip visibility filtering.

      Add a new REST-API change query option “skip-visibility” to allow administrators to skip visibility filtering.

  • Security Fixes

    • Issue 13858 CVE-2021-22553: Fixed memory leak in Git-over-HTTP requests.

      Unauthenticated users could exploit this problem in a Denial of Service attack, causing the server to go out-of-memory.

  • PolyGerrit Fixes

    • Issue 11811: Fix comments on partial text selection on Safari.

    • Issue 13870: Polygerrit: Remove license headers in minified gr-app.js.

  • Replication plugin fixes

    • Don’t check read permission when authgroup isn’t set.

      Do not check for read permission when authGroup is not set since the user is a RemoteSiteUser that is-an InternalUser having read access to everything. This fixes a regression introduced in v3.1.10 that prevented the All-Users.git repository to be fully replicated to Gerrit replicas.

  • Bug Fixes

    • Issue 13803: Limit number of ambiguous accounts in error message.

      Don’t list more than 3 ambiguous accounts in error message of UnresolvableAccountException in order to prevent flooding the log and displaying a lot of sensitive account data in an error dialog.

    • Issue 13936: Fix badly formatted error message shown in error dialog.

    • Issue 13884: Fix ‘is:submittable’ query on multiple submit records.

  • Dependency Updates

    • Update highlight.js to 10.5.0.

    • Update codemirror-minified to 5.59.1.

    • Update Jetty to 9.4.35.v20201120.

    • Downgrade soy-template to 2019-10-08.


  • Breaking changes

    • Elasticsearch: support for EOL version 6.8 is discontinued. This was the last supported minor version of Elasticsearch 6 in Gerrit. From this release, Gerrit no longer supports V6 but only the already supported versions 7.x of Elasticsearch.

      • Speaking of which, support for 7.0 and 7.1 is discontinued too, as both elasticsearch versions also became EOL recently.
  • Security Fixes

    • Issue 12629: Verify hostname when sending emails via SMTP server with SMTPSClient.

      The SMTP server’s certificate and hostname must be verified if encryption is enabled with SSL verification in the host settings (sendemail.smtpEncryption and sendemail.sslVerify).

  • PolyGerrit Fixes

    • Remove requesting DETAILED_LABELS for the dashboard.

    • Issue 13785 Add z-index to gr-main-header to avoid the box shadows being hidden behind the content.

  • Bug Fixes

    • Issue 13544 Ensure that GC#deleteOrphans respects pack lock:

      If pack or index files are guarded by a pack lock (.keep file) deleteOrphans() should not touch the respective files protected by the lock file.

    • Issue 13775 Honor toogleWipState permission for %ready %wip push options:

    • Issue 13781 Compact the REST-API output JSON unconditionally:

      The output JSON was initially compacted only when the Accept header was set to application/json: the compaction is now done unconditionally, unless the pp=1 query parameter is specified.

    • Issue 13786 ForRef#check should permit internal users to read all refs:

      Make PermissionBackend#ForRef authoritative change introduced a regression where gerrit internal users (e.g. plugins) were not taken into consideration when checking READ permission. As consequence the All-Users.git repository did not get any of the user’s refs replicated to the slaves. After the upgrade it is required to trigger a forced replication of the All-Users.git repository manually.

    • Avoid logging ssh exception for stream is already closed when length=0 if present in the stacktrace.

    • Adapt Bazel/RBE build to produce Java 11 language level.

    • Make UI experiments configurable from gerrit.config.

      Allows users who upgrade Gerrit to make use of experimental features or temporarily revert to previous behavior in case the new behavior breaks them (e.g. turn off patch-set-level comments in 3.3 which breaks some CI workflows).

    • Issue 13800 Expose patch set level comment in stream event.

  • Documentation Updates

    • Clarify that ‘m’ push option sets patch set description.

    • Clarify that disk cache metrics require cache.enableDiskStatMetrics.

  • Dependency Updates

    • Upgrade commons-io to 2.4.

    • Upgrade testcontainers to 1.15.1.