evanchueng / gerrit

Automatically exported from code.google.com/p/gerrit
Apache License 2.0
0 stars 0 forks source link

Gerrit hangs when trying to navigate with keys ('g' then 'o') to All Open Changes #608

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
Gerrit hangs when trying to navigate with keys ('g' then 'o') to All Open 
Changes

Affected Version:
2.1.4-SNAPSHOT

What steps will reproduce the problem?
1. go to 'All merged changes' screen
2. press 'g' then 'o' 

What is the expected output? What do you see instead?
It is expected that the 'All open changes' screen is opened, instead of this 
Gerrit hangs.

Please provide any additional information below.
When I say that Gerrit hangs I mean that the browser Window is not reacting 
anymore. At the same time I can see on server side a hanging Thread.
The problem occurs with Firefox as well as with Internet Explorer.
For me the problem can be almost always reproduced, only with Internet Explorer 
the navigation succeeded once or twice.

Firefox:
Daemon Thread [Code server for gerrit from Mozilla/5.0 (Windows; U; Windows NT 
5.1; de; rv:1.9.2.4) Gecko/20100611 Firefox/3.6.4 (.NET CLR 3.5.30729) on 
http://127.0.0.1:8888/?gwt.codesvr=127.0.0.1:9997 @ {$~'+T=S3TY!.u*!] 
(Suspended) 
    SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]    
    SocketInputStream.read(byte[], int, int) line: 129  
    BufferedInputStream.fill() line: 218    
    BufferedInputStream.read() line: 237    
    DataInputStream.readByte() line: 248    
    BrowserChannel$Message.readMessageType(DataInputStream) line: 1131  
    BrowserChannelServer(BrowserChannel).reactToMessagesWhileWaitingForReturn(BrowserChannel$SessionHandler) line: 1702 
    BrowserChannelServer.invokeJavascript(CompilingClassLoader, JsValueOOPHM, String, JsValueOOPHM[], JsValueOOPHM) line: 165   
    ModuleSpaceOOPHM.doInvoke(String, Object, Class<?>[], Object[]) line: 120   
    ModuleSpaceOOPHM(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 507  
    ModuleSpaceOOPHM(ModuleSpace).invokeNativeObject(String, Object, Class<?>[], Object[]) line: 264    
    JavaScriptHost.invokeNativeObject(String, Object, Class<?>[], Object[]) line: 91    
    Node$.getOwnerDocument$(Node) line: not available   
    DOMImplMozilla.getAbsoluteTop(Element) line: 61 
    Element$.getAbsoluteTop$(Element) line: 166 
    AllSingleListScreen$1(NavigationTable<RowItem>).ensurePointerVisible() line: 114    
    NavigationTable$OpenKeyCommand.onKeyPress(KeyPressEvent) line: 292  
    KeyCommandSet.onKeyPress(KeyPressEvent) line: 116   
    GlobalKey$2.onKeyPress(KeyPressEvent) line: 55  
    KeyPressEvent.dispatch(KeyPressHandler) line: 70    
    KeyPressEvent.dispatch(EventHandler) line: 1    
    HandlerManager$HandlerRegistry.fireEvent(GwtEvent<H>, boolean) line: 65 
    HandlerManager$HandlerRegistry.access$1(HandlerManager$HandlerRegistry, GwtEvent, boolean) line: 53 
    HandlerManager.fireEvent(GwtEvent<?>) line: 178 
    DocWidget(Widget).fireEvent(GwtEvent<?>) line: 52   
    DomEvent<H>.fireNativeEvent(NativeEvent, HasHandlers, Element) line: 116    
    DocWidget(Widget).onBrowserEvent(Event) line: 100   
    DOM.dispatchEventImpl(Event, Element, EventListener) line: 1307 
    DOM.dispatchEvent(Event, Element, EventListener) line: 1263 
    NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]  
    NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39  
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
    Method.invoke(Object, Object...) line: 597  
    MethodAdaptor.invoke(Object, Object...) line: 103   
    MethodDispatch.invoke(JsValue, JsValue[], JsValue) line: 71 
    OophmSessionHandler.invoke(BrowserChannel, BrowserChannel$Value, int, BrowserChannel$Value[]) line: 157 
    BrowserChannelServer(BrowserChannel).reactToMessagesWhileWaitingForReturn(BrowserChannel$SessionHandler) line: 1713 
    BrowserChannelServer.invokeJavascript(CompilingClassLoader, JsValueOOPHM, String, JsValueOOPHM[], JsValueOOPHM) line: 165   
    ModuleSpaceOOPHM.doInvoke(String, Object, Class<?>[], Object[]) line: 120   
    ModuleSpaceOOPHM(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 507  
    ModuleSpaceOOPHM(ModuleSpace).invokeNativeObject(String, Object, Class<?>[], Object[]) line: 264    
    JavaScriptHost.invokeNativeObject(String, Object, Class<?>[], Object[]) line: 91    
    Impl.apply(Object, Object, Object) line: not available  
    Impl.entry0(Object, Object, Object) line: 188   
    GeneratedMethodAccessor25.invoke(Object, Object[]) line: not available  
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
    Method.invoke(Object, Object...) line: 597  
    MethodAdaptor.invoke(Object, Object...) line: 103   
    MethodDispatch.invoke(JsValue, JsValue[], JsValue) line: 71 
    OophmSessionHandler.invoke(BrowserChannel, BrowserChannel$Value, int, BrowserChannel$Value[]) line: 157 
    BrowserChannelServer(BrowserChannel).reactToMessages(BrowserChannel$SessionHandler) line: 1668  
    BrowserChannelServer.processConnection() line: 401  
    BrowserChannelServer.run() line: 222    
    Thread.run() line: 679  
If Firefox is closed/killed the Thread that was hanging in Gerrit is released.

Internet Explorer:
Daemon Thread [Code server for gerrit from Mozilla/4.0 (compatible; MSIE 6.0; 
Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 
3.0.4506.2152; .NET CLR 3.5.30729; InfoPath.2) on 
http://127.0.0.1:8888/?gwt.codesvr=127.0.0.1:9997#all,open,n,z @ 
'MD5#MF#*sP.*K\9] (Suspended)   
    SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]    
    SocketInputStream.read(byte[], int, int) line: 129  
    BufferedInputStream.fill() line: 218    
    BufferedInputStream.read() line: 237    
    DataInputStream.readByte() line: 248    
    BrowserChannel$Message.readMessageType(DataInputStream) line: 1131  
    BrowserChannelServer(BrowserChannel).reactToMessagesWhileWaitingForReturn(BrowserChannel$SessionHandler) line: 1702 
    BrowserChannelServer.invokeJavascript(CompilingClassLoader, JsValueOOPHM, String, JsValueOOPHM[], JsValueOOPHM) line: 165   
    ModuleSpaceOOPHM.doInvoke(String, Object, Class<?>[], Object[]) line: 120   
    ModuleSpaceOOPHM(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 507  
    ModuleSpaceOOPHM(ModuleSpace).invokeNativeObject(String, Object, Class<?>[], Object[]) line: 264    
    JavaScriptHost.invokeNativeObject(String, Object, Class<?>[], Object[]) line: 91    
    DOMImplIE6(DOMImpl).getParentElement(Node) line: not available  
    Node$.getParentElement$(Node) line: 184 
    DOM.getParent(Element) line: 892    
    ChangeTable(NavigationTable<RowItem>).ensurePointerVisible() line: 113  
    NavigationTable$OpenKeyCommand.onKeyPress(KeyPressEvent) line: 292  
    KeyCommandSet.onKeyPress(KeyPressEvent) line: 116   
    GlobalKey$2.onKeyPress(KeyPressEvent) line: 55  
    KeyPressEvent.dispatch(KeyPressHandler) line: 70    
    KeyPressEvent.dispatch(EventHandler) line: 1    
    HandlerManager$HandlerRegistry.fireEvent(GwtEvent<H>, boolean) line: 65 
    HandlerManager$HandlerRegistry.access$1(HandlerManager$HandlerRegistry, GwtEvent, boolean) line: 53 
    HandlerManager.fireEvent(GwtEvent<?>) line: 178 
    DocWidget(Widget).fireEvent(GwtEvent<?>) line: 52   
    DomEvent<H>.fireNativeEvent(NativeEvent, HasHandlers, Element) line: 116    
    DocWidget(Widget).onBrowserEvent(Event) line: 100   
    DOM.dispatchEventImpl(Event, Element, EventListener) line: 1307 
    DOM.dispatchEvent(Event, Element, EventListener) line: 1263 
    GeneratedMethodAccessor63.invoke(Object, Object[]) line: not available  
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
    Method.invoke(Object, Object...) line: 597  
    MethodAdaptor.invoke(Object, Object...) line: 103   
    MethodDispatch.invoke(JsValue, JsValue[], JsValue) line: 71 
    OophmSessionHandler.invoke(BrowserChannel, BrowserChannel$Value, int, BrowserChannel$Value[]) line: 157 
    BrowserChannelServer(BrowserChannel).reactToMessagesWhileWaitingForReturn(BrowserChannel$SessionHandler) line: 1713 
    BrowserChannelServer.invokeJavascript(CompilingClassLoader, JsValueOOPHM, String, JsValueOOPHM[], JsValueOOPHM) line: 165   
    ModuleSpaceOOPHM.doInvoke(String, Object, Class<?>[], Object[]) line: 120   
    ModuleSpaceOOPHM(ModuleSpace).invokeNative(String, Object, Class<?>[], Object[]) line: 507  
    ModuleSpaceOOPHM(ModuleSpace).invokeNativeObject(String, Object, Class<?>[], Object[]) line: 264    
    JavaScriptHost.invokeNativeObject(String, Object, Class<?>[], Object[]) line: 91    
    Impl.apply(Object, Object, Object) line: not available  
    Impl.entry0(Object, Object, Object) line: 188   
    GeneratedMethodAccessor57.invoke(Object, Object[]) line: not available  
    DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25  
    Method.invoke(Object, Object...) line: 597  
    MethodAdaptor.invoke(Object, Object...) line: 103   
    MethodDispatch.invoke(JsValue, JsValue[], JsValue) line: 71 
    OophmSessionHandler.invoke(BrowserChannel, BrowserChannel$Value, int, BrowserChannel$Value[]) line: 157 
    BrowserChannelServer(BrowserChannel).reactToMessages(BrowserChannel$SessionHandler) line: 1668  
    BrowserChannelServer.processConnection() line: 401  
    BrowserChannelServer.run() line: 222    
    Thread.run() line: 679  
For me the Internet Exploror detects after some while that there is a slow 
running script and asks if it should be aborted. If abort is accepted the 
browser comes back to life however the Thread in Gerrit is still hanging.

Original issue reported on code.google.com by edwin.ke...@gmail.com on 24 Jun 2010 at 5:26

GoogleCodeExporter commented 9 years ago
I just noticed that the timing for pressing 'g' then 'o' seems to be important 
for reproducing the problem. If to press 'g' and 'o' very quickly one after 
another the navigation seems to be working fine, however if to press 'g', wait 
a second (or even longer) and then press 'o' the described problem occurs.

Original comment by edwin.ke...@gmail.com on 24 Jun 2010 at 5:42

GoogleCodeExporter commented 9 years ago
This is the GWT hosted mode debugger, which is
doing some really weird stuff with the JS event
processing in the browser in order to run Java
code during a JavaScript event.  I'm almost not
surprised something broke here.

I'm not likely to spend time trying to track it
down.  The 'g-then-o' code works by scheduling a
timer for 250 milliseconds that captures following
keystrokes looking for the 'o' match.  If one isn't
received, its supposed to reset the keyboard to the
root level map.

What is probably occurring here is the timer gets
stuck somewhere between the browser code and the
Java backend that is running the emulated UI, and
the whole thing just deadlocks.  More than likely
this is a bug in Google Web Tookit.

Just don't use 'g-then-o' in hosted debug mode; if
you need to test that stuff compile to JavaScript
and run under the real Gerrit daemon, without the
GWT hosted mode browser hacks.

Original comment by sop@google.com on 24 Jun 2010 at 9:46