| Issue 2128: | NPE while deleting patch set N if patch set N-1 was already deleted | |
| 3 people starred this issue and may be notified of changes. | Back to list |
This also resulted in parts of the web UI becoming unresponsive, for example queries such as "status:open owner:self" hang for certain users
[2013-09-16 17:39:33,132] WARN / : Error in deleteDraftPatchSet
java.lang.NullPointerException
at com.google.gerrit.server.patch.PatchSetInfoFactory.get(PatchSetInfoFactory.java:73)
at com.google.gerrit.server.changedetail.DeleteDraftPatchSet.call(DeleteDraftPatchSet.java:117)
at com.google.gerrit.httpd.rpc.patch.PatchDetailServiceImpl$2.run(PatchDetailServiceImpl.java:116)
at com.google.gerrit.httpd.rpc.patch.PatchDetailServiceImpl$2.run(PatchDetailServiceImpl.java:112)
at com.google.gerrit.httpd.rpc.BaseServiceImplementation.run(BaseServiceImplementation.java:68)
at com.google.gerrit.httpd.rpc.patch.PatchDetailServiceImpl.deleteDraftPatchSet(PatchDetailServiceImpl.java:112)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.google.gwtjsonrpc.server.MethodHandle.invoke(MethodHandle.java:91)
at com.google.gwtjsonrpc.server.JsonServlet.doService(JsonServlet.java:379)
at com.google.gwtjsonrpc.server.JsonServlet.service(JsonServlet.java:265)
at com.google.gerrit.httpd.rpc.GerritJsonServlet.service(GerritJsonServlet.java:120)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:70)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:64)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:57)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:168)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:118)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:113)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1307)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:453)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:229)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
at org.eclipse.jetty.server.Server.handle(Server.java:365)
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485)
at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
at java.lang.Thread.run(Thread.java:724)
Sep 17, 2013
Project Member
#1
david.pu...@sonymobile.com
Sep 17, 2013
Never mind. I was able to reproduce it on master.
1. Upload a change as draft
2. Upload patch set 2 as draft
3. Upload patch set 3 as draft
4. Delete patch set 2
5. Delete patch set 3 --> NPE
The problem is in DeleteDraftPatchSet.java:
PatchSet.Id id =
new PatchSet.Id(patchSetId.getParentKey(), patchSetId.get() - 1);
change.setCurrentPatchSet(patchSetInfoFactory.get(db, id));
It's trying to set the current patch set to the ID of the deleted patch set -1. In this case, the patch set does not exist because it was deleted before.
Status:
Accepted
Sep 17, 2013
(No comment was entered for this change.)
Summary:
NPE while deleting patch set N if patch set N-1 was already deleted
(was: NPE while deleting patch)
Sep 17, 2013
(No comment was entered for this change.)
Status:
Submitted
Labels: FixedIn-2.8
Sep 17, 2013
Any chance we can get this backported to the 2.6.x branch and/or the next 2.7 RC build? One of our users is essentially unable to use gerrit anymore due to this bug.
Sep 17, 2013
Running 2.6.1
Sep 17, 2013
The fix above should prevent the NPE. However, it appears that once the NPE has occurred, the info for patchset in the DB seems inconsistent. The patch set can be listed from the command line. For example "gerrit query owner:self status:abandoned" shows the problematic change sets in the output.
change I6c553fb5431d89b1ffb6691d1a730eb8e3afc00c
project: acme
branch: master
topic: xyz/1
id: I6c553fb5431d89b1ffb6691d1a730eb8e3afc00c
number: 16155
subject: Some trivial change
owner:
name: Me
email: me@domain.org
username: me
url: http://reviews.domain.org/16155
createdOn: 2013-06-13 18:10:21 PDT
lastUpdated: 2013-09-17 00:21:36 PDT
sortKey: 0027d23900003f1b
open: false
status: ABANDONED
However, when trying to access that changeset through the UI, either using the review# or ChangeId, the user (me) gets an error.
"Code Review - Error
The page you requested was not found, or you do not have permissions to view this page"
As a workaround, the problematic patchset needs to be deleted from the DB.
Sep 17, 2013
Thanks a lot for the quick turnaround.
Dec 9, 2013
(No comment was entered for this change.)
Status:
Released
|
|
| ► Sign in to add a comment |