Yep but makes one other step to work in beam - dont forget you already
passed like 10 steps when you end up on coders.

My view was that the skip first close was a win-win for beam and users bit
technically you are right, users can always do it themselves.

Le 1 févr. 2018 07:16, "Lukasz Cwik" <lc...@google.com> a écrit :

> I'm not sure what you mean by it closes the door since as the caller of
> the library you can create a wrapper filter input stream that ignores close
> calls effectively overriding what happens in the UnownedInputStream.
>
> On Wed, Jan 31, 2018 at 10:08 PM, Romain Manni-Bucau <
> rmannibu...@gmail.com> wrote:
>
>>
>>
>> Le 1 févr. 2018 03:10, "Lukasz Cwik" <lc...@google.com> a écrit :
>>
>> Yes, people will write bad coders which is why this is there. No, I don't
>> think swallowing one close is what we want.
>>
>> In the case where you wants to pass an input/output stream to a library
>> that incorrectly assumes ownership, the input/output stream should be
>> wrapped right before the call to the library with a filter input/output
>> stream that swallows the close and not propagate ignoring this bad behavior
>> elsewhere.
>>
>>
>> Hmm,
>>
>> Elsewhere is nowhere else here since it wouldnt have any side effect
>> except not enforcing another layer and making smoothly work for most
>> mappers.
>>
>> Anyway I can live with it but I'm a bit sad it closes the door to the
>> easyness to write extensions.
>>
>>
>> On Wed, Jan 31, 2018 at 12:04 PM, Romain Manni-Bucau <
>> rmannibu...@gmail.com> wrote:
>>
>>> Hmm, here we are the ones owning the call since it is in a coder, no? Do
>>> we assume people will badly implement coders? In this particular case we
>>> can assume close() will be called by a framework I think.
>>> What about swallowing one close() and fail on the second?
>>>
>>>
>>> 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>
>>>
>>> 2018-01-31 20:59 GMT+01:00 Lukasz Cwik <lc...@google.com>:
>>>
>>>> Because people write code like:
>>>> myMethod(InputStream in) {
>>>>   InputStream child = new InputStream(in);
>>>>   child.close();
>>>> }
>>>>
>>>> InputStream in = new FileInputStream(... path ...);
>>>> myMethod(in);
>>>> myMethod(in);
>>>>
>>>> An exception will be thrown when the second myMethod call occurs.
>>>>
>>>> Unfortunately not everyone wraps their calls to a coder with an
>>>> UnownedInputStream or a filter input stream which drops close() calls is
>>>> why its a problem and in the few places it is done it is used to prevent
>>>> bugs from creeping in.
>>>>
>>>>
>>>>
>>>> On Tue, Jan 30, 2018 at 11:29 AM, Romain Manni-Bucau <
>>>> rmannibu...@gmail.com> wrote:
>>>>
>>>>> I get the issue but I don't get the last part. Concretely we can
>>>>> support any lib by just removing the exception in the close, no? What 
>>>>> would
>>>>> be the issue? No additional wrapper, no lib integration issue.
>>>>>
>>>>>
>>>>> 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>
>>>>>
>>>>> 2018-01-30 19:29 GMT+01:00 Lukasz Cwik <lc...@google.com>:
>>>>>
>>>>>> Its common in the code base that input and output streams are passed
>>>>>> around and the caller is responsible for closing it, not the callee. The
>>>>>> UnownedInputStream is to guard against libraries that are poorly behaved
>>>>>> and assume they get ownership of the stream when it is given to them.
>>>>>>
>>>>>> In the code:
>>>>>> myMethod(InputStream in) {
>>>>>>   InputStream child = new InputStream(in);
>>>>>>   child.close();
>>>>>> }
>>>>>>
>>>>>> InputStream in = ...
>>>>>> myMethod(in);
>>>>>> myMethod(in);
>>>>>> When should "in" be closed?
>>>>>>
>>>>>> To get around this issue, create a filter input/output stream that
>>>>>> ignores close calls like on the JAXB coder:
>>>>>> https://github.com/apache/beam/blob/master/sdks/java/io/xml/
>>>>>> src/main/java/org/apache/beam/sdk/io/xml/JAXBCoder.java#L181
>>>>>>
>>>>>> We can instead swap around this pattern so that the caller guards
>>>>>> against callees closing by wrapping with a filter input/output stream but
>>>>>> this costs an additional method call for each input/output stream call.
>>>>>>
>>>>>>
>>>>>> On Tue, Jan 30, 2018 at 10:04 AM, Romain Manni-Bucau <
>>>>>> rmannibu...@gmail.com> wrote:
>>>>>>
>>>>>>> Hi guys,
>>>>>>>
>>>>>>> All is in the subject ;)
>>>>>>>
>>>>>>> Rational is to support any I/O library and not fail when the close
>>>>>>> is encapsulated.
>>>>>>>
>>>>>>> Any blocker to swallow this close call?
>>>>>>>
>>>>>>> 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>
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>

Reply via email to