blob: 053ec894b39cef19b64f2cf1f3f193836322a978 [file] [log] [blame]
Release notes for Gerrit 2.0.21
===============================
Gerrit 2.0.21 is now available in the usual location:
link:http://code.google.com/p/gerrit/downloads/list[http://code.google.com/p/gerrit/downloads/list]
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