3 Replies Latest reply on May 7, 2004 12:58 PM by Adrian Brock

    Unable to fill the pool due to timeout!

    dxbcto Newbie

      Hello,

      I am getting the above warning with timeout of 500 msec when I stress my application. It is hard to reproduce the failure (i.e. it does not seem to happen if I have traces on and it does not happen every time I run a test) but I have seen it pop up every once in a while.

      My application has the following high-level architecture:
      SessionBean -> MDB -> EntityBean -> MDB.

      The client uses the session bean to queue up about 500 messages which load 500 entity beans. Then a perodic timer comes along to talk to the entity beans which queue up messages to another queue which runs some computation.

      My MDBs are configured with the default (i.e. 15) number of concurrent jms sessions and the default (ie. 100) number of MDB instances.

      I appreciate any help in letting me know the conditions in which this happens. Thanks in advance for any help.

      Regards,
      aboudank

        • 1. Re: Unable to fill the pool due to timeout!
          Adrian Brock Master

          Please read "READ THIS FIRST".
          You are unlikely to get a response unless you at least post the full error message.

          • 2. Re: Unable to fill the pool due to timeout!
            dxbcto Newbie

            Adrian,

            Thank u for your response.

            I have been trying to get the failure again and I could not! It scares me because I have not changed anything and I re-ran the test several times without the error. I did search for the error message in JBoss 3.2.3 source and I found it in org.jboss.resource.connectionmanager.InternalManagedConnectionPool module:

            public void fillToMin()
             {
             boolean gotPermit = false;
             try
             {
             if (permits.attempt(poolParams.blockingTimeout))
             {
             gotPermit = true;
             while (true)
             {
             synchronized (cls)
             {
             if (shutdown)
             return;
            
             // We have enough connections now
             if (getMinSize() - connectionCounter.getGuaranteedCount() <= 0)
             return;
            
             try
             {
             ConnectionListener cl = createConnectionEventListener(defaultSubject, defaultCri);
             cls[++currentPoolIndex] = cl;
             }
             catch (ResourceException re)
             {
             log.warn("Unable to fill pool ", re);
             return;
             }
             }
             }
             }
             else
             {
             // we timed out
             log.warn("Unable to fill the pool due to timeout ( " +
             poolParams.blockingTimeout + " [ms] )");
             }
             }
             catch (InterruptedException ie)
             {
             log.warn("Interrupted while requesting permit!");
             }
             finally
             {
             if (gotPermit)
             permits.release();
             }
             }


            This is the first time that I look into JBoss code so it is going to take me a while to know what is going on...therefore I would appreciate any extra help to expedite the process.

            Thank you again.

            Regards,
            aboudank


            • 3. Re: Unable to fill the pool due to timeout!
              Adrian Brock Master

              It is just a warning. It says it could not check whether the to fill the pool because all the
              connections were checked out.
              This indicates one of two things:
              1) You are not returning the connections to the pool
              2) Your pool isn't big enough and/or you want to increase the blocking timeout.