Issue 3599: Unified diff screen is broken on stable-2.11 release for anonymous user
Status:  Duplicate
Merged:  issue 3531
Owner: ----
Closed:  Oct 13
Cc:
Project Member Reported by David.Os...@gmail.com, Oct 13, 2015
*****************************************************************
*****                                                       *****
***** !!!! THIS BUG TRACKER IS FOR GERRIT CODE REVIEW !!!!  *****
*****                                                       *****
***** DO NOT SUBMIT BUGS FOR CHROME, ANDROID, CYANOGENMOD,  *****
***** INTERNAL ISSUES WITH YOUR COMPANY'S GERRIT SETUP, ETC.*****
*****                                                       *****
*****   THOSE ISSUES BELONG IN DIFFERENT ISSUE TRACKERS     *****
*****                                                       *****
*****************************************************************
a
Affected Version:

stable-2.11 (v.2.11.2)

What steps will reproduce the problem?
1. Open https://git.eclipse.org/r/#/c/57583/2/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/WindowCursor.java as anonymous user
2. Click on unified diff icon in upper right corner

What is the expected output?

unified screen is opened

What do you see instead?

500 internal server error

Please provide any additional information below.

See also corresponding issue in eclipse issue tracker:

[1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=479618


The culrpit seems to be the unconditional cast in RevisionResource.java called from Submit.java:

  @Override
  public UiAction.Description getDescription(RevisionResource resource) {
    PatchSet.Id current = resource.getChange().currentPatchSetId();
    String topic = resource.getChange().getTopic();
    boolean visible = !resource.getPatchSet().isDraft()
        && resource.getChange().getStatus().isOpen()
        && resource.getPatchSet().getId().equals(current)
        && resource.getControl().canSubmit();

    ReviewDb db = dbProvider.get();
    ChangeData cd = changeDataFactory.create(db, resource.getControl());
280 ==>    if (problemsForSubmittingChanges(Arrays.asList(cd), resource.getUser())
        != null) {
      visible = false;
    }

And in RevisionResource.java

  IdentifiedUser getUser() {
87 ==>    return (IdentifiedUser) getControl().getCurrentUser();
  }

Here is the complete stack trace:


[2015-10-13 05:24:27,928] WARN  /r : Error in patchSetDetail
java.lang.ClassCastException: com.google.gerrit.server.AnonymousUser incompatible with com.google.gerrit.server.IdentifiedUser
	at com.google.gerrit.server.change.RevisionResource.getUser(RevisionResource.java:87)
	at com.google.gerrit.server.change.Submit.getDescription(Submit.java:280)
	at com.google.gerrit.server.change.Submit.getDescription(Submit.java:89)
	at com.google.gerrit.server.extensions.webui.UiActions$4.apply(UiActions.java:118)
	at com.google.gerrit.server.extensions.webui.UiActions$4.apply(UiActions.java:88)
	at com.google.common.collect.Iterators$8.transform(Iterators.java:799)
	at com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:651)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at com.google.common.collect.Iterators$7.computeNext(Iterators.java:650)
	at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
	at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
	at com.google.common.collect.Iterators.addAll(Iterators.java:361)
	at com.google.common.collect.Lists.newArrayList(Lists.java:160)
	at com.google.common.collect.Lists.newArrayList(Lists.java:144)
	at com.google.gerrit.server.extensions.webui.UiActions.sorted(UiActions.java:54)
	at com.google.gerrit.httpd.rpc.changedetail.PatchSetDetailFactory.call(PatchSetDetailFactory.java:219)
	at com.google.gerrit.httpd.rpc.changedetail.PatchSetDetailFactory.call(PatchSetDetailFactory.java:72)
	at com.google.gerrit.httpd.rpc.Handler.to(Handler.java:65)
	at com.google.gerrit.httpd.rpc.changedetail.ChangeDetailServiceImpl.patchSetDetail2(ChangeDetailServiceImpl.java:42)
	at com.google.gerrit.httpd.rpc.changedetail.ChangeDetailServiceImpl.patchSetDetail(ChangeDetailServiceImpl.java:36)
	at sun.reflect.GeneratedMethodAccessor60.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56)
	at java.lang.reflect.Method.invoke(Method.java:620)
	at com.google.gwtjsonrpc.server.MethodHandle.invoke(MethodHandle.java:91)
	at com.google.gwtjsonrpc.server.JsonServlet.doService(JsonServlet.java:381)
	at com.google.gwtjsonrpc.server.JsonServlet.service(JsonServlet.java:267)
	at com.google.gerrit.httpd.rpc.GerritJsonServlet.service(GerritJsonServlet.java:120)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
	at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:279)
	at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:269)
	at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:180)
	at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
	at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:82)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.gwtexpui.server.CacheControlFilter.doFilter(CacheControlFilter.java:73)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.gerrit.httpd.RequireSslFilter.doFilter(RequireSslFilter.java:68)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	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.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:75)
	at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
	at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:119)
	at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:133)
	at com.google.inject.servlet.GuiceFilter$1.call(GuiceFilter.java:130)
	at com.google.inject.servlet.GuiceFilter$Context.call(GuiceFilter.java:203)
	at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:130)
	at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652)
	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585)
	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:221)
	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127)
	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515)
	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061)
	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
	at org.eclipse.jetty.server.Server.handle(Server.java:497)
	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310)
	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
	at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
	at java.lang.Thread.run(Thread.java:795)
Oct 13, 2015
Project Member #1 David.Os...@gmail.com
Adding Stefan to this issue, as he did some refactoring in this code area recently. Parts of the code related to submitted together feature was reverted on stable-2.11.
Cc: sbel...@google.com
Oct 13, 2015
Project Member #2 David.Os...@gmail.com
https://gerrit-review.googlesource.com/71500
Status: ChangeUnderReview
Oct 13, 2015
#3 tw201...@gmail.com
This is a duplicate of  issue 3531 .
Oct 13, 2015
Project Member #4 David.Os...@gmail.com
(No comment was entered for this change.)
Status: Duplicate
Mergedinto: 3531