1313
1414package com .ning .http .client .providers .grizzly ;
1515
16+ import com .ning .http .client .AsyncHandler ;
17+ import com .ning .http .client .AsyncHandlerExtensions ;
18+ import com .ning .http .client .AsyncHttpClient ;
19+ import com .ning .http .client .AsyncHttpClientConfig ;
20+ import com .ning .http .client .AsyncHttpProvider ;
21+ import com .ning .http .client .AsyncHttpProviderConfig ;
22+ import com .ning .http .client .Body ;
23+ import com .ning .http .client .BodyGenerator ;
24+ import com .ning .http .client .ConnectionsPool ;
25+ import com .ning .http .client .FluentCaseInsensitiveStringsMap ;
26+ import com .ning .http .client .FluentStringsMap ;
27+ import com .ning .http .client .HttpResponseBodyPart ;
28+ import com .ning .http .client .HttpResponseHeaders ;
29+ import com .ning .http .client .HttpResponseStatus ;
30+ import com .ning .http .client .ListenableFuture ;
31+ import com .ning .http .client .MaxRedirectException ;
32+ import com .ning .http .client .Part ;
33+ import com .ning .http .client .PerRequestConfig ;
34+ import com .ning .http .client .ProxyServer ;
35+ import com .ning .http .client .Realm ;
36+ import com .ning .http .client .Request ;
37+ import com .ning .http .client .RequestBuilder ;
38+ import com .ning .http .client .Response ;
39+ import com .ning .http .client .UpgradeHandler ;
40+ import com .ning .http .client .cookie .Cookie ;
41+ import com .ning .http .client .cookie .CookieDecoder ;
42+ import com .ning .http .client .filter .FilterContext ;
43+ import com .ning .http .client .filter .ResponseFilter ;
44+ import com .ning .http .client .listener .TransferCompletionHandler ;
45+ import com .ning .http .client .ntlm .NTLMEngine ;
1646import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .BUFFER_WEBSOCKET_FRAGMENTS ;
1747import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .MAX_HTTP_PACKET_HEADER_SIZE ;
1848import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .TRANSPORT_CUSTOMIZER ;
49+ import com .ning .http .client .websocket .WebSocket ;
50+ import com .ning .http .client .websocket .WebSocketByteListener ;
51+ import com .ning .http .client .websocket .WebSocketCloseCodeReasonListener ;
52+ import com .ning .http .client .websocket .WebSocketListener ;
53+ import com .ning .http .client .websocket .WebSocketPingListener ;
54+ import com .ning .http .client .websocket .WebSocketPongListener ;
55+ import com .ning .http .client .websocket .WebSocketTextListener ;
56+ import com .ning .http .client .websocket .WebSocketUpgradeHandler ;
57+ import com .ning .http .multipart .MultipartBody ;
58+ import com .ning .http .multipart .MultipartRequestEntity ;
59+ import com .ning .http .util .AsyncHttpProviderUtils ;
60+ import com .ning .http .util .AuthenticatorUtils ;
61+ import static com .ning .http .util .MiscUtil .isNonEmpty ;
62+ import static com .ning .http .util .MiscUtil .isNonEmpty ;
1963import static com .ning .http .util .MiscUtil .isNonEmpty ;
2064
65+ import com .ning .http .util .ProxyUtils ;
66+ import com .ning .http .util .SslUtils ;
2167import java .io .ByteArrayOutputStream ;
2268import java .io .File ;
2369import java .io .FileInputStream ;
4288import java .util .concurrent .TimeoutException ;
4389import java .util .concurrent .atomic .AtomicInteger ;
4490import java .util .concurrent .atomic .AtomicLong ;
45-
4691import javax .net .ssl .SSLContext ;
47-
4892import org .glassfish .grizzly .Buffer ;
93+ import org .glassfish .grizzly .CloseListener ;
94+ import org .glassfish .grizzly .CloseType ;
95+ import org .glassfish .grizzly .Closeable ;
4996import org .glassfish .grizzly .CompletionHandler ;
5097import org .glassfish .grizzly .Connection ;
5198import org .glassfish .grizzly .EmptyCompletionHandler ;
80127import org .glassfish .grizzly .impl .SafeFutureImpl ;
81128import org .glassfish .grizzly .memory .Buffers ;
82129import org .glassfish .grizzly .memory .MemoryManager ;
130+ import org .glassfish .grizzly .nio .RoundRobinConnectionDistributor ;
83131import org .glassfish .grizzly .nio .transport .TCPNIOConnectorHandler ;
84132import org .glassfish .grizzly .nio .transport .TCPNIOTransport ;
85133import org .glassfish .grizzly .nio .transport .TCPNIOTransportBuilder ;
86134import org .glassfish .grizzly .ssl .SSLEngineConfigurator ;
87135import org .glassfish .grizzly .ssl .SSLFilter ;
88136import org .glassfish .grizzly .strategies .SameThreadIOStrategy ;
89137import org .glassfish .grizzly .strategies .WorkerThreadIOStrategy ;
138+ import org .glassfish .grizzly .threadpool .ThreadPoolConfig ;
90139import org .glassfish .grizzly .utils .BufferOutputStream ;
91140import org .glassfish .grizzly .utils .Charsets ;
92141import org .glassfish .grizzly .utils .DelayedExecutor ;
103152import org .slf4j .Logger ;
104153import org .slf4j .LoggerFactory ;
105154
106- import com .ning .http .client .AsyncHandler ;
107- import com .ning .http .client .AsyncHandlerExtensions ;
108- import com .ning .http .client .AsyncHttpClient ;
109- import com .ning .http .client .AsyncHttpClientConfig ;
110- import com .ning .http .client .AsyncHttpProvider ;
111- import com .ning .http .client .AsyncHttpProviderConfig ;
112- import com .ning .http .client .Body ;
113- import com .ning .http .client .BodyGenerator ;
114- import com .ning .http .client .ConnectionsPool ;
115- import com .ning .http .client .FluentCaseInsensitiveStringsMap ;
116- import com .ning .http .client .FluentStringsMap ;
117- import com .ning .http .client .HttpResponseBodyPart ;
118- import com .ning .http .client .HttpResponseHeaders ;
119- import com .ning .http .client .HttpResponseStatus ;
120- import com .ning .http .client .ListenableFuture ;
121- import com .ning .http .client .MaxRedirectException ;
122- import com .ning .http .client .Part ;
123- import com .ning .http .client .PerRequestConfig ;
124- import com .ning .http .client .ProxyServer ;
125- import com .ning .http .client .Realm ;
126- import com .ning .http .client .Request ;
127- import com .ning .http .client .RequestBuilder ;
128- import com .ning .http .client .Response ;
129- import com .ning .http .client .UpgradeHandler ;
130- import com .ning .http .client .cookie .Cookie ;
131- import com .ning .http .client .cookie .CookieDecoder ;
132- import com .ning .http .client .filter .FilterContext ;
133- import com .ning .http .client .filter .ResponseFilter ;
134- import com .ning .http .client .listener .TransferCompletionHandler ;
135- import com .ning .http .client .ntlm .NTLMEngine ;
136- import com .ning .http .client .websocket .WebSocket ;
137- import com .ning .http .client .websocket .WebSocketByteListener ;
138- import com .ning .http .client .websocket .WebSocketCloseCodeReasonListener ;
139- import com .ning .http .client .websocket .WebSocketListener ;
140- import com .ning .http .client .websocket .WebSocketPingListener ;
141- import com .ning .http .client .websocket .WebSocketPongListener ;
142- import com .ning .http .client .websocket .WebSocketTextListener ;
143- import com .ning .http .client .websocket .WebSocketUpgradeHandler ;
144- import com .ning .http .multipart .MultipartBody ;
145- import com .ning .http .multipart .MultipartRequestEntity ;
146- import com .ning .http .util .AsyncHttpProviderUtils ;
147- import com .ning .http .util .AuthenticatorUtils ;
148- import com .ning .http .util .ProxyUtils ;
149- import com .ning .http .util .SslUtils ;
150- import org .glassfish .grizzly .CloseListener ;
151- import org .glassfish .grizzly .CloseType ;
152- import org .glassfish .grizzly .Closeable ;
153-
154155/**
155156 * A Grizzly 2.0-based implementation of {@link AsyncHttpProvider}.
156157 *
@@ -420,6 +421,24 @@ public void onTimeout(Connection connection) {
420421fcb .add (clientFilter );
421422clientTransport .getAsyncQueueIO ().getWriter ()
422423 .setMaxPendingBytesPerConnection (AsyncQueueWriter .AUTO_SIZE );
424+
425+ clientTransport .setNIOChannelDistributor (
426+ new RoundRobinConnectionDistributor (clientTransport ,false ,false ));
427+
428+ final int kernelThreadsCount =
429+ clientConfig .getIoThreadMultiplier () *
430+ Runtime .getRuntime ().availableProcessors ();
431+
432+ clientTransport .setSelectorRunnersCount (kernelThreadsCount );
433+ clientTransport .setKernelThreadPoolConfig (
434+ ThreadPoolConfig .defaultConfig ()
435+ .setCorePoolSize (kernelThreadsCount )
436+ .setMaxPoolSize (kernelThreadsCount )
437+ .setPoolName ("grizzly-ahc-kernel" )
438+ // .setPoolName(discoverTestName("grizzly-ahc-kernel")) // uncomment for tests to track down the leaked threads
439+ );
440+
441+
423442final TransportCustomizer customizer = (TransportCustomizer )
424443providerConfig .getProperty (TRANSPORT_CUSTOMIZER );
425444if (customizer !=null ) {
@@ -428,7 +447,7 @@ public void onTimeout(Connection connection) {
428447doDefaultTransportConfig ();
429448 }
430449fcb .add (new WebSocketFilter ());
431-
450+
432451clientTransport .setProcessor (fcb .build ());
433452
434453 }