@Synchronized private List<PendingEvent> removeAllWriters() { //get all pending events. List<PendingEvent> pendingEvents = new ArrayList<>(); writers.values().forEach(out -> { pendingEvents.addAll(out.getUnackedEventsOnSeal()); }); // remove all writers. writers.clear(); return pendingEvents; }
@Synchronized private List<PendingEvent> updateSegments(StreamSegments newSteamSegments, Consumer<Segment> segmentSealedCallBack) { currentSegments = newSteamSegments; createMissingWriters(segmentSealedCallBack, newSteamSegments.getDelegationToken()); List<PendingEvent> toResend = new ArrayList<>(); Iterator<Entry<Segment, SegmentOutputStream>> iter = writers.entrySet().iterator(); while (iter.hasNext()) { Entry<Segment, SegmentOutputStream> entry = iter.next(); if (!currentSegments.getSegments().contains(entry.getKey())) { SegmentOutputStream writer = entry.getValue(); log.info("Closing writer {} on segment {} during segment refresh", writer, entry.getKey()); iter.remove(); try { writer.close(); } catch (SegmentSealedException e) { log.info("Caught segment sealed while refreshing on segment {}", entry.getKey()); } toResend.addAll(writer.getUnackedEventsOnSeal()); } } return toResend; }
@Synchronized private List<PendingEvent> updateSegmentsUponSealed(StreamSegmentsWithPredecessors successors, Segment sealedSegment, Consumer<Segment> segmentSealedCallback) { currentSegments = currentSegments.withReplacementRange(sealedSegment, successors); createMissingWriters(segmentSealedCallback, currentSegments.getDelegationToken()); log.debug("Fetch unacked events for segment: {}, and adding new segments {}", sealedSegment, currentSegments); return writers.remove(sealedSegment).getUnackedEventsOnSeal(); }
when(s0Writer.getUnackedEventsOnSeal()) .thenReturn(ImmutableList.of(PendingEvent.withHeader("0", ByteBuffer.wrap("e".getBytes()), writerFuture)));