commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From sebb <seb...@gmail.com>
Subject Re: [dbcp] multipleThreads test
Date Mon, 11 Jan 2010 00:09:11 GMT
On 10/01/2010, Phil Steitz <phil.steitz@gmail.com> wrote:
> sebb wrote:
>  > On 10/01/2010, Phil Steitz <phil.steitz@gmail.com> wrote:
>  >> sebb wrote:
>  >>  > On 10/01/2010, Phil Steitz <phil.steitz@gmail.com> wrote:
>  >>  >> sebb wrote:
>  >>  >>  > Thanks.
>  >>  >>  >
>  >>  >>  > Looks like I did not complete the fixes properly when I added
the
>  >>  >>  > loopOnce parameter to PoolTest.
>  >>  >>
>  >>  >>  I think I found (and fixed) another problem.  See r897720.
>  >>  >
>  >>  > The wait in question is purely to allow the threads to start, so I
>  >>  > think it should not depend on the value of maxWait (or indeed
>  >>  > holdTime). Originally it was set to 10L * holdTime, which meant that
>  >>  > it did always not work well for holdTime = 1.
>  >>
>  >>
>  >> OK, then I must be missing something.  Since stop can interrupt run,
>  >>  it would seem to me that entering the stop loop immediately after
>  >>  this wait is going to stop all of the threads, giving them all just
>  >>  whatever the wait is to complete.
>  >
>  > In the case where the loop only operates once, so long as the wait
>  > time is long enough to allow all the threads to start then it won't
>  > affect further processing of the PoolTest threads. However if it is
>  > much longer than maxWait or holdTime, the test will take longer than
>  > necessary.
>  >
>  > For the multi-loop case, the wait time must again be enough to allow
>  > the threads to start. This guarantees that the threads will run at
>  > least once. The overall run-time of the test (and the number of loops)
>  > is controlled by the wait time, because the holdTime is very short in
>  > comparison.
>
>
> You are right.  Sorry.

No problem.

It looks like only the testMaxWait() test now loops more that once.
I think testMultipleThreads1() should also loop, as this will show
that 20 threads can share 10 connections without problems. I'll fix
that shortly.

I'm not sure whether testMaxWait() needs to allow looping; however it
should never do so as all threads will timeout.


>
>  Phil
>
> >
>  >>  That, I was assuming, is why the
>  >>  1.2.2 version waited 10 * holdTime, which would not really have been
>  >>  quite right - better a function of maxWait.
>  >
>  > The 1.2.2 version also handled completion differently - it did not
>  > wait for the threads to complete, and it did not have a loopOnce
>  > option. Provided that maxWait expired before holdTime, then at least
>  > one thread would fail, and this would stop all the threads. But this
>  > was not always happening, so I introduced the loopOnce parameter.
>  >
>  >>  Phil
>  >>
>  >>
>  >>  >
>  >>  >>  >
>  >>  >>  > It was quite tricky following the Continuum build output, as
the date
>  >>  >>  > was 2 days behind, and the mail for the failed runs is not
always
>  >>  >>  > accurate - if the "Exit code" is 127, then most of the email
contents
>  >>  >>  > is inaccurate.
>  >>  >>  >
>  >>  >>  > I have raised http://jira.codehaus.org/browse/CONTINUUM-2428
for the
>  >>  >>  > misleading info.
>  >>  >>  >
>  >>  >>  > On 10/01/2010, Phil Steitz <phil.steitz@gmail.com> wrote:
>  >>  >>  >> From the debugging added to some previously failed builds,
I saw
>  >>  >>  >>  loop = 2 for some threads.  Threads should not be looping.
 Second
>  >>  >>  >>  loop by a thread that succeeded the first time that throws
will not
>  >>  >>  >>  change success state - so it looks like a success ->
not enough
>  >>  >>  >>  failures.
>  >>  >>  >>
>  >>  >>  >>  Phil
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >>  psteitz@apache.org wrote:
>  >>  >>  >>  > Author: psteitz
>  >>  >>  >>  > Date: Sun Jan 10 18:21:03 2010
>  >>  >>  >>  > New Revision: 897678
>  >>  >>  >>  >
>  >>  >>  >>  > URL: http://svn.apache.org/viewvc?rev=897678&view=rev
>  >>  >>  >>  > Log:
>  >>  >>  >>  > Eliminated unintended looping in mutipleThreads test.
>  >>  >>  >>  >
>  >>  >>  >>  > Modified:
>  >>  >>  >>  >     commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestConnectionPool.java
>  >>  >>  >>  >     commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java
>  >>  >>  >>  >     commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java
>  >>  >>  >>  >
>  >>  >>  >>  > Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestConnectionPool.java
>  >>  >>  >>  > URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestConnectionPool.java?rev=897678&r1=897677&r2=897678&view=diff
>  >>  >>  >>  > ==============================================================================
>  >>  >>  >>  > --- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestConnectionPool.java
(original)
>  >>  >>  >>  > +++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/TestConnectionPool.java
Sun Jan 10 18:21:03 2010
>  >>  >>  >>  > @@ -683,7 +683,21 @@
>  >>  >>  >>  >          }
>  >>  >>  >>  >      }
>  >>  >>  >>  >
>  >>  >>  >>  > -    protected void multipleThreads(final int holdTime,
final boolean expectError, long maxWait)
>  >>  >>  >>  > +    /**
>  >>  >>  >>  > +     * Launches a group of 2 * getMaxActive() threads,
each of which will attempt to obtain a connection
>  >>  >>  >>  > +     * from the pool, hold it for <holdTime>
ms, and then return it to the pool.  If <loopOnce> is false,
>  >>  >>  >>  > +     * threads will continue this process indefinitely.
 If <expectingError> is true, exactly 1/2 of the
>  >>  >>  >>  > +     * threads are expected to either throw exceptions
or fail to complete. If <expectingError> is false,
>  >>  >>  >>  > +     * all threads are expected to complete successfully.
>  >>  >>  >>  > +     *
>  >>  >>  >>  > +     * @param holdTime time in ms that a thread
holds a connection before returning it to the pool
>  >>  >>  >>  > +     * @param expectError whether or not an error
is expected
>  >>  >>  >>  > +     * @param loopOnce whether threads should complete
the borrow - hold - return cycle only once, or loop indefinitely
>  >>  >>  >>  > +     * @param maxWait passed in by client - has
no impact on the test itself, but does get reported
>  >>  >>  >>  > +     *
>  >>  >>  >>  > +     * @throws Exception
>  >>  >>  >>  > +     */
>  >>  >>  >>  > +    protected void multipleThreads(final int holdTime,
final boolean expectError, final boolean loopOnce, final long maxWait)
>  >>  >>  >>  >              throws Exception {
>  >>  >>  >>  >                  long startTime = timeStamp();
>  >>  >>  >>  >                  final PoolTest[] pts = new PoolTest[2
* getMaxActive()];
>  >>  >>  >>  > @@ -696,8 +710,7 @@
>  >>  >>  >>  >                      }
>  >>  >>  >>  >                  };
>  >>  >>  >>  >                  for (int i = 0; i < pts.length;
i++) {
>  >>  >>  >>  > -                    // If we are expecting an error,
don't allow successful threads to loop
>  >>  >>  >>  > -                    (pts[i] = new PoolTest(threadGroup,
holdTime, expectError)).start();
>  >>  >>  >>  > +                    (pts[i] = new PoolTest(threadGroup,
holdTime, expectError, loopOnce)).start();
>  >>  >>  >>  >                  }
>  >>  >>  >>  >
>  >>  >>  >>  >                  Thread.sleep(100L); // Wait for
long enough to allow threads to start
>  >>  >>  >>  >
>  >>  >>  >>  > Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java
>  >>  >>  >>  > URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java?rev=897678&r1=897677&r2=897678&view=diff
>  >>  >>  >>  > ==============================================================================
>  >>  >>  >>  > --- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java
(original)
>  >>  >>  >>  > +++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestPerUserPoolDataSource.java
Sun Jan 10 18:21:03 2010
>  >>  >>  >>  > @@ -378,11 +378,11 @@
>  >>  >>  >>  >          final int defaultMaxWait = 430;
>  >>  >>  >>  >          ((PerUserPoolDataSource) ds).setDefaultMaxWait(defaultMaxWait);
>  >>  >>  >>  >          ((PerUserPoolDataSource) ds).setPerUserMaxWait("foo",new
Integer(defaultMaxWait));
>  >>  >>  >>  > -        multipleThreads(1, false, defaultMaxWait);
>  >>  >>  >>  > +        multipleThreads(1, false, false, defaultMaxWait);
>  >>  >>  >>  >      }
>  >>  >>  >>  >
>  >>  >>  >>  >      public void testMultipleThreads2() throws Exception
{
>  >>  >>  >>  > -        multipleThreads(2 * (int)(getMaxWait()),
true, getMaxWait());
>  >>  >>  >>  > +        multipleThreads(2 * (int)(getMaxWait()),
true, false, getMaxWait());
>  >>  >>  >>  >      }
>  >>  >>  >>  >
>  >>  >>  >>  >      public void testTransactionIsolationBehavior()
throws Exception {
>  >>  >>  >>  >
>  >>  >>  >>  > Modified: commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java
>  >>  >>  >>  > URL: http://svn.apache.org/viewvc/commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java?rev=897678&r1=897677&r2=897678&view=diff
>  >>  >>  >>  > ==============================================================================
>  >>  >>  >>  > --- commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java
(original)
>  >>  >>  >>  > +++ commons/proper/dbcp/trunk/src/test/org/apache/commons/dbcp/datasources/TestSharedPoolDataSource.java
Sun Jan 10 18:21:03 2010
>  >>  >>  >>  > @@ -368,11 +368,11 @@
>  >>  >>  >>  >          // some JVMs, e.g. Windows.
>  >>  >>  >>  >          final int defaultMaxWait = 430;
>  >>  >>  >>  >          ((SharedPoolDataSource) ds).setMaxWait(defaultMaxWait);
>  >>  >>  >>  > -        multipleThreads(1, false, defaultMaxWait);
>  >>  >>  >>  > +        multipleThreads(1, false, false, defaultMaxWait);
>  >>  >>  >>  >      }
>  >>  >>  >>  >
>  >>  >>  >>  >      public void testMultipleThreads2() throws Exception
{
>  >>  >>  >>  > -        multipleThreads(2 * (int)(getMaxWait()),
true, getMaxWait());
>  >>  >>  >>  > +        multipleThreads(2 * (int)(getMaxWait()),
true, false, getMaxWait());
>  >>  >>  >>  >      }
>  >>  >>  >>  >
>  >>  >>  >>  >      public void testTransactionIsolationBehavior()
throws Exception {
>  >>  >>  >>  >
>  >>  >>  >>  >
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >> ---------------------------------------------------------------------
>  >>  >>  >>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  >>  >>  >>  For additional commands, e-mail: dev-help@commons.apache.org
>  >>  >>  >>
>  >>  >>  >>
>  >>  >>  >
>  >>  >>  > ---------------------------------------------------------------------
>  >>  >>  > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  >>  >>  > For additional commands, e-mail: dev-help@commons.apache.org
>  >>  >>  >
>  >>  >>
>  >>  >>
>  >>  >>  ---------------------------------------------------------------------
>  >>  >>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  >>  >>  For additional commands, e-mail: dev-help@commons.apache.org
>  >>  >>
>  >>  >>
>  >>  >
>  >>  > ---------------------------------------------------------------------
>  >>  > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  >>  > For additional commands, e-mail: dev-help@commons.apache.org
>  >>  >
>  >>
>  >>
>  >>  ---------------------------------------------------------------------
>  >>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  >>  For additional commands, e-mail: dev-help@commons.apache.org
>  >>
>  >>
>  >
>  > ---------------------------------------------------------------------
>  > To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  > For additional commands, e-mail: dev-help@commons.apache.org
>  >
>
>
>  ---------------------------------------------------------------------
>  To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
>  For additional commands, e-mail: dev-help@commons.apache.org
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@commons.apache.org
For additional commands, e-mail: dev-help@commons.apache.org


Mime
View raw message