[ 
https://issues.apache.org/jira/browse/BEAM-381?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Daniel Halperin resolved BEAM-381.
----------------------------------
    Resolution: Fixed

> OffsetBasedReader should construct sources before updating the range tracker
> ----------------------------------------------------------------------------
>
>                 Key: BEAM-381
>                 URL: https://issues.apache.org/jira/browse/BEAM-381
>             Project: Beam
>          Issue Type: Bug
>          Components: sdk-java-core
>    Affects Versions: 0.1.0-incubating, 0.2.0-incubating
>            Reporter: Daniel Halperin
>            Assignee: Daniel Halperin
>             Fix For: 0.2.0-incubating
>
>
> OffsetBasedReader has the following code:
> {code}
>       if (!rangeTracker.trySplitAtPosition(splitOffset)) {
>         return null;
>       }
>       long start = source.getStartOffset();
>       long end = source.getEndOffset();
>       OffsetBasedSource<T> primary = source.createSourceForSubrange(start, 
> splitOffset);
>       OffsetBasedSource<T> residual = 
> source.createSourceForSubrange(splitOffset, end);
>       this.source = primary;
>       return residual;
> {code}
> The first line is the line that updates the range of this source. However, 
> subsequent lines might throw (specifically, in 
> source.createSourceForSubrange). We should construct the sources first, and 
> then catch exceptions and return null if they fail. This way, the 
> splitAtFraction call will not throw (so work is not wasted) and the range 
> tracker will not be updated if either the primary or (more likely) the 
> residual could not be created.



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

Reply via email to