Hi Romain

Is it not @FinishBundle your solution ?

Regards
JB

Le 16 févr. 2018 à 17:06, à 17:06, Romain Manni-Bucau <rmannibu...@gmail.com> a 
écrit:
>I see Reuven, so it is actually a broken contract for end users more
>than a
>bug. Concretely a user must have a way to execute code once the
>teardown is
>no more used and a teardown is populated by the user in the context of
>an
>execution.
>It means that if the environment wants to pool (cache) the instances it
>must provide a postBorrowFromCache and preReturnToCache to let the user
>handle that - we'll get back to EJB and passivation ;).
>
>Personally I think it is fine to cache the instances for the duration
>of an
>execution but not accross execution. Concretely if you check out the
>API it
>should just not be possible for a runner since the lifecycle is not
>covered
>and the fact teardown can not be called today is an implementation
>bug/leak
>surfacing the API.
>
>So I see 2 options:
>
>1. make it mandatory and get rid of the caching - which shouldnt help
>much
>in current state in terms of perf
>2. keep teardown a final release object (which is not that useful cause
>of
>the end of the sentence) and add a clean cache lifecycle management
>
>tempted to say 1 is saner short terms, in particular cause beam is 2.x
>and
>users already use it this way.
>
>
>
>Romain Manni-Bucau
>@rmannibucau <https://twitter.com/rmannibucau> |  Blog
><https://rmannibucau.metawerx.net/> | Old Blog
><http://rmannibucau.wordpress.com> | Github
><https://github.com/rmannibucau> |
>LinkedIn <https://www.linkedin.com/in/rmannibucau> | Book
><https://www.packtpub.com/application-development/java-ee-8-high-performance>
>
>2018-02-16 16:53 GMT+01:00 Reuven Lax <re...@google.com>:
>
>> So the concern is that @TearDown might not be called?
>>
>> Let's understand the reason for @TearDown. The runner is free to
>cache the
>> DoFn object across many invocations, and indeed in streaming this is
>often
>> a critical optimization. However if the runner does decide to destroy
>the
>> DoFn object (e.g. because it's being evicted from cache), often users
>need
>> a callback to tear down associated resources (file handles, RPC
>> connections, etc.).
>>
>> Now @TearDown isn't guaranteed to be called for a simple reason: the
>> runner might never tear down the DoFn object! The runner might well
>decide
>> to cache the object forever, in which case there is never .a time to
>call
>> @TearDown. There is no violation of semantics here.
>>
>> Also, the point about not calling teardown if the JVM crashes might
>well
>> sound implicit with no need to mention it. However empirically users
>do
>> misunderstand even this, so it's worth mentioning.
>>
>> Reuven
>>
>> On Fri, Feb 16, 2018 at 2:11 AM, Romain Manni-Bucau
><rmannibu...@gmail.com
>> > wrote:
>>
>>> Hi guys,
>>>
>>> I'm a bit concerned of this PR
>https://github.com/apache/beam/pull/4637
>>>
>>> I understand the intent but I'd like to share how I see it and why
>it is
>>> an issue for me:
>>>
>>> 1. you can't help if the JVM crash in any case. Tomcat had a try to
>>> preallocate some memory for instance to free it in case of OOME and
>try to
>>> recover but it never prooved useful and got dropped recently. This
>is a
>>> good example you can't do anything if there is a cataclism and
>therefore
>>> any framework or lib will not be blamed for it
>>> 2. if you expose an API, its behavior must be well defined. In the
>case
>>> of a portable library like Beam it is even more important otherwise
>it
>>> leads users to not use the API or the projet :(.
>>>
>>>
>>> These two points lead to say that if the JVM crashes it is ok to not
>call
>>> teardown and it is even implicit in any programming environment so
>no need
>>> to mention it. However that a runner doesn't call teardown is a bug
>and not
>>> a feature or something intended because it can have a huge impact on
>the
>>> user flow.
>>>
>>> The user workarounds are to use custom threads with timeouts to
>execute
>>> the actions or things like that, all bad solutions to replace a
>buggy API,
>>> if you remove the contract guarantee.
>>>
>>> To make it obvious: substring(from, to): will substring the current
>>> string between from and to...or not. Would you use the function?
>>>
>>> What I ask is to add in the javadoc that the contract enforces the
>runner
>>> to call that. Which means the core doesn't guarantee it but imposes
>the
>>> runner to do so. This way the not portable behavior is where it
>belongs to,
>>> in the vendor specific code. It leads to a reliable API for the end
>user
>>> and let runners document they don't respect - yet - the API when
>relevant.
>>>
>>> wdyt?
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> |  Blog
>>> <https://rmannibucau.metawerx.net/> | Old Blog
>>> <http://rmannibucau.wordpress.com> | Github
>>> <https://github.com/rmannibucau> | LinkedIn
>>> <https://www.linkedin.com/in/rmannibucau> | Book
>>>
><https://www.packtpub.com/application-development/java-ee-8-high-performance>
>>>
>>
>>

Reply via email to