title: “Gerrit 3.1.0 Release” permalink: 3.1.html hide_sidebar: true hide_navtoggle: true toc: true

Download: 3.1.0

Documentation: 3.1.0

Release Highlights

  • Support for git protocol v2

  • Polymer 2

  • Mandatory plugins

  • Performance logging and tracing

See the New Features section for further details.

Important Notes

Schema Changes

This release contains schema changes. To upgrade:

  java -jar gerrit.war init -d site_path

Breaking Changes

The reviewdb.client package is renamed to entities

Plugins or extensions that import classes from the com.google.gerrit.reviewdb.client package must change the imports to com.google.gerrit.entities.

Changed APIs for Id and NameKey classes

Plugins and extensions that instantiate and use classes such as Account.Id, Change.Id, Project.NameKey, Branch.NameKey, etc, must adapt to the following changes.

  • The classes can no longer be instantiated with the new operator. Instead they must be created with static factory methods.

    • new Account.Id(...) --> Account.id(...)
    • new AccountGroup.Id(...) --> AccountGroup.id(...)
    • new AccountGroup.UUID(...) --> AccountGroup.uuid(...)
    • new Branch.NameKey(...) --> BranchNameKey.create(...)
    • new Project.NameKey(...) --> Project.nameKey(...)
  • ‘Getter’ methods are now generated by the auto-value library and no longer have the get prefix.

    • Account.getName() -> Account.name()
    • ...etc

REST API endpoint implementations must return Response<T>

REST API endpoint implementations must now return a Response object that explicitly sets a status code. Plugins that currently only return an Object must be adapted to the new interface.

Powermock and Easymock are removed

The Powermock and Easymock libraries are no longer exported in the acceptance-framework artifact, and are replaced by Mockito. Plugins that use Powermock and/or Easymock in their tests should either add explicit dependencies, or migrate the tests to Mockito.

Polymer 2 and Shadow DOM may break JavaScript plugins

The Gerrit frontend has been migrated from Polymer 1 to Polymer 2 and to using Shadow DOM. This may break JavaScript plugins, e.g. if they use document.getElementById() to reach into the DOM. Instead, plugins will have to use dedicated plugin endpoints together with calling plugin.registerCustomComponent.

Browser Support

Internet Explorer is not supported. Major browsers are supported for the following versions and newer: Firefox 68, Chrome 76, Safari 12.1.

Legacy support for pushing to refs/drafts/ is removed

The change.allowDrafts configuration option is removed, and it is no longer possible to push new changes or patch sets to refs/drafts/<branch-name>.

Support for pushing to refs/changes/ is removed

The receive.allowPushToRefsChanges configuration option is removed, and it is no longer possible to add a new patch set to a change by pushing to refs/changes/<change number>.

JGit Configuration is no longer read from system level .gitconfig

JGit's configuration options are now read from the $site/etc/jgit.config file rather than the system level .gitconfig.

New limit on the number of change meta updates

Many NoteDb operations require walking the entire change meta ref and loading its contents into memory, so changes with arbitrarily many updates may cause high CPU usage, memory pressure, persistent cache bloat, and other problems.

A new configuration option change.maxUpdates allows to set the maximum number of updates that are allowed.

container.slave is renamed to container.replica

The container.slave option is still recognized as an alias of container.replica but is deprecated and will be removed in a future release.

New Features

Git Protocol V2

Git protocol V2 is now enabled by default. A new permission-aware ref database ensures that Gerrit only ever returns refs that the calling user has access to.

Mandatory Plugins

It is possible to configure which plugins are mandatory. Gerrit will fail to start if a mandatory plugin cannot be loaded.

Disabling and restarting of a mandatory plugin is rejected, but reloading of a mandatory plugin is still possible.

Replication plugin

  • Issue 11196: Latency metric is now recorded also at a project level, only when the latency was greater than a configured threshold, configurable in replication.config

New option to limit options used when rendering internal events.

The new option event.payload.listChangeOptions allows to configure which options are used when rendering internal events. This can be used to reduce performance impact of rendering many options.

Performance logging and tracing

See the documentation for full details.

REST APIs

  • Accounts

    • The DETAILS query option on the query accounts endpoint now includes the status and state fields in the response.
  • Changes

    • New SKIP_DIFFSTAT option for the query changes endpoint.

      Computation of the insertions and deletions fields may be expensive for large trees. The new SKIP_DIFFSTAT option allows to omit it from the result.

    • New exclude-groups option on the Suggest Reviewers endpoint.

    • New optional commit-message field on the input for cherry-pick endpoints.

      If the optional message is provided, it is used, otherwise the message from the cherry-picked change is used.

    • New optional topic field on the input for the revert endpoint.

      If the optional topic is provided, it is used, otherwise the topic from the reverted change is used.

  • Config

  • Projects

    • New endpoint: Update dashboard.

      The new endpoint currently only works for the default dashboard.

Bug Fixes

  • Issue 5082: Fix internal server error when getting blame for removed/replaced file.

  • Issue 11918: Fix internal server error when deleting a ref by git push.

Dependency Updates

  • Remove easymock, powermock and javassist from the acceptance framework

  • Remove promise-polyfill

  • Add mockito in the acceptance framework

  • Upgrade Apache sshd and mina-core to 2.3.0

  • Upgrade auto-value to 1.7

  • Upgrade bouncycastle to 1.61

  • Upgrade commons-compress to 1.18

  • Upgrade gitiles-servlet and blame-cache to 0.3-6

  • Upgrade jetty to 9.4.18.v20190429

  • Upgrade JGit to v5.5.1.201910021850-r-152-g63fc6970c

  • Upgrade polymer to 2.7.2

    • Upgrade polymerelements/iron-autogrow-textarea to 2.2.0

    • Upgrade polymerelements/iron-dropdown to 2.2.1

    • Upgrade polymerelements/iron-icon to 2.1.0

    • Upgrade polymerelements/iron-iconset-svg to 2.2.1

    • Upgrade polymerelements/iron-input to 2.1.3

    • Upgrade polymerelements/iron-overlay-behavior to 2.3.4

    • Upgrade polymerelements/iron-selector to 2.1.0

    • Upgrade polymerelements/iron-test-helpers to 2.0.1

    • Upgrade polymerelements/test-fixture to 3.0.0

    • Upgrade polymerelements/paper-button to 2.1.3

    • Upgrade polymerelements/paper-input to 2.2.3

    • Upgrade polymerelements/paper-item to 2.1.1

    • Upgrade polymerelements/paper-listbox to 2.1.1

    • Upgrade polymerelements/paper-tabs to 2.1.1

    • Upgrade polymerelements/paper-toggle-button to 2.1.1

    • Upgrade visionmedia/page.js to 1.11.4

  • Upgrade truth to 1.0