commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "German Castro Donoso" <gecas...@gmail.com>
Subject Re: Problem with pool
Date Tue, 05 Aug 2008 20:18:28 GMT
I have to do something special when a validateObject fails or when I
invalidate an object?

The error always occurs after that I discard an object, but I only see one
call to invalidateObject XOR returnObject...

Germán

On Tue, Aug 5, 2008 at 5:21 AM, Phil Steitz <phil@steitz.com> wrote:

> German Castro Donoso wrote:
>
>> Hi,
>>
>> The pool is the version 1.4
>>
>> The settings for the pool are:
>>
>>            pool = new GenericObjectPool(new PinCenterPoolFactory(), 10);
>>            pool.setTestWhileIdle(true);
>>            pool.setMaxIdle(5);
>>            pool.setTimeBetweenEvictionRunsMillis(45000);
>>
>> pool.setWhenExhaustedAction(GenericObjectPool.WHEN_EXHAUSTED_FAIL);
>>
>>
>>
>> The secuence of execution that I'm seeying is:
>>
>> 18:05:00 <DEBUG>[validateObject] Send message keepalive failed
>> Caused by: java.net.SocketException: Connection reset
>>    at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:96)
>>    at java.net.SocketOutputStream.write(SocketOutputStream.java:124)
>>    at
>>
>> com.sodimac.irtm.pincenter.PinConnection.sendRequest(PinConnection.java:170)
>>    ... 6 more
>> 18:05:03 <DEBUG>[destroyObject] Closing socket (client port=33792)
>> 18:05:03 <DEBUG>[destroyObject] Closing socket (client port=33792)
>> ...
>> ...
>> 18:24:58 <DEBUG>[getConnection-63262596] Objects in pool idle=1 active=-1
>>
> What would explain both the active = -1 here and multiple clients ending up
> with the same instances is if your client code is returning the same
> instance twice without a borrowObject in between.  See the note here:
> http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPool.html#returnObject(java.lang.Object)<http://commons.apache.org/pool/api-1.4/org/apache/commons/pool/impl/GenericObjectPool.html#returnObject%28java.lang.Object%29>
>
> Phil
>
>
>  18:24:58 <DEBUG>[sendRequest-63262596] Sending message (client port:35525)
>> 18:25:00 <DEBUG>[getConnection-730089636] Objects in pool idle=0 active=0
>> 18:25:00 <DEBUG>[validateObject] Sending keepalive message
>> 18:25:00 <DEBUG>[sendRequest-730089636] Enviando mensaje (client
>> port:35525)
>> 18:25:00 <DEBUG>[sendRequest-63262596] Recibiendo mensaje (client
>> port:35525)
>> 18:25:01 <DEBUG>[sendRequest-730089636] Recibiendo mensaje (client
>> port:35525)
>> 18:25:01 <DEBUG>[close-63262596] Returning socket to pool
>> 18:25:01 <DEBUG>[close-730089636] Returning socket to pool
>>
>>
>>
>> The main code of the pool is (I deleted some unimportants lines of code):
>>
>> public class PinPoolFactory implements PoolableObjectFactory
>> {
>>    private int numFails;
>>
>>    public PinPoolFactory() throws BadPropertiesException {
>>        super();
>>    }
>>
>>    public Object makeObject() throws UnknownHostException, IOException {
>>        PinConnection con = new PinConnection();
>>        return con;
>>    }
>>
>>    public void destroyObject(Object o){
>>        PinConnection con = (PinConnection)o;
>>        try{
>>            con.disconnect();
>>        }catch(Exception e){
>>        }
>>    }
>>
>>    // Here we check that the connection is alive, first with the socket
>> state.
>>    // If socket is connected we have to send a "keep alive" packet to
>> server.
>>    public boolean validateObject(Object o){
>>        PinConnection con = (PinConnection)o;
>>
>>        if(!con.isConnected()){
>>            return false;
>>        }
>>
>>        while(!con.keepAlive() && con.getFailedMessages()<numFails){
>>            try{
>>                con.disconnect();
>>                con.connect();
>>            }catch(Exception e){
>>            }
>>        };
>>
>>        if(con.getFailedMessages()!=0){
>>            try{
>>                con.disconnect();
>>            }catch(Exception e){}
>>
>>            return false;
>>        }
>>
>>        return true;
>>    }
>>
>>    public void activateObject(Object o){
>>    }
>>
>>    public void passivateObject(Object o){
>>    }
>> }
>>
>>
>> Any Idea?
>>
>> Germán
>>
>> On Sun, Aug 3, 2008 at 10:20 AM, Phil Steitz <phil@steitz.com> wrote:
>>
>>
>>
>>> German Castro Donoso wrote:
>>>
>>>
>>>
>>>> Hello,
>>>>
>>>> I have a pool that contains tcp sockets, looking the log files i've
>>>> noticed
>>>> that some times when a socket fails (in the validateObject function) the
>>>> object is destroyed... but twice. After that, when the pool recive 2
>>>> simultaneus request for a socket, the pool give the same socket to two
>>>> diferent clients at the same time.
>>>>
>>>> Anybody had have a similar problem? it's a bug in my code or a bug in
>>>> the
>>>> pool?
>>>>
>>>>
>>>>
>>>>
>>>>
>>> What version of pool are you running?  Can you provide more info on
>>> configuration and what you are seeing in your code?
>>>
>>> Phil
>>>
>>>
>>>
>>>> Thanks for any help.
>>>> Germán
>>>>
>>>>
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: user-help@commons.apache.org
>>>
>>>
>>>
>>>
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message