Folks, The message I am forwarding was sent to the HttpClient user list a while ago. I think the changes proposed by Balazs are very reasonable. Unfortunately Balazs never submitted the patch and did not return emails I had sent him off-list. Nonetheless, I think we should consider changing MultithreadedConnectionManager's behavior as proposed by Balazs and include those changes into 3.1-beta1
Mike, what do you think? Oleg -------- Forwarded Message -------- From: SZÜCS Balazs <[EMAIL PROTECTED]> Reply-To: HttpClient User Discussion <httpclient-user@jakarta.apache.org> To: 'HttpClient User Discussion' <httpclient-user@jakarta.apache.org> Subject: RE: MultithreadedConnectionManager pooling strategy Date: Mon, 15 May 2006 15:26:08 +0200 Hello, I made two changes to the HttpClient code: 1) in the class ConnectionPool in the method getFreeConnection( ... ) I changed freeConnections.removeFirst() to freeConnections.removeLast(). Now the container for free connections behaves as a stack rather than a queue. 2) additionally I changed the IdleConnectionTimeoutThread, in the run() method I added connectionManager.deleteClosedConnections() so that the pool size is maintained correctly. What do you think? Balazs -----Original Message----- From: Oleg Kalnichevski <[EMAIL PROTECTED]>@DSI Sent: Donnerstag, 04. Mai 2006 18:07 To: HttpClient User Discussion Subject: Re: MultithreadedConnectionManager pooling strategy On Thu, 2006-05-04 at 18:00 +0200, SZÜCS Balazs wrote: > Hello, > > I'm using HttpClient 3.0-rc4, and I have a question about the connection > pooling strategy of MultithreadedConnectionManager. The reason for that is > that I use an IdleConnectionTimeoutThread (runs every 60 secs, using a > timeout of 60 secs) configured with a MultithreadedConnectionManager, and > idle connections don't seem to get closed by the > IdleConnectionTimeoutThread. However, on a long time span (overnight) the > pool size decreases, but I would expect a quicker reaction, when my > application is not unter heavy load. > > I've taken a look at the source of MultithreadedConnectionManager, and I > realized, that free connections are stored in a linked list. On demand the > next free connection is taken from the BEGINNING of the list, while after > usage the connection is put back to the END of the list. This seems to me a > round robin behavior, and it might prevent connections reaching the > predefined age for being recognized as idle. If there is some load, each > free connection will be used, instead of just using a few of them, and > letting the rest age. > > Does that make any sense? > Balazs, Yes, it does. Please file a bug report in Bugzilla. Feel free to provide a patch for the problem. We love patches ;-) Oleg > Thank you! > > Balazs --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]