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