[ 
https://issues.apache.org/jira/browse/OAK-4057?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15167021#comment-15167021
 ] 

Michael Dürig commented on OAK-4057:
------------------------------------

bq. but in the case of the SegmentStream, the length of the stream is known in 
advance so returning the real available value is very cheap

The lenght of the stream might be known, but according to recent 
interpretations of the contract of {{available()}} it is not the right value to 
return unless that number of bytes can be served without blocking (that is, 
without doing any IO that might cause the current thread to be suspended). 

See 
https://issues.apache.org/jira/secure/EditComment!default.jspa?id=12663224&commentId=13829633
 and following comments where this has been discussed. 

Given the weak guarantees of {{availavle()}} and that many implementations and 
usages are borderline (or wrong), I'd rather not do any changes in this area. 

> available() in SegmentStream returning 0 for large  files
> ---------------------------------------------------------
>
>                 Key: OAK-4057
>                 URL: https://issues.apache.org/jira/browse/OAK-4057
>             Project: Jackrabbit Oak
>          Issue Type: Bug
>          Components: segmentmk
>    Affects Versions: 1.3.15
>            Reporter: Mandeep Gandhi
>         Attachments: SegmentStreamTest.java.patch
>
>
> Suppose I have a file  in repository. I try to get input stream from the file 
> as 
>                 InputStream is = 
> jcrContent.getProperty("jcr:data").getBinary().getStream();
> Now before building the document I want to check if the file is not empty by 
> using using available API. 
> Ideally this API is expected to return an estimate of the number of bytes 
> that can be read (or skipped over) from this input stream without blocking by 
> the next invocation of a method for this input 
> streamfhttps://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html#available()
> The API works fine for small files but for large ones it returns 0. 
>  



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to