Gerrit 2.0.21 is now available in the usual location:

Schema Change

WARNING: This version contains a schema change (since 2.0.19)

  • The schema change may be difficult to undo once applied.

    Downgrading could be very difficult once the upgrade has been started. Going back to 2.0.20 may not be possible.

  • Do not run the schema change while the server is running.

    This upgrade changes the primary key of a table, an operation which shouldn’t occur while end-users are able to make modifications to the database. I strongly suggest a full shutdown, schema upgrade, then startup approach for this release.

  • There may be some duplicate keys

    This upgrade removes a column from the primary key of a table, which may result in duplicates being found. You can search for these duplicates before updating: {{{ SELECT account_id,external_id FROM account_external_ids e WHERE e.external_id IN (SELECT external_id FROM account_external_ids GROUP BY external_id HAVING COUNT(*) > 1); }}} Resolving duplicates is left up to the administrator, in general though you will probably want to remove one of the duplicate records. E.g. in one case I had 3 users with the same mailing list email address registered. I just deleted those and sent private email asking the users to use their personal/work address instead of a mailing list. Apply the database specific schema script:

  java -jar gerrit.war --cat sql/upgrade017_018_postgres.sql | psql reviewdb
  java -jar gerrit.war --cat sql/upgrade017_018_mysql.sql    | mysql reviewdb

Important Notices

  • Prior User Sessions

    The cookie used to identify a signed-in user has been changed. Again. All users will be automatically signed-out during this upgrade, and will need to sign-in again after the upgrade is complete. The new schema has more room for extensions, so this might be the last time we will need to invalidate sessions.

  • Harmless error on first startup

    Starting 2.0.21 on an instance which previously had the diff cache stored on disk will result in the following non-fatal error in the server logs during the first launch of .21 on that system:

2009-09-02 18:50:07,446::INFO : com.google.gerrit.server.cache.CachePool  - Enabling disk cache /home/gerrit2/android_codereview/disk_cache
Sep 2, 2009 6:50:07 PM net.sf.ehcache.store.DiskStore readIndex
SEVERE: Class loading problem reading index. Creating new index. Initial cause was com.google.gerrit.server.patch.DiffCacheKey
java.lang.ClassNotFoundException: com.google.gerrit.server.patch.DiffCacheKey
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
...
This error can be safely ignored.  It is caused by a change
in the diff cache's on disk schema, invalidating all existing
cache entries.
  • Significantly larger "diff" cache

    The diff cache schema change noted above changed the element stored in the cache from per-file to per-patchset. That is, a patch set which modifies 500 files will now occupy only 1 element in the diff cache, rather than 500 distinct elements. Accordingly, the default cache.diff.memoryLimit setting has been reduced to 128.

  • Removed configuration settings

    The following configuration settings are no longer honored: cache.maxAge, cache.memoryLimit, cache.diskLimit, and cache.diskBuffer. These settings may now only be set on a per-cache basis (e.g. cache.diff.maxAge).

  • Connection pool recommendation: Apache Commons DBCP

    All of the servers I run now use Apache Commons DBCP instead of c3p0 for their connection pools, and the setup guide and sample jetty_gerrit.xml reference DBCP now. We’ve run into problems with c3p0 under high loads, or when the connection pool is completely exhausted. DBCP seems to fail more gracefully, and seems to give us less trouble. Changing pool implementations is not required, c3p0 is still a supported provider. I just want to make it clear that I no longer recommend it in production.

