Reusing this thread to note FTR that a new version of POOL is out and that
a DBCP PR based of the new POOL is in progress...

Gary

On Wed, Sep 23, 2020, 19:28 Gary Gregory <garydgreg...@gmail.com> wrote:

> On Wed, Sep 23, 2020 at 6:31 PM Phil Steitz <phil.ste...@gmail.com> wrote:
>
>>
>> On 9/23/20 2:57 PM, Gary Gregory wrote:
>> > This all sounds reasonable but it would be easier to see in a PR.
>>
>> I will do that once the new version of [pool] is released. Otherwise, I
>> would have to add snapshot dependency, which I am sure would cause CI to
>> fail.
>>
>
> OK, sounds good, I'll push out a [pool] RC later this week after the
> [dbcp] RC.
>
> Gary
>
>
>>
>> Phil
>>
>> >
>> > Gary
>> >
>> > On Tue, Sep 22, 2020 at 8:30 PM Phil Steitz <phil.ste...@gmail.com>
>> wrote:
>> >
>> >> On 9/14/20 10:10 AM, Gary Gregory wrote:
>> >>> On Mon, Sep 14, 2020 at 1:07 PM Phil Steitz <phil.ste...@gmail.com>
>> >> wrote:
>> >>>> On 9/14/20 9:36 AM, Gary Gregory wrote:
>> >>>>> This feature is now in Pool master. I will prepare an RC soon if you
>> >>>>> all think we are good to go so we can then move on to DBCP.
>> >>>> I am still working on testing this in the DBCP use case. Probably
>> best
>> >>>> to wait a little for others to review and for me to get the DBCP
>> change
>> >>>> tested against current pool sources.  I should be able to finish that
>> >>>> this weekend.
>> >> I implemented changes in DBCP, based on recently committed changes in
>> >> pool.  I made a few decisions that I would appreciate feedback on.
>> >>
>> >> 1. The JDBC abort method requires an Executor as actual parameter.  I
>> >> added a FixedThreadPool executor with a max of 3 threads to
>> >> PoolableConnectionFactory for this purpose.  Given that this operation
>> >> might hang sometimes, I thought it best to allow more than a single
>> >> thread.  I guess it could be configurable, but 3 seemed a reasonable
>> >> choice.  I copied the custom thread factory used by pool's
>> EvictionTimer
>> >> to source daemon threads based on ccl for this.  I then added a close()
>> >> method to PCF that closes the executor and modified BasicDataSource
>> >> close to call this.
>> >>
>> >> 2. I used p.getObject().getInnermostDelegate().abort(executor) in PCF
>> >> destroyObject when abandoned mode is passed in rather than just
>> >> getObject().abort as destroy invokes close (I wonder if that is a bug?)
>> >>
>> >> 3. I changed JdbcBridge#abort to remove the checkOpen() check.  I was
>> >> getting exceptions in my concurrency tests where connections were being
>> >> closed but then considered abandoned.  This is a legit race that abort
>> >> will generally handle fine and I don't see the need to throw.
>> >>
>> >> Phil
>> >>
>> >>> Sounds good.
>> >>>
>> >>> Gary
>> >>>
>> >>>> Phil
>> >>>>
>> >>>>> Gary
>> >>>>>
>> >>>>> On Tue, Sep 8, 2020 at 9:16 AM Gary Gregory <garydgreg...@gmail.com
>> >
>> >> wrote:
>> >>>>>> FWIW, I like the name "DestroyMode" because it matches the
>> "destroy"
>> >> in the method name.
>> >>>>>> Gary
>> >>>>>>
>> >>>>>> On Mon, Sep 7, 2020, 19:08 Gary Gregory <garydgreg...@gmail.com>
>> >> wrote:
>> >>>>>>> On Mon, Sep 7, 2020 at 6:02 PM Phil Steitz <phil.ste...@gmail.com
>> >
>> >> wrote:
>> >>>>>>>> On 9/3/20 2:44 AM, Mark Thomas wrote:
>> >>>>>>>>> On 31/08/2020 01:05, Phil Steitz wrote:
>> >>>>>>>>>
>> >>>>>>>>> <snip/>
>> >>>>>>>>>
>> >>>>>>>>>> If others agree it is a good idea for dbcp, I can do it.  I can
>> >> see the
>> >>>>>>>>>> argument that its better to stay with close() even for
>> abandoned
>> >> and I
>> >>>>>>>>>> have not been able to get the deadlock to happen, so I would
>> like
>> >> to
>> >>>>>>>>>> wait a bit and allow others to weigh in.  Similarly for pool, I
>> >> would
>> >>>>>>>>>> like to get more community feedback before adding to the
>> >> interface.
>> >>>>>>>>> Hmm.
>> >>>>>>>>>
>> >>>>>>>>> On one hand if the driver deadlocks I don't see how that can be
>> >> anything
>> >>>>>>>>> other than a driver bug. If multiple code paths obtain multiple
>> >> locks
>> >>>>>>>>> then those code paths must always obtain those locks in the same
>> >> order.
>> >>>>>>>>> Anything else is a bug that is likely to result in a deadlock
>> in a
>> >>>>>>>>> multithreaded environment.
>> >>>>>>>>>
>> >>>>>>>>> On the other hand, it could be argued that the situation only
>> >> arises
>> >>>>>>>>> when an application doesn't correctly return connections to the
>> >> pool
>> >>>>>>>>> and/or keeps them for too long and/or doesn't configure the pool
>> >>>>>>>>> correctly for their usage pattern.
>> >>>>>>>>>
>> >>>>>>>>> The approach of adding
>> >>>>>>>>>
>> >>>>>>>>> PooledObjectFactory.destroyObject(PooledObject,CloseMode)
>> >>>>>>>>>
>> >>>>>>>>> where CloseMode is an Enum with two values looks reasonable to
>> me.
>> >>>>>>>> I have started to work on the [pool] changes for this.  I want to
>> >> check
>> >>>>>>>> two things before completing the PR:
>> >>>>>>>>
>> >>>>>>>> 1.  "Close" is a [dbcp] concept which does not make sense for all
>> >> pool
>> >>>>>>>> factories, so I am going to name the enum "DestroyMode" and the
>> two
>> >>>>>>>> modes, "Default" and "Abandoned".  That leaves room for other
>> modes
>> >> like
>> >>>>>>>> "Evicted" or "Invalid" later.
>> >>>>>>>>
>> >>>>>>>> 2. Speaking of later, technically adding modes will not break
>> binary
>> >>>>>>>> compatibility.  Are we going to be OK adding outside a major
>> >> release?
>> >>>>>>>> If the answer is no, I might argue to include the other natural
>> >> modes now.
>> >>>>>>> Yes, IMO, it is OK to add enum values in a minor release since it
>> >> does
>> >>>>>>> not break binary (or source) compatibility.
>> >>>>>>>
>> >>>>>>> Gary
>> >>>>>>>
>> >>>>>>>> Phil
>> >>>>>>>>
>> >>>>>>>>> I do agree that abort() should only be used in the case of
>> >> abandoned
>> >>>>>>>>> connections.
>> >>>>>>>>>
>> >>>>>>>>> Mark
>> >>>>>>>>>
>> >>>>>>>>>
>> >> ---------------------------------------------------------------------
>> >>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>>>>>>>>
>> >> ---------------------------------------------------------------------
>> >>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>>>>>>>
>> >>>>>
>> ---------------------------------------------------------------------
>> >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >>>>> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>>>>
>> >>>> ---------------------------------------------------------------------
>> >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >>>> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>>>
>> >>> ---------------------------------------------------------------------
>> >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >>> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>>
>> >> ---------------------------------------------------------------------
>> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> >> For additional commands, e-mail: dev-h...@commons.apache.org
>> >>
>> >>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
>> For additional commands, e-mail: dev-h...@commons.apache.org
>>
>>

Reply via email to