if (this.offset >= this.endOffset) { log.debug("All events up to the configured end offset:{} have been read", endOffset); throw new EndOfSegmentException(END_OFFSET_REACHED); throw new EndOfSegmentException();
@Override public Type fetchEvent(EventPointer pointer) throws NoSuchEventException { Preconditions.checkNotNull(pointer); // Create SegmentInputStream @Cleanup EventSegmentReader inputStream = inputStreamFactory.createEventReaderForSegment(pointer.asImpl().getSegment(), pointer.asImpl().getEventLength()); inputStream.setOffset(pointer.asImpl().getEventStartOffset()); // Read event try { ByteBuffer buffer = inputStream.read(); Type result = deserializer.deserialize(buffer); return result; } catch (EndOfSegmentException e) { throw new NoSuchEventException(e.getMessage()); } catch (NoSuchSegmentException | SegmentTruncatedException e) { throw new NoSuchEventException("Event no longer exists."); } }
buffer = segmentReader.read(waitTime); } catch (EndOfSegmentException e) { boolean fetchSuccessors = e.getErrorType().equals(ErrorType.END_OF_SEGMENT_REACHED); handleEndOfSegment(segmentReader, fetchSuccessors); buffer = null;
/** * Event read. * @see io.pravega.client.segment.impl.EventSegmentReader#read(long) */ @Override @Synchronized public ByteBuffer read(long timeout) throws EndOfSegmentException, SegmentTruncatedException { if (readOffset >= writeOffset) { throw new EndOfSegmentException(); } if (readOffset < startingOffset) { throw new SegmentTruncatedException("Data below " + startingOffset + " has been truncated"); } ByteBuffer buffer = dataWritten.floorEntry(readOffset).getValue(); readOffset += buffer.remaining(); ByteBuffer result = buffer.slice(); result.position(WireCommands.TYPE_PLUS_LENGTH_SIZE); return result; }
/** * Byte oriented read. * @see io.pravega.client.segment.impl.SegmentInputStream#read(java.nio.ByteBuffer, long) */ @Override @Synchronized public int read(ByteBuffer toFill, long timeout) throws EndOfSegmentException, SegmentTruncatedException { if (readOffset >= writeOffset) { throw new EndOfSegmentException(); } if (readOffset < startingOffset) { throw new SegmentTruncatedException("Data below " + startingOffset + " has been truncated"); } int result = 0; while (toFill.hasRemaining() && readOffset < writeOffset) { ByteBuffer buffer = dataWritten.floorEntry(readOffset).getValue(); int read = ByteBufferUtils.copy(buffer, toFill); readOffset += read; result += read; } return result; }
Mockito.when(segmentInputStream1.read(anyLong())).thenThrow(new EndOfSegmentException(EndOfSegmentException.ErrorType.END_OFFSET_REACHED)); Mockito.when(segmentInputStream1.getSegmentId()).thenReturn(segment);