New Features

  • GERRIT-189 Show approval status in account dashboards

    Account dashboards now show a summary of the approval status on each change. Unreviewed changes are now highlighted to bring the reviewer’s attention to them. Tooltips when hovering over a cell will bring up slightly more detailed information.

  • GERRIT-276 Allow users to see what groups they are members of

    Under Settings > Groups a user can now view what groups Gerrit has placed them into. This may help administrators to debug a user’s access problems, as they can ask the user to verify Gerrit is seeing what they expect.

  • GERRIT-276 Show simple properties of an LDAP group

    If auth.type is HTTP_LDAP, groups which are marked as automatic membership now show non-repeating LDAP attributes below their description under Admin > Groups. This display should help an administrator to verify that Gerrit has mapped an LDAP group correctly.

  • Move Patch entity out of database and store in cache

    The patches database table has been deleted, Gerrit now makes the list of affected files on the fly and stores it within the diff cache. This change is part of a long-running series to remove redundant information from the database before we switch to a pure Git backed data storage system.

  • Only copy blocking negative votes to replacement patch

    Previously Gerrit copied any negative vote in any approval category whenever a replacement patch set was uploaded to a change. Now Gerrit only copies "Code Review -2". This change should make it easier for reviewers (and scripts scanning patch_set_approvals) to identify updated changes which might require a new review. Adminstrators who have created their own categories and want to copy the blocking negative vote should set copy_min_score = 'Y' in the corresponding approval_categories records.

  • show-caches: Make output more concise

    Instead of showing ~12 lines of output per cache, each cache is displayed as one line of a table.

  • Handle multiple accountBase and groupBase

    ldap.accountBase and ldap.groupBase may now be specified multiple times in gerrit.config, to search more than one subtree within the directory.

  • Summarize collapsed comments

    Collapsed comments (both inline on a file and on the change itself) now show a short summary of the comment message, making it faster to locate the relevant comment to expand for more detailed reading.

  • Edit inline drafts on Publish Comments screen

    Inline comment drafts may now be directly edited on the Publish Comments screen, which can be useful for fixing up a minor typo prior to publication.

  • Less toggly thingies on change screen

    The change description and the approvals are no longer nested inside of a foldy block. Most users never collapse these, but instead just scroll the page to locate the information they are looking for.

  • Restore Enter/o to toggle collapse state of comments

    Enter and o now expand or collapse an inline comment on the the current row of a file.

  • Display abbreviated hexy Change-Id in screen titles

  • Use hexy Change-Id in emails sent from Gerrit

    Change-Id abbreviations are now used through more of the UI, including emails sent by Gerrit and window/page titles. This change breaks email threading for any existing review emails. That is comments on a change created before the upgrade will not appear under the original change notification thread.

  • Add sendemail.from to control setting From header

    Gerrit no longer forges the From header in notification emails. To enable the prior forging behavior, set sendemail.from to USER in gerrit.config. For more details see sendemail.from

Bug Fixes

  • Fix ReviewDb to actually be per-request scoped

    When we switched to Guice a misconfiguration allowed Guice to give out multiple database connections per web or SSH request. This could exhaust the connection pool faster than expected.

  • Send no-cache headers during HTTP login

    An oversight in the HTTP login code path may have allowed a proxy server between the user’s browser and the Gerrit server to cache a user’s session cookie. Fixed by sending the correct no-cache headers, disallowing any caching of the authentication response.

  • Fix project owner permissions

    Folks reported on repo-discuss that a project owner also had to have READ permission to use the Branches tab of their project. This was a regression introduced when we refactored some of the code when adding Guice to the project. Fixed.

  • GERRIT-277 Fix hyperlinks in messages

    Hyperlinks in commit messages such as "http://foo" were including the trailing > in the URL, making the link broken. The trailing > is now properly not included in the URL.

  • GERRIT-266 Fix web session cookie refresh time

    In 2.0.19 we introduced web sessions stored in Ehcache, but the logic was causing sessions to expire roughly half-way through the cache.web_sessions.maxAge time. At the default setting, active sessions were expiring after 6 hours. The cache management has been refactored to make this a lot less likely.

  • Cleanup not signed in error to be more user friendly

    The error message which comes up when your session is expired is now much more useful. From the dialog you can restart your session by clicking the "Sign-In" button, and return to the screen you are currently on.

  • Fix commit-msg hook to work with commit -v option

    The commit-msg hook was buggy and did not handle git commit -v correctly. It also did some bad insertions, placing the magic Change-Id: I... line at the wrong position in the commit message. The updated hook resolves most of these problems, but must be recopied to individual Git repositories by end-users.

  • Identify PGP configuration errors during startup

    If the encrypted contact store is enabled, the required encryption algorithms are checked at startup to ensure they are enabled in the underlying JVM. This is necessary in case the JVM is updated and the administrator forgot to install the unlimited strength policy file in the new runtime directory. Recently review.source.android.com was bitten by just such an upgrade.

  • GERRIT-278 Fix missing reply comments on old patch set

    Some comments were not visible because they were replies made to a comment on say patch set 1 while looking at the difference between patch set 1 and patch set 2 of a change. Fixed.

  • Make external_id primary key of account_external_ids

    The database schema incorrectly allowed two user accounts to have the same email address, or to have the same OpenID auth token. Fixed by asserting a unique constraint on the column.

