On Wednesday, August 01, 2012 05:58:23 PM Oleg Kalnichevski wrote: > Hi Daniel > > I believe I have fixed the thread synchronization issue. All tests > repeatedly passed for me. Could you please have a look at my changes and > confirm that everything is more or less sane and HTTP transport still > performs at an acceptable level?
Finally got a chance to look at all the stuff you did. Awesome work! > As the next I could optimize the code and hopefully bring its > performance closer to that of the default blocking transport. > > I also noticed that for some reason additional connections get open and > closed without transmitting any data, which obviously should not be > happening. I'll investigate the problem if you confirm that you want me > to proceed. Interesting. I'm actually not seeing that now. :-) I ran the testCalls things with small and larger requests and in both cases, all 20K requests went on a single connection. Was quite impressed. (I actually expected the Jetty backend to have a limit on number of requests per keepalive as I ran into a similar setting in Tomcat last week that defaulted to 100). I just went through and added a little bit of error handling into it as well. Mostly around a connection refused exception and for read timeouts. For the read timeout, I DID have to add an ioct.shutdown() in the SharedInBuffer consume method when read or it kept getting called repeatedly since we didn't read anything. Also started working on the resends and such, but haven't yet added a testcase for that. So, stuff I have left to look at are basically: (and I've add //FIXME comments in the code where I *think* something needs to happen) 1) Proxy support 2) SSL/TLS 3) Connection timeouts CXF allows these to be configured on a per-client (and sometimes even per- request) basis. It looks like HC seems to have these on the connection factory. I thought about a new factory per request, but the pool seems to be tied to the connection factory as well and a full pool per request would be aweful. I then wanted to see if I could pass some sort of contextual object in (there is that BasicHttpContext object) that I could pull information out of at connection time or similar, but I could really figure out where that went, at least not until after the IOSession is setup, which is too late. Also thought about a thread local, but that doesn't work with the async connection. Any ideas on that would be a huge help. I'll keep digging a bit as well. Kind of learning more about the HC stuff and NIO and all kind of things, which is kind of fun. :-) -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
