You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Martin Klepsch <ma...@googlemail.com> on 2017/01/20 15:38:37 UTC

[pool] preparePool that only registers key, doesn't create new object

Hey,

With a KeyedObjectPool I can use `setMinIdlePerKey` &  `preparePool` to
"bootstrap" an object pool. Now `preparePool` creates new objects
synchronously and the evictor thread doesn't seem to ensure min idle
objects if there are none yet (since it can't know the keys I guess).

Because of that I run into the situation that the evictor thread creates
objects for keys that are currently being created by `preparePool`. It's
not an absolute deal breaker but it would be nice to be able to register
keys without synchronously creating the minimum idle objects. Instead I'd
like to wait for the evictor thread to pick up newly registered keys and
create the required objects for it.

Unfortunately `register` is private and I don't see another way to trigger
key-registering. (Calling `preparePool` with `minIdlePerKey` set to 0 will
short circuit and not register the key).

Any suggestions welcome!

Cheers :)

Re: [pool] preparePool that only registers key, doesn't create new object

Posted by Mark Thomas <ma...@apache.org>.
On 06/02/17 10:55, Mark Thomas wrote:
> On 05/02/17 22:21, Gary Gregory wrote:
>> Anyone care to opine?
>
> I think there is a bug in ensureMinIdle. If the objectDeque is null, it
> needs to obtain a reference to the objectDeque once created in the for
> loop. Otherwise the call from preparePool will always create
> minIdlePerKey objects regardless of any objects created by the evictor.

Fixed in r1782329 for 2.4.3 onwards.

Mark


>
> Mark
>
>>
>> G
>>
>> On Fri, Jan 20, 2017 at 7:38 AM, Martin Klepsch <
>> martinklepsch@googlemail.com> wrote:
>>
>>> Hey,
>>>
>>> With a KeyedObjectPool I can use `setMinIdlePerKey` &  `preparePool` to
>>> "bootstrap" an object pool. Now `preparePool` creates new objects
>>> synchronously and the evictor thread doesn't seem to ensure min idle
>>> objects if there are none yet (since it can't know the keys I guess).
>>>
>>> Because of that I run into the situation that the evictor thread creates
>>> objects for keys that are currently being created by `preparePool`. It's
>>> not an absolute deal breaker but it would be nice to be able to register
>>> keys without synchronously creating the minimum idle objects. Instead
>>> I'd
>>> like to wait for the evictor thread to pick up newly registered keys and
>>> create the required objects for it.
>>>
>>> Unfortunately `register` is private and I don't see another way to
>>> trigger
>>> key-registering. (Calling `preparePool` with `minIdlePerKey` set to 0
>>> will
>>> short circuit and not register the key).
>>>
>>> Any suggestions welcome!
>>>
>>> Cheers :)
>>>
>>
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>


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


Re: [pool] preparePool that only registers key, doesn't create new object

Posted by Mark Thomas <ma...@apache.org>.
On 05/02/17 22:21, Gary Gregory wrote:
> Anyone care to opine?

I think there is a bug in ensureMinIdle. If the objectDeque is null, it 
needs to obtain a reference to the objectDeque once created in the for 
loop. Otherwise the call from preparePool will always create 
minIdlePerKey objects regardless of any objects created by the evictor.

Mark

>
> G
>
> On Fri, Jan 20, 2017 at 7:38 AM, Martin Klepsch <
> martinklepsch@googlemail.com> wrote:
>
>> Hey,
>>
>> With a KeyedObjectPool I can use `setMinIdlePerKey` &  `preparePool` to
>> "bootstrap" an object pool. Now `preparePool` creates new objects
>> synchronously and the evictor thread doesn't seem to ensure min idle
>> objects if there are none yet (since it can't know the keys I guess).
>>
>> Because of that I run into the situation that the evictor thread creates
>> objects for keys that are currently being created by `preparePool`. It's
>> not an absolute deal breaker but it would be nice to be able to register
>> keys without synchronously creating the minimum idle objects. Instead I'd
>> like to wait for the evictor thread to pick up newly registered keys and
>> create the required objects for it.
>>
>> Unfortunately `register` is private and I don't see another way to trigger
>> key-registering. (Calling `preparePool` with `minIdlePerKey` set to 0 will
>> short circuit and not register the key).
>>
>> Any suggestions welcome!
>>
>> Cheers :)
>>
>
>
>


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


Re: [pool] preparePool that only registers key, doesn't create new object

Posted by Gary Gregory <ga...@gmail.com>.
Anyone care to opine?

G

On Fri, Jan 20, 2017 at 7:38 AM, Martin Klepsch <
martinklepsch@googlemail.com> wrote:

> Hey,
>
> With a KeyedObjectPool I can use `setMinIdlePerKey` &  `preparePool` to
> "bootstrap" an object pool. Now `preparePool` creates new objects
> synchronously and the evictor thread doesn't seem to ensure min idle
> objects if there are none yet (since it can't know the keys I guess).
>
> Because of that I run into the situation that the evictor thread creates
> objects for keys that are currently being created by `preparePool`. It's
> not an absolute deal breaker but it would be nice to be able to register
> keys without synchronously creating the minimum idle objects. Instead I'd
> like to wait for the evictor thread to pick up newly registered keys and
> create the required objects for it.
>
> Unfortunately `register` is private and I don't see another way to trigger
> key-registering. (Calling `preparePool` with `minIdlePerKey` set to 0 will
> short circuit and not register the key).
>
> Any suggestions welcome!
>
> Cheers :)
>



-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459>
JUnit in Action, Second Edition
<https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22>

<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021>
Spring Batch in Action
<https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action>
<http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory