blob: 1028185d613d1198ca548c94a2a4472cad6349cd [file] [log] [blame]
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -07001= Release notes for Gerrit 2.0.18
Shawn O. Pearcec20e2832010-02-17 09:16:26 -08002
3Gerrit 2.0.18 is now available in the usual location:
4
Shawn Pearce6d7ebc62015-06-12 16:34:42 -07005link:https://www.gerritcodereview.com/download/index.html[https://www.gerritcodereview.com/download/index.html]
Shawn O. Pearcec20e2832010-02-17 09:16:26 -08006
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -07007== Important Notices
Shawn O. Pearcec20e2832010-02-17 09:16:26 -08008
9Please ensure you read the following important notices about this release; .18 is a much larger release than usual.
10
11* OpenID Configuration
12+
13If you use OpenID authentication, the `trusted_external_ids`
14table has moved from the database to the local gerrit.config
15file. Please ensure you copy any critical patterns to the
16`auth.trustedOpenID` setting in gerrit.config before upgrading
17your server. Failure to set a pattern will allow Gerrit
18to trust any OpenID provider. Refer to `auth.trustedOpenID` in
19[http://gerrit.googlecode.com/svn/documentation/2.0/config-gerrit.html Configuration] for more details.
20
21* Caches
22+
Gustaf Lundh70209472014-12-18 16:05:30 +010023The groups that a user is a member of is no longer stored in the
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080024`groups` cache; it is now part of the `accounts` cache. If you
25use a cron script to update the `account_groups` database table
Gustaf Lundh70209472014-12-18 16:05:30 +010026based upon an external data source (such as LDAP), you will need
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080027to adjust your script to flush the `accounts` cache.
Gustaf Lundh70209472014-12-18 16:05:30 +010028The `diff` cache is no longer written to disk by default.
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080029To enable the disk store again, administrators must explicitly
30set `cache.directory` in the gerrit.config file prior to starting
31Gerrit.
32
33* SSH Usernames
34+
Gustaf Lundh70209472014-12-18 16:05:30 +010035SSH usernames are no longer automatically assigned to the
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080036local part of the user's email address. With 2.0.18, usernames
37must also be unique within the database. These changes were
38implemented to resolve a minor potential security issue with
39the SSH authentication system. More details can be found in the
40[http://android.git.kernel.org/?p=tools/gerrit.git;a=commit;h=080b40f7bbe00ac5fc6f2b10a861b63ce63e8add commit message].
41
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -070042== Schema Change
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080043
44*WARNING: This version contains a schema change* (since 2.0.17)
45
46Important notes about this schema change:
47
48* The schema change may be difficult to undo once applied.
49+
50Downgrading could be very difficult once the upgrade has been started.
51Going back to 2.0.17 may not be possible.
52
53* Do not run the schema change while the server is running.
54+
55This upgrade changes the primary keys of several tables, an operation
56which shouldn't occur while end-users are able to make modifications to
57the database. I _strongly_ suggest a full shutdown, schema upgrade,
58then startup approach for this release.
59Apply the database specific schema script:
60----
61 java -jar gerrit.war --cat sql/upgrade015_016_part1_postgres.sql | psql reviewdb
62 java -jar gerrit.war --cat sql/upgrade015_016_part1_mysql.sql | mysql reviewdb
63----
64
65After the upgrade is successful, apply the final script to drop dead tables:
66----
67 java -jar gerrit.war --cat sql/upgrade015_016_part2.sql | psql reviewdb
68 java -jar gerrit.war --cat sql/upgrade015_016_part2.sql | mysql reviewdb
69----
70
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -070071== New Bugs
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080072* Memory leaks during warm restarts
73
742.0.18 includes [http://code.google.com/p/google-guice/ Google Guice], which leaves a finalizer thread dangling when the Gerrit web application is halted by the servlet container. As this thread does not terminate, the web context stays loaded in memory indefinitely, creating a memory leak. Cold restarting the container in order to restart Gerrit is highly recommended.
75
76
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -070077== New Features
Shawn O. Pearcec20e2832010-02-17 09:16:26 -080078* GERRIT-104 Allow end-users to select their own SSH username
79+
80End users may now select their own SSH username through the web interface. The username must be unique within a Gerrit server installation. During upgrades from 2.0.17 duplicate users are resolved by giving the username to the user who most recently logged in under it; other users will need to login through the web interface and select a unique username. This change was necessary to fix a very minor security bug (see above).
81
82* Display supported commands when subcommand is not prov...
83+
84Running `ssh -p 29418 gerrit.example.com gerrit` now lists the complete set of subcommands recognized by the gerrit top level command. This (slightly) improves discoverability of the remote command execution facilities.
85
86* Add a Register link in the menu bar when not signed in
87+
88The Register link in the top right shows up on OpenID based sites when the user is not yet signed in. This should help discoverability of signing into a Gerrit server to establish your account identity.
89
90* Combine all initial page data into a single object
91* Avoid XSRF initialization requests by using one token ...
92+
93An initial XSRF token is now sent as part of the initial HTTP request, and used for all subsequent RPCs from that browser. This reduces the initial page load time by cutting out a few round trips that previously were used to bootstrap that XSRF token.
94
95* Redirect /Gerrit#foo to /#foo on the client side
96+
97Gerrit now favors "/#mine" rather than "/Gerrit#mine" for URLs. Older style URLs will be redirected to the newer style automatically, for the foreseeable future.
98
99* Sort permissions in project access tab
100* Get branches directly from Git rather than database
101* Style tab panel headers like our menu bar header
102* Narrow tables that don't have to be 100% width
103* Cleanup display of external ids in the user settings
104+
105A few minor UI nits in the Settings and Admin panels. The new UI is a bit more consistent with the theme, and formats data in a bit more sane way. Nothing earth shattering.
106
107* Make disk cache completely optional
108+
109As noted above in the section about cache changes, the disk cache is now completely optional.
110
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -0700111== Bug Fixes
Shawn O. Pearcec20e2832010-02-17 09:16:26 -0800112* GERRIT-5 Remove PatchSetInfo from database and get it always fr...
113+
David Pursehouse3be717b2013-05-13 13:56:11 +0900114A very, very old bug. We no longer mirror the commit data into the SQL database, but instead pull it directly from Git when needed. Removing duplicated data simplifies the data store model, something that is important as we shift from an SQL database to a Git backed database.
Shawn O. Pearcec20e2832010-02-17 09:16:26 -0800115
116* GERRIT-220 Fix infinite loop in PatchScriptBuilder
117+
118Under somewhat rare conditions web request threads locked up in an infinite loop while obtaining the data necessary to show a side-by-side or unified patch view to a browser. The loop doesn't allocate any memory, or perform any database requests, but it still ties up a database connection and a servlet container request processing thread indefinitely. We found the bug internally at Google when our Gerrit server load average spiked to 32... and we had no more connections in our database connection pool, which was also sized at a max of 32 handles.
119
120* Fix Reviewed-On lines to only include the server URL o...
121+
122The Reviewed-On lines in cherry-picked commits were duplicating the server URL.
123
124* Set outgoing email header Content-Transfer-Encoding: 8...
125+
126Emails are sent in UTF-8, which may have the high bit set. Thus the transfer encoding must always be set as 8bit, to prevent gateways from potentially discarding the high bits and corrupting the UTF-8 message payload.
127
128* Ensure OpenID related responses aren't cached by proxi...
129+
130Some OpenID related login responses may have sent HTTP headers which were confusing to proxies, potentially allowing a proxy to cache something it should not have cached. The headers were clarified to better denote no caching is permitted.
131
132* Move ChangeApproval to be a child of PatchSet
133+
134The database schema changed, adding `patch_set_id` to the approval object, and renaming the approval table to `patch_set_approvals`. If you have external code writing to this table, uh, sorry, its broken with this release, you'll have to update that code first. :-\
135
Yuxuan 'fishy' Wang4f5ad9d2016-05-03 16:18:58 -0700136== Other Changes
Shawn O. Pearcec20e2832010-02-17 09:16:26 -0800137
138This release is really massive because the internal code moved from some really ugly static data variables to doing almost everything through Guice injection. Nothing user visible, but code cleanup that needed to occur before we started making additional changes to the system.
139
140* Start 2.0.18 development
141* Remove bad import of HostPageServlet
142* Upgrade GWT to 1.7.0
143* Update gwt-maven-plugin to 1.1 release
144* Remove dead gwt-maven repository
145* Stop including gwt-dev JARs in project classpath
146* Remove ConvertSystemConfig utility
147* Update SSHD to 1.0-r798139
148* Update JGit to 0.5.0-57-g4c5eb17
149* Replace our RepositoryCache with JGit's RepositoryCache
150* Make missing project descriptions an empty file
151* Remove unused imports.
152* Move all service implementations into server side code
153* Move RpcConstants out of Common class
154* Move the CurrentAccountImpl accessor to Gerrit onModul...
155* Move workflow function access to CategoryFunction class
156* Move ChangeDetail.load to strictly server side code
157* Move the workflow package to be strictly server side
158* Add Guice 2.0 to our dependencies
159* Switch web.xml to Guice based injection
160* Use Guice injection to pass GerritServer to HttpServle...
161* Use Guice to inject GerritServer into RPC backends
162* Move calls to Common.getSchemaFactory to GerritServer....
163* Create the EncyptedContactStore during servlet startup
164* Move OpenID implementation setup to Guice
165* Remove more Common.getSchemaFactory invocations to dir...
166* Pass GerritServer down through SSH command factory
167* Pass GerritServer instance down through the push queue
168* Use Guice to setup the FileTypeRegistery singleton
169* Delete unnecessary GerritCacheControlFilter
170* Remove pointless Srv subclasses of GerritJsonServlet
171* Refactor FileTypeRegsitery to be an interface
172* Let Guice inject the ContactStore implementation
173* Remove dependency on gwtexpui, gwtjsonrpc and gwtorm p...
174* Use Guice to bring up the SSH daemon and its configura...
175* Remove unnecessary GerritServer field in Receive comma...
176* Move PushQueue and ReplicationQueue to singletons mana...
177* Get rid of the GerritServer static singleton
178* Provide SchemFactory ReviewDb by Guice and not Gerrit...
179* Get the SystemConfig from Guice rather than GerritServ...
180* Merge change 10823
181* Inject the site path configuration setting directly
182* Use FileBasedConfig Config rather than RepositoryConfig
183* Correct copyright dates in SitePath support to be 2009
184* Load gerrit.config through Guice injection
185* Refactor outgoing email to be constructed by Guice
186* Move contact store configuration off GerritServer
187* Configure Eclipse projects to cleanup trailing whitesp...
188* Move PatchSetPublishDetail.load() to server side and i...
189* Hide GerritServer.getGerritConfig and use Guice outsid...
190* Use Guice to create the per-request GerritCall object
191* RegisterNewEmailSender is managed by Guice through Ass...
192* AddReviewerSender class is managed by Guice through As...
193* Merge change 10856
194* Merge change 10858
195* FilebasedConfig requires File pointing at config file ...
196* CreateChangeSender class is managed by Guice through A...
197* AbandonedSender is managed by Guice now.
198* Move RegisterNewEmailSender to servlet module
199* Move authentication bits out of GerritServer
200* Update Ehcache to 1.6.1
201* Move Ehcache construction out of GerritServer to Guice
202* CommentSender is managed by Guice now.
203* MergedSender class is managed by Guice now.
204* MergeFailSender is managed by Guice now.
205* Make ReplacePatchSetSender managed by Guice.
206* Refactor MergeOp to use assisted injection
207* Inject the canonicalweburl rather than using GerritSer...
208* Use JGit's cached hostname when URL can't give us the ...
209* Remove use of PatchSetInfoAccess interface in PatchDet...
210* Merge change 10839
211* Use member injection for OutgoingEmail related depende...
212* Fix CanonicalWebUrl when it is null
213* Inject the Provider GerritCall rather than looking it...
214* Use assisted injection to create the PushOp instances
215* Use PatchSetInfoFactory in OutgoingEmail class.
216* Simplify the setup of assisted injection factories
217* Inject the WorkQueue via Guice
218* Fix ProvisionException catch blocks in GerritServletCo...
219* Move system configuration related code to the server.c...
220* Move servlets related to UI RPCs into the server.rpc p...
221* Reduce CreateSchema dependencies to avoid cache
222* Start injectors in production mode
223* Isolate SSHD module from web module
224* Use ServletContext injection to load files from context
225* Refactor SSH commands into their own package
226* Support Guice request and session scopes in SSHD
227* Cleanup CommandFactory to be session aware
228* Refactor CurrentUser to always be request scoped
229* Cleanup names of SSH daemon related classes
230* Refactor command handling to support subcommands in Gu...
231* Refactor command thread creation logic into BaseCommand
232* Move command line parsing to BaseCommand
233* Avoid duplicate singletons
234* Don't inject fields in providers
235* Run Gerrit servlet container in PRODUCTION mode
236* Make database error reporting more predictable from th...
237* Fix duplicate definition of ReviewDb injection
238* Cleanup unused imports in client code
239* Remove unnecessary references to HttpServletRequest
240* Get HttpServletRequest via injection rather than JsonS...
241* Get the remote peer address via the @RemotePeer annota...
242* Move HTTP related classes to an HTTP specific package
243* Drop ServletName in favor a unique annotation object
244* Move all URL lookup to the CanonicalUrlProvider
245* Only load the OpenID servlets if we are using OpenID a...
246* Make the magic "Become" mode for development a normal ...
247* Present new users with a registion welcome screen
248* Fix SSH daemon in web mode to actually have commands
249* Explicitly bind RemoteJsonService implementations to t...
250* Use Anchor for become rather than location assignment
251* Move the become any account form to a real HTML file
252* Document the DEVELOPMENT_BECOME_ANY_ACCOUNT auth.type ...
253* Fix upgrade014_015_part1_mysql syntax errors
254* Merge change 10972
255* Inject most server references to GerritConfig
256* Cleanup CacheManagerProvider's construction of the con...
257* Make DiffCacheEntryFactory package private
258* Cache account ids by email address key in Ehcache
259* Rename ReviewDbProvider to ReviewDbDatabaseProvider
260* Perform per-request cleanup actions at the end of a re...
261* Refactor ChangeDetailService to use injected database ...
262* Move ChangeDetailService code to its own package
263* Refactor ChangeManageService to use the new Handler st...
264* Refactor SSH commands to use request scoped database h...
265* Fix docs in BaseCommand
266* Mark all of BaseServiceImplementation deprecated
267* Refactor SSH command permission checks to use CurrentU...
268* Move ProjectCache to server side and rewrite entire pe...
269* Make existing BaseServiceImplementation use per-reques...
270* Use Project.NameKey in admin panels rather than Projec...
271* Change project to use Project.NameKey as the primary k...
272* Fix sshdAddress in GerritConfig object sent to clients
273* Rename ProjectCache.invalidate to evict
274* Rename ChangeDetailModule to ChangeModule
275* Move account related RPCs to the account package
276* Move patch RPC stuff to the rpc.patch package
277* Remove unnecessary injected dependencies from CatServl...
278* Document why we abuse the GerritCall in HostPageServlet
279* Create a dummy account if the user account no longer e...
280* Construct the AgreementInfo only from server code
281* Merge change 11021
282* Convert GroupCache to be injected by Guice and stored ...
283* Remove Common.getAccountId and use Guice injection only
284* Remove Common.getSchemaFactory
285* Remove Common.getAccountCache
286* Consolidate account lookups to the AccountResolver
287* Rename GerritServerModule to GerritGlobalModule
288* Rename SshDaemonModule to SshModule
289* Update documentation on the named caches
290* Move trusted_external_ids to auth.trustedOpenID
291* Paper bag fix OutgoingEmail initialization
292* Paper bag fix submit action
293* Fix server error 'Array index out of range' on some pa...
294* Merge branch 'maint'
295* Move ChangeApproval to be a child of PatchSet
296* Make #register alone go to the registration form
297* Enable register new email after saving contact informa...
298* Bind ApprovalTypes without using GerritConfig
299* Remove Common class entirely
300* Catch missing BouncyCastle PGP during contact store cr...
301* Correct Owner project_rights min_values during upgrade
302* Unset use_contributor_agreements if agreements are dis...
303* Sort permissions in project access tab
304* Get branches directly from Git rather than database
305* Style tab panel headers like our menu bar header
306* Narrow tables that don't have to be 100% width
307* Cleanup display of external ids in the user settings
308* Preserve negative approvals when replacing patch sets
309* Use gwtjsonrpc 1.1.1
David Pursehouse3be717b2013-05-13 13:56:11 +0900310* gerrit 2.0.18