Release notes for Gerrit 2.0.21
===============================

Gerrit 2.0.21 is now available in the usual location:

link:https://www.gerritcodereview.com/download/index.html[https://www.gerritcodereview.com/download/index.html]


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
link:http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html#sendemail.from[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