Tom, I pulled your changes and I reverted back to the Dec 22 snapshot (git 
e8c88cfd9cf3cab89788cd530838314089ce9b23) for Jetty you are using in your 
Docker image, and I got the same results as you. Those timeout errors went 
away, and yes pushing the full page (402 requests) causes 
java.lang.IllegalStateExceptions you saw. So I believe the latest snapshot 
probably fixed that error, but introduced an incompatibility with Chrome Canary 
42.




> On 2015-Jan-18, at 1:32 PM, Tom Eyckmans <[email protected]> wrote:
> 
> Hi Shaw,
> 
> Thanks for taking the time to look at this and the great feedback, to bad for 
> me it is not really working the way I thought is was, but thats the only way 
> you really learn right :)
> 
> I didn't know about the chrome://net-internals/#events thanks for pointing me 
> to it. Looks like a great resource. 
> 
> I changed the push code (also added a default(true) to the push parameter) 
> and now I also see the SPDY_STREAM_ADOPTED_PUSH_STREAM events. Thanks for 
> pointing me to the problems.
> 
> Here are some additional test findings (mentioned log files can be found here 
> https://github.com/teyckmans/http2-push/tree/master/logs 
> <https://github.com/teyckmans/http2-push/tree/master/logs>):
> 
> I didn't see the following thread deaths in the Jetty output previously:  
> 
> 2015-01-18 19:50:50.505:WARN:oejut.QueuedThreadPool:qtp396180261-188: 
> Unexpected thread death: 
> org.eclipse.jetty.util.thread.QueuedThreadPool$3@b6df857 in 
> qtp396180261{STARTED,10<=200<=200,i=129,q=0}
> 2015-01-18 19:51:50.363:WARN:oejut.QueuedThreadPool:qtp396180261-219: 
> Unexpected thread death: 
> org.eclipse.jetty.util.thread.QueuedThreadPool$3@b6df857 in 
> qtp396180261{STARTED,10<=199<=200,i=195,q=0}
> 
> I also had a case when the page kept on loading and there was no active SPDY 
> session listed on the net-internals page in Chrome. See 
> chrome_spdy_session_hangs.log in github project, spdy session just stopped 
> fetching, without timeout I kept waiting for a while but it didn't time out. 
> This was in combination with the thread deaths on the server side. Would have 
> expected Chrome to timeout at some point. 
> 
> After some more testing without rows and column restrictions (pushing 400 
> resources) I got the following IllegalStateExceptions in 
> HttpTransportOverHTTP2.send(HttpTransportOverHTTP2.java:100), in this case 
> server is taking up 100% cpu as it is logging like crazy. 
> Looks like the HTTP2 transport code got stuck:
> 
> 2015-01-18 20:08:07.833:WARN:oejs.HttpChannel:qtp396180261-107: Commit failed
> java.lang.IllegalStateException: committed
>         at 
> org.eclipse.jetty.http2.server.HttpTransportOverHTTP2.send(HttpTransportOverHTTP2.java:100)
>         at 
> org.eclipse.jetty.server.HttpChannel.sendResponse(HttpChannel.java:591)
>         at 
> org.eclipse.jetty.server.HttpChannel$CommitCallback.failed(HttpChannel.java:712)
>         at 
> org.eclipse.jetty.http2.server.HttpTransportOverHTTP2.send(HttpTransportOverHTTP2.java:100)
>  
> 
> The last 3 lines of the stack are repeated 131 times!
> 
> I've pushed out a new version of the teyckmans/blog-http2-push docker image 
> and installed it here: 
> 
> https://146.148.90.85:8443/blog-http2-push/push?push=true&rows=1&columns=1 
> <https://146.148.90.85:8443/blog-http2-push/push?push=true&rows=1&columns=1> 
> 
> Sometimes the page loads fast (1.15 - 1.20 seconds) but sometimes the page 
> takes (+/-4.5 seconds) when using 
> https://146.148.90.85:8443/blog-http2-push/push?rows=5 
> <https://146.148.90.85:8443/blog-http2-push/push?rows=5> 
> Haven't found the cause of this yet.
> 
> I haven't tested with a fresh snapshot build from the latest sources, I'll 
> try and get to that somewhere this week.
> 
> On 18 January 2015 at 19:24, Shawn Bissell <[email protected] 
> <mailto:[email protected]>> wrote:
> I posted this on Tom Eyckmans’ blog 
> (http://blog.iadvise.eu/2015/01/12/http2-server-push/ 
> <http://blog.iadvise.eu/2015/01/12/http2-server-push/>), but I figure this is 
> a better place for the discussion since there seems to be a problem with the 
> push mechanism itself…
> 
> First of all Tom, great work on making this example. I tried creating a 
> similar jetty push example and failed miserably :) I hate to break it to you, 
> but the http2-push site is pushing a different url from the requested one so 
> the pushes are wasted. Hitting the url
>       https://localhost:8443/blog-http2-push/push?push=true&rows=0&columns=1 
> <https://localhost:8443/blog-http2-push/push?push=true&rows=0&columns=1>
> (I had to look at the source to determine the ?push=true was required for 
> push)
> 
> If you look in the Chrome (Canary build 42) chrome://net-internals/#events <> 
> screen and find your SPDY_SESSION you can see that the push promise has a url 
> of
> 
>       
> /blog-http2-push/blog-http2-push/images/slice_0_0.jpg?push=true&rows=0&columns=1
> 
> where as the url requested in the page is just
> 
>       /blog-http2-push/images/slice_0_0.jpg
> 
> So there are 2 problems there … the pushed url path has an extra 
> blog-http2-push in it and the pushed url has the querystring in it.
> 
> I tried fixing the servlet code but not calling the absoluteResourcePath 
> method and by setting the query tring to null.
>       pushBuilder.setQueryString(null);
> And then I could see the SPDY_STREAM_ADOPTED_PUSH_STREAM events happening in 
> Chrome, but there was some sort of timeout and the client closes the streams 
> and the pushed resources were not loaded at all. 
> 
> Here is what I see in the debug log
> 
> 2015-01-18 10:11:58.898:DBUG:oejhs.HttpChannelOverHTTP2:         
> qtp565760380-27: HTTP2 PUSH Request #240/798f5a73:
> GET https://localhost:8443/blog-http2-push/images/slice_5_19.jpg 
> <https://localhost:8443/blog-http2-push/images/slice_5_19.jpg> HTTP/2
> accept: 
> text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
> accept-encoding: gzip, deflate, sdch
> accept-language: en-US,en;q=0.8
> cache-control: public, max-age=777
> pragma: no-cache
> user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) 
> AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2278.0 Safari/537.36
> referer: https://localhost:8443/blog-http2-push/push 
> <https://localhost:8443/blog-http2-push/push>
> ….
> 2015-01-18 10:11:58.899:DBUG:oejhs.HttpChannelOverHTTP2:         
> qtp565760380-27: HTTP2 Commit Response #1/798f5a73:
> HTTP/2 200 null
> Server: Jetty(9.3.0-SNAPSHOT)
> Content-Type: text/html;charset=iso-8859-1
> 2015-01-18 10:11:58.899:DBUG:oejhs.HttpTransportOverHTTP2:       
> qtp565760380-27: HTTP2 Response #1:
> HTTP/2 200
> Server: Jetty(9.3.0-SNAPSHOT)
> Content-Type: text/html;charset=iso-8859-1
> ….
> 2015-01-18 10:11:58.900:DBUG:oejhs.HttpTransportOverHTTP2:       
> qtp565760380-27: HTTP2 Response #1 committed
> …
> 15 seconds later
> ...
> 2015-01-18 10:12:13.801:DBUG:oeji.IdleTimeout:              
> Scheduler-1530388690: 
> HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED}
>  idle timeout check, elapsed: 15004 ms, remaining: -4 ms
> 2015-01-18 10:12:13.801:DBUG:oeji.IdleTimeout:              
> Scheduler-1530388690: 
> HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED}
>  idle timeout expired
> 2015-01-18 10:12:13.801:DBUG:oejh.HTTP2Stream:              
> Scheduler-1530388690: Idle timeout 15000ms expired on 
> HTTP2Stream@48dd8f83{id=2,sendWindow=10485760,recvWindow=65535,reset=false,REMOTELY_CLOSED}
> 
> _______________________________________________
> jetty-users mailing list
> [email protected] <mailto:[email protected]>
> To change your delivery options, retrieve your password, or unsubscribe from 
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users 
> <https://dev.eclipse.org/mailman/listinfo/jetty-users>
> 
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe from 
> this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users

_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from 
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users

Reply via email to