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

Steve Loughran commented on HADOOP-9495:
----------------------------------------

h2. Requirements of implementations of {{Seekable}},{{PositionedReadable}} and 
{{InputStream}} (including all subclasses of {{FSInputStream}})

h3. Core seek requirements
* SEEK0: Implicit: all operations complete, successfully or unsuccessfully, 
within a bounded time period or throw an {{IOException}}
* SEEK1: When a file is opened, {{getPos()==0}} 
* SEEK2: Implementations MAY NOT implement {{seek()}}, and instead MAY throw an 
{{IOException}}. If this is the case, the SEEK4-7 and SEEK-READ2 & SEEK-READ3 
are not required.
* SEEK3: A {{seek(L)}} on a closed input stream MUST fail with an 
{{IOException}}.
* SEEK4: On a {{seek(L)}} with {{L<0}} an exception MUST be thrown. It SHOULD 
be an {{IOException}}. It MAY be {{IllegalArgumentException}} or other 
{{RuntimeException}}
* SEEK5: On a {{seek(L)}} with {{L>length(file), an {{IOException}} MAY be 
thrown. It SHOULD be an {{EOFException}}
* SEEK6: On a {{seek(L)}} with {{L>length(file) If an {{IOException}} is not 
thrown, then an {{IOException}} MUST be thrown on the next {{read()}} 
operation. It SHOULD be an {{EOFException}}
* SEEK7: On a {{seek(L)}} with {{L >=0 && L<=length(file)}}, {{getPos()==L}}

SEEK6 is a relaxation of the {{Seekable.seek()}} definition, which states 
"Can't seek past the end of the file.". The {{RawLocalFileSystem}} on which 
everything ultimately depends does support seeking past the end of the file -it 
is only on the {{read()}} operation where an exception is raised.


h3. Seek and Read
* SEEK-READ1: After a {{read()}} operation where {{getPos()==L && 
L<length(file)}}, {{getPos()==L+1}}
* SEEK-READ2: After a {{seek(L)}} with {{L<length(file)}}, {{read()}} returns 
the byte at position L in the file.
* SEEK-READ3: After a {{seek(L)}} with {{L==length(file)}}, {{read()}} returns 
-1
* SEEK-READ4: After a {{seek(L)}} with {{L<=length(file)}}, 
{{read(byte[1],0,1)}} returns the byte at position L in the file.

h3. Seek and PositionedReadable Integration

* SEEK-READ5: {{PositionedReadable.read*(L) && length(file) > 0 => 
IOException}} (ideally, {{EOFException}}).
* SEEK-READ6: After a {{PositionedReadable.read*(L) where L< 0 => IOException. 
({})
* SEEK-READ7: After any of the {{PositionedReadable.read*}} operations, 
{{getPos()}} is unchanged.

                
> Define behaviour of Seekable.seek(), write tests, fix all hadoop 
> implementations for compliance
> -----------------------------------------------------------------------------------------------
>
>                 Key: HADOOP-9495
>                 URL: https://issues.apache.org/jira/browse/HADOOP-9495
>             Project: Hadoop Common
>          Issue Type: Sub-task
>          Components: fs
>    Affects Versions: 1.2.0, 3.0.0
>            Reporter: Steve Loughran
>            Assignee: Steve Loughran
>
> {{Seekable.seek()}} seems a good starting point for specifying, testing and 
> implementing FS API compliance: one method, relatively non-ambiguous 
> semantics, easily assessed used in the Hadoop codebase. Specify and test it 
> first

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to