public SegmentIteratorImpl(SegmentInputStreamFactory factory, Segment segment, Serializer<T> deserializer, long startingOffset, long endingOffset) { this.segment = segment; this.deserializer = deserializer; this.startingOffset = startingOffset; this.endingOffset = endingOffset; input = factory.createEventReaderForSegment(segment); input.setOffset(startingOffset); }
@GuardedBy("readers") private void acquireSegmentsIfNeeded() throws ReaderNotInReaderGroupException { Map<Segment, Long> newSegments = groupState.acquireNewSegmentsIfNeeded(getLag()); if (!newSegments.isEmpty()) { log.info("{} acquiring segments {}", this, newSegments); for (Entry<Segment, Long> newSegment : newSegments.entrySet()) { final EventSegmentReader in = inputStreamFactory.createEventReaderForSegment(newSegment.getKey(), groupState.getEndOffsetForSegment(newSegment.getKey())); in.setOffset(newSegment.getValue()); readers.add(in); } } }
@Override @SuppressWarnings("deprecation") public <T> RevisionedStreamClient<T> createRevisionedStreamClient(String streamName, Serializer<T> serializer, SynchronizerConfig config) { log.info("Creating revisioned stream client for stream: {} with synchronizer configuration: {}", streamName, config); Segment segment = new Segment(scope, streamName, 0); EventSegmentReader in = inFactory.createEventReaderForSegment(segment); // Segment sealed is not expected for Revisioned Stream Client. Consumer<Segment> segmentSealedCallBack = s -> { throw new IllegalStateException("RevisionedClient: Segmentsealed exception observed for segment:" + s); }; String delegationToken = Futures.getAndHandleExceptions(controller.getOrRefreshDelegationTokenFor(segment.getScope(), segment.getStreamName()), RuntimeException::new); SegmentOutputStream out = outFactory.createOutputStreamForSegment(segment, segmentSealedCallBack, config.getEventWriterConfig(), delegationToken); ConditionalOutputStream cond = condFactory.createConditionalOutputStream(segment, delegationToken, config.getEventWriterConfig()); SegmentMetadataClient meta = metaFactory.createSegmentMetadataClient(segment, delegationToken); return new RevisionedStreamClientImpl<>(segment, in, out, cond, meta, serializer); }
Mockito.when(segmentMetadataClientFactory.createSegmentMetadataClient(any(Segment.class), any())).thenReturn(metadataClient); Mockito.when(segmentInputStream.getSegmentId()).thenReturn(segment); Mockito.when(segInputStreamFactory.createEventReaderForSegment(any(Segment.class), anyLong())).thenReturn(segmentInputStream);
Mockito.when(inputStreamFactory.createEventReaderForSegment(any(Segment.class), anyLong())).thenReturn(segmentInputStream1);
Mockito.when(inputStreamFactory.createEventReaderForSegment(any(Segment.class), anyLong())).thenReturn(segmentInputStream1);
@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."); } }