Other Changes

  • Start 2.0.21 development

  • Support cleaning up a Commons DBCP connection pool

  • Clarify which Factory we are importing in ApproveComma…

  • Avoid loading Patch object in /cat/ servlet

  • Remove unnecessary reference of patch key in save draft

  • GERRIT-266 Tweak cache defaults to be more reasonable

  • Merge change I131e6c4c

  • Bring back the "No Differences" message when files are…

  • Pick up gwtorm 1.1.2-SNAPSHOT

  • Refactor GroupListScreen’s inner table for reuse

  • Do not normalize approval scores on closed changes in …

  • Don’t obtain 0 approvals or submit approvals in dashbo…

  • Update JGit to 0.5.0-93-g5b89a2c

  • Add tests for Change-Id generating commit-msg hook

  • Add test for commit-msg with commit -v

  • Fix formatting error in ApprovalCategory

  • Fix typo in change table column header "Last Update"

  • Fix reference to the All Projects broken when we remov…

  • Use category abbreviations in the dashboard approval c…

  • Format approvals columns in change tables with minimal…

  • Shrink the Last Updated column in dashboards and chang…

  • Highlight changes which need to be reviewed by this us…

  • Fix typo in ChangeTable comment

  • Reduce the window used for "Mon dd" vs. "Mon dd yyyy" …

  • Don’t assume "Anonymous Users" and "Registered Users" …

  • Log encrypted contact store failures

  • Identify PGP configuration errors during startup

  • Take the change description block out of the disclosure…

  • Move the approval table out of a disclosure panel

  • Explicitly show what value is needed to submit

  • Modernize the display of comments on a change

  • Modernize the display of inline comments on a file

  • Fix "Publish Comments" when there are no inline drafts

  • Merge change 11666

  • Fix display of "Gerrit Code Review" authored comments

  • Fix source code formatting error in FormatUtil

  • Remove unnecessary fake author on inline comments

  • Auto expand all drafts on publish comments screen

  • Remove unused local variable in PublishCommentsScreen

  • Remove unused import from PublishCommentsScreen

  • Use gwtorm, gwtexpui release versions

  • Add javadoc for Change.getKey

  • Updated documentation for eclipse development.

  • Merge change 11698

  • Merge change 11699

  • Merge change 11700

  • Merge change 11703

  • Merge change 11705

  • Moved creation of GerritPersonIdent to a separate provi…

  • Remove unused dependency on GerritServer.

  • Renamed GerritServert to GitRepositoryManager and moved…

  • Remove declaration of OrmException that is never thrown.

  • Increase margin space between buttons of comment editors

  • Simplify GerritCallback error handling

  • Correct comment documenting SignInDialog

  • Remove unused CSS class gerrit-ErrorDialog-ErrorMessage

  • Clarify become any account servlet errors

  • Fix anchor in sshd.reuseAddress documentation

  • Extract parametrized string formatting out of LdapQuery

  • Make cache APIs interfaces for mocking

  • Add easymock 2.5.1 to our test dependencies

  • Add sendemail.from to control setting From header

  • gerrit 2.0.21