Daniel Halperin created BEAM-381:
------------------------------------

             Summary: 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


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