private void reprocessNextEvent() { try { if (logStreamReader.hasNext()) { currentEvent = logStreamReader.next(); if (currentEvent.getPosition() > lastSourceEventPosition) { throw new IllegalStateException( String.format( ERROR_MESSAGE_REPROCESSING_NO_SOURCE_EVENT, getName(), lastSourceEventPosition)); } reprocessEvent(currentEvent); } else { throw new IllegalStateException( String.format( ERROR_MESSAGE_REPROCESSING_NO_SOURCE_EVENT, getName(), lastSourceEventPosition)); } } catch (final RuntimeException e) { onFailure(); throw e; } }
private void reprocessNextEvent() { try { if (logStreamReader.hasNext()) { currentEvent = logStreamReader.next(); if (currentEvent.getPosition() > lastSourceEventPosition) { throw new IllegalStateException( String.format( ERROR_MESSAGE_REPROCESSING_NO_SOURCE_EVENT, getName(), lastSourceEventPosition)); } reprocessEvent(currentEvent); } else { throw new IllegalStateException( String.format( ERROR_MESSAGE_REPROCESSING_NO_SOURCE_EVENT, getName(), lastSourceEventPosition)); } } catch (final RuntimeException e) { onFailure(); throw e; } }
@Override @SuppressWarnings({"unchecked"}) public <T extends UnpackedObject> TypedRecord<T> readValue(long position, Class<T> eventClass) { final boolean success = reader.seek(position); if (!success) { throw new RuntimeException("Could not find an event at position " + position); } final LoggedEvent rawEvent = reader.next(); metadata.reset(); rawEvent.readMetadata(metadata); final UnpackedObject value = eventCache.get(eventClass); value.reset(); rawEvent.readValue(value); event.wrap(rawEvent, metadata, value); return event; }
@Override @SuppressWarnings({"unchecked"}) public <T extends UnpackedObject> TypedRecord<T> readValue(long position, Class<T> eventClass) { final boolean success = reader.seek(position); if (!success) { throw new RuntimeException("Could not find an event at position " + position); } final LoggedEvent rawEvent = reader.next(); metadata.reset(); rawEvent.readMetadata(metadata); final UnpackedObject value = eventCache.get(eventClass); value.reset(); rawEvent.readValue(value); event.wrap(rawEvent, metadata, value); return event; }
private boolean validateSnapshot(final StateSnapshotMetadata metadata) { final boolean wasFound = logStreamReader.seek(metadata.getLastWrittenEventPosition()); boolean isValid = false; if (wasFound && logStreamReader.hasNext()) { final LoggedEvent event = logStreamReader.next(); isValid = event.getRaftTerm() == metadata.getLastWrittenEventTerm(); } return isValid; }
private boolean validateSnapshot(final StateSnapshotMetadata metadata) { final boolean wasFound = logStreamReader.seek(metadata.getLastWrittenEventPosition()); boolean isValid = false; if (wasFound && logStreamReader.hasNext()) { final LoggedEvent event = logStreamReader.next(); isValid = event.getRaftTerm() == metadata.getLastWrittenEventTerm(); } return isValid; }
public static void printRecords(final LogStream logStream) { final StringBuilder sb = new StringBuilder(); sb.append("Records on partition "); sb.append(logStream.getPartitionId()); sb.append(":\n"); try (final LogStreamReader streamReader = new BufferedLogStreamReader(logStream)) { streamReader.seekToFirstEvent(); while (streamReader.hasNext()) { final LoggedEvent event = streamReader.next(); writeRecord(event, sb); } } LOGGER.info(sb.toString()); }
public static void printRecords(final LogStream logStream) { final StringBuilder sb = new StringBuilder(); sb.append("Records on partition "); sb.append(logStream.getPartitionId()); sb.append(":\n"); try (final LogStreamReader streamReader = new BufferedLogStreamReader(logStream)) { streamReader.seekToFirstEvent(); while (streamReader.hasNext()) { final LoggedEvent event = streamReader.next(); writeRecord(event, sb); } } LOGGER.info(sb.toString()); }
private void readNextEvent() { if (isOpened() && !isSuspended() && logStreamReader.hasNext() && eventProcessor == null) { currentEvent = logStreamReader.next(); if (eventFilter == null || eventFilter.applies(currentEvent)) { processEvent(currentEvent); } else { // continue with the next event actor.submit(readNextEvent); metrics.incrementEventsSkippedCount(); } } }
private void readNextEvent() { if (isOpened() && !isSuspended() && logStreamReader.hasNext() && eventProcessor == null) { currentEvent = logStreamReader.next(); if (eventFilter == null || eventFilter.applies(currentEvent)) { processEvent(currentEvent); } else { // continue with the next event actor.submit(readNextEvent); metrics.incrementEventsSkippedCount(); } } }
private long seekFromSnapshotPositionToLastSourceEvent() { long lastSourceEventPosition = -1L; if (!isReadOnlyProcessor && logStreamReader.hasNext()) { lastSourceEventPosition = snapshotPosition; while (logStreamReader.hasNext()) { final LoggedEvent newEvent = logStreamReader.next(); // ignore events from other producers if (newEvent.getProducerId() == streamProcessorContext.getId()) { final long sourceEventPosition = newEvent.getSourceEventPosition(); if (sourceEventPosition > 0 && sourceEventPosition > lastSourceEventPosition) { lastSourceEventPosition = sourceEventPosition; } } } // reset position logStreamReader.seek(snapshotPosition + 1); } return lastSourceEventPosition; }
private long seekFromSnapshotPositionToLastSourceEvent() { long lastSourceEventPosition = -1L; if (!isReadOnlyProcessor && logStreamReader.hasNext()) { lastSourceEventPosition = snapshotPosition; while (logStreamReader.hasNext()) { final LoggedEvent newEvent = logStreamReader.next(); // ignore events from other producers if (newEvent.getProducerId() == streamProcessorContext.getId()) { final long sourceEventPosition = newEvent.getSourceEventPosition(); if (sourceEventPosition > 0 && sourceEventPosition > lastSourceEventPosition) { lastSourceEventPosition = sourceEventPosition; } } } // reset position logStreamReader.seek(snapshotPosition + 1); } return lastSourceEventPosition; }
/** * Truncates events with getPosition greater than the argument. Includes committed events. Resets * commit getPosition to the argument getPosition. * * @param position exclusive (unlike {@link LogStream#truncate(long)}!) */ public void truncate(final String stream, final long position) { final LogStream logStream = getLogStream(stream); try (final LogStreamReader reader = new BufferedLogStreamReader(logStream)) { logStream.closeAppender().get(); reader.seek(position + 1); logStream.setCommitPosition(position); if (reader.hasNext()) { logStream.truncate(reader.next().getPosition()); } logStream.setCommitPosition(Long.MAX_VALUE); logStream.openAppender().get(); } catch (final Exception e) { throw new RuntimeException("Could not truncate log stream " + stream, e); } }
/** * Truncates events with getPosition greater than the argument. Includes committed events. Resets * commit getPosition to the argument getPosition. * * @param position exclusive (unlike {@link LogStream#truncate(long)}!) */ public void truncate(final String stream, final long position) { final LogStream logStream = getLogStream(stream); try (final LogStreamReader reader = new BufferedLogStreamReader(logStream)) { logStream.closeAppender().get(); reader.seek(position + 1); logStream.setCommitPosition(position); if (reader.hasNext()) { logStream.truncate(reader.next().getPosition()); } logStream.setCommitPosition(Long.MAX_VALUE); logStream.openAppender().get(); } catch (final Exception e) { throw new RuntimeException("Could not truncate log stream " + stream, e); } }