| 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 throught 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 |