Amazon S3 service ConnectionPoolTimeoutException: Timeout waiting for connection from pool -


when work s3 on amazon, keep getting ugly connectionpooltimeoutexception.

the problem due front end of application, can not close opened s3 objects before front end done them have implemented solution :

@autowired private amazons3 s3client; // credentials set properly.  private static list<s3object> openedobjects = new arraylist<s3object>();  // initialize bucket : private string bucketname = "myshinynewbucket"; private synchronized boolean initbucket(){     try{         boolean exists = null;         try{             exists = s3client.doesbucketexist(bucketname);         }catch(exception e1){             system.out.println("\n\n\ttoo many opened objects ; closing...\n\n");             deleteopeneds3objects();             exists = s3client.doesbucketexist(bucketname);         }         if(exists!=null){             if(!exists){                 s3client.createbucket(new createbucketrequest(bucketname));             }             return true;         }     }     catch(exception e){         system.out.println("\n\n\tfailed initialize bucket.\n");         e.printstacktrace();     }     return false; }  private synchronized void deleteopeneds3objects(){     system.out.println("\n\tclosing opened objects...");     try{         for(int i=0 ; i<openedobjects.size() ; i++){             openedobjects.get(i).close();             openedobjects.remove(i);         }     }catch(exception e1){         system.out.println("\tcould not close opened s3 objects, first "+i);     }     system.out.println("\ttrying again :\n\n"); }  // : public final string getfromaws(final string amazonname){     s3object s3object = null;      if(initbucket()){         try{             try{                 s3object = s3client.getobject(new getobjectrequest(bucketname, amazonname));             }catch(amazonclientexception e){                 deleteopeneds3objects();                 s3object = s3client.getobject(new getobjectrequest(bucketname, amazonname));             }             openedobjects.add(s3object);             return s3object.getobjectcontent().gethttprequest().geturi().tostring();         }catch(exception e1){             if (((amazons3exception)e1).getstatuscode() == httpstatus.sc_not_found){                 system.out.println("\n\nno such object in bucket.\n");             }             else{                 system.out.println("\n\n\tcould not read bject bucket.\n\n");                 e1.printstacktrace();             }         }     }     return null; } 

yet, exception still happening.

org.apache.http.conn.connectionpooltimeoutexception: timeout waiting connection pool         @ org.apache.http.impl.conn.poolinghttpclientconnectionmanager.leaseconnection(poolinghttpclientconnectionmanager.java:286) ~[httpclient-4.5.1.jar!/:4.5.1]         @ org.apache.http.impl.conn.poolinghttpclientconnectionmanager$1.get(poolinghttpclientconnectionmanager.java:263) ~[httpclient-4.5.1.jar!/:4.5.1]         @ sun.reflect.generatedmethodaccessor144.invoke(unknown source) ~[na:na]         @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_91]         @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_91]         @ com.amazonaws.http.conn.clientconnectionrequestfactory$handler.invoke(clientconnectionrequestfactory.java:70) ~[aws-java-sdk-core-1.11.8.jar!/:na]         @ com.amazonaws.http.conn.$proxy188.get(unknown source) ~[na:na] ... 

only when ctrl+c in console, part closing opened s3 connections :

... caused by: java.lang.interruptedexception: operation interrupted         @ org.apache.http.pool.poolentryfuture.await(poolentryfuture.java:142) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.pool.abstractconnpool.getpoolentryblocking(abstractconnpool.java:306) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.pool.abstractconnpool.access$000(abstractconnpool.java:64) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.pool.abstractconnpool$2.getpoolentry(abstractconnpool.java:192) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.pool.abstractconnpool$2.getpoolentry(abstractconnpool.java:185) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.pool.poolentryfuture.get(poolentryfuture.java:107) ~[httpcore-4.4.4.jar!/:4.4.4]         @ org.apache.http.impl.conn.poolinghttpclientconnectionmanager.leaseconnection(poolinghttpclientconnectionmanager.java:276) ~[httpclient-4.5.1.jar!/:4.5.1]         @ org.apache.http.impl.conn.poolinghttpclientconnectionmanager$1.get(poolinghttpclientconnectionmanager.java:263) ~[httpclient-4.5.1.jar!/:4.5.1]         @ sun.reflect.generatedmethodaccessor144.invoke(unknown source) ~[na:na]         @ sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43) ~[na:1.8.0_91]         @ java.lang.reflect.method.invoke(method.java:498) ~[na:1.8.0_91]         @ com.amazonaws.http.conn.clientconnectionrequestfactory$handler.invoke(clientconnectionrequestfactory.java:70) ~[aws-java-sdk-core-1.11.8.jar!/:na]         @ com.amazonaws.http.conn.$proxy188.get(unknown source) ~[na:na]         @ org.apache.http.impl.execchain.mainclientexec.execute(mainclientexec.java:190) ~[httpclient-4.5.1.jar!/:4.5.1]         ... 148 common frames omitted           many opened objects. // <-- catches it.            closing opened objects...         not close opened s3 objects.         trying again :             failed initialize bucket. 

again, unfortunately not in position can close opened s3objects before leave functions in s3-client class. hope have had, wait until timeoutexception happens, catch it, closing opened objects , trying again. however, can't seem catch in right place.

please, help.

thank you.

i think sollution catch , process ugly timeoutexception in @controlleradvice class. have done , far have not had happen in app. i'll post confirmation once i'm sure.


Comments