private Object readResolve() { return org.axonframework.eventhandling.GapAwareTrackingToken.newInstance(index, gaps); } }
private TrackingToken createToken(List<Long> results) { if (results.size() == 0 || results.get(0) == null) { return null; } return GapAwareTrackingToken.newInstance(results.get(0), Collections.emptySet()); }
@Override public TrackingToken createHeadToken() { String sql = "SELECT max(" + schema.globalIndexColumn() + ") FROM " + schema.domainEventTable(); Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> connection.prepareStatement(sql), resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException("Failed to get head token", e))); return Optional.ofNullable(index) .map(seq -> GapAwareTrackingToken.newInstance(seq, Collections.emptySet())) .orElse(null); }
@Override public TrackingToken createTailToken() { String sql = "SELECT min(" + schema.globalIndexColumn() + ") - 1 FROM " + schema.domainEventTable(); Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> connection.prepareStatement(sql), resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException("Failed to get tail token", e))); return Optional.ofNullable(index) .map(seq -> GapAwareTrackingToken.newInstance(seq, Collections.emptySet())) .orElse(null); }
@Override public TrackingToken createTokenAt(Instant dateTime) { String sql = "SELECT min(" + schema.globalIndexColumn() + ") - 1 FROM " + schema.domainEventTable() + " WHERE " + schema.timestampColumn() + " >= ?"; Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> { PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, formatInstant(dateTime)); return stmt; }, resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException(format("Failed to get token at [%s]", dateTime), e))); if (index == null) { return null; } return GapAwareTrackingToken.newInstance(index, Collections.emptySet()); }
token = GapAwareTrackingToken.newInstance( globalSequence, allowGaps
public StubTrackingEventStream(long... tokens) { GapAwareTrackingToken lastToken = GapAwareTrackingToken.newInstance(-1, emptySortedSet()); eventMessages = new LinkedList<>(); for (Long seq : tokens) { lastToken = lastToken.advanceTo(seq, 1000, true); eventMessages.add(new GenericTrackedEventMessage<>(lastToken, createEvent(seq))); } }
GapAwareTrackingToken token = previousToken; if (token == null) { token = GapAwareTrackingToken.newInstance( globalSequence, allowGaps
assertWithin(1, TimeUnit.SECONDS, () -> assertEquals(8, replayRun.size())); TestCase.assertEquals(GapAwareTrackingToken.newInstance(5, asList(3L, 4L)), firstRun.get(3)); assertTrue(replayRun.get(0) instanceof ReplayToken); assertTrue(replayRun.get(5) instanceof ReplayToken); assertEquals(GapAwareTrackingToken.newInstance(6, emptySortedSet()), replayRun.get(6));
@Test public void testUpdateActiveSegmentsWhenBatchIsEmpty() throws Exception { StreamableMessageSource<TrackedEventMessage<?>> stubSource = mock(StreamableMessageSource.class); testSubject = TrackingEventProcessor.builder() .name("test") .eventHandlerInvoker(eventHandlerInvoker) .messageSource(stubSource) .tokenStore(tokenStore) .transactionManager(NoTransactionManager.INSTANCE).build(); when(stubSource.openStream(any())).thenReturn(new StubTrackingEventStream(0, 1, 2, 5)); doReturn(true, false).when(eventHandlerInvoker).canHandle(any(), any()); List<TrackingToken> trackingTokens = new CopyOnWriteArrayList<>(); doAnswer(i -> { trackingTokens.add(i.<TrackedEventMessage>getArgument(0).trackingToken()); return null; }).when(eventHandlerInvoker).handle(any(), any()); testSubject.start(); // give it a bit of time to start Thread.sleep(200); EventTrackerStatus eventTrackerStatus = testSubject.processingStatus().get(0); assertTrue(eventTrackerStatus.isCaughtUp()); GapAwareTrackingToken expectedToken = GapAwareTrackingToken.newInstance(5, asList(3L, 4L)); TrackingToken lastToken = eventTrackerStatus.getTrackingToken(); assertTrue(lastToken.covers(expectedToken)); }
private TrackingToken createToken(List<Long> results) { if (results.size() == 0 || results.get(0) == null) { return null; } return GapAwareTrackingToken.newInstance(results.get(0), Collections.emptySet()); }
@Override public TrackingToken createTailToken() { String sql = "SELECT min(" + schema.globalIndexColumn() + ") - 1 FROM " + schema.domainEventTable(); Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> connection.prepareStatement(sql), resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException("Failed to get tail token", e))); return Optional.ofNullable(index) .map(seq -> GapAwareTrackingToken.newInstance(seq, Collections.emptySet())) .orElse(null); }
@Override public TrackingToken createHeadToken() { String sql = "SELECT max(" + schema.globalIndexColumn() + ") FROM " + schema.domainEventTable(); Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> connection.prepareStatement(sql), resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException("Failed to get head token", e))); return Optional.ofNullable(index) .map(seq -> GapAwareTrackingToken.newInstance(seq, Collections.emptySet())) .orElse(null); }
@Override public TrackingToken createTokenAt(Instant dateTime) { String sql = "SELECT min(" + schema.globalIndexColumn() + ") - 1 FROM " + schema.domainEventTable() + " WHERE " + schema.timestampColumn() + " >= ?"; Long index = transactionManager.fetchInTransaction( () -> executeQuery(getConnection(), connection -> { PreparedStatement stmt = connection.prepareStatement(sql); stmt.setString(1, formatInstant(dateTime)); return stmt; }, resultSet -> nextAndExtract(resultSet, 1, Long.class), e -> new EventStoreException(format("Failed to get token at [%s]", dateTime), e))); if (index == null) { return null; } return GapAwareTrackingToken.newInstance(index, Collections.emptySet()); }
token = GapAwareTrackingToken.newInstance( globalSequence, allowGaps
GapAwareTrackingToken token = previousToken; if (token == null) { token = GapAwareTrackingToken.newInstance( globalSequence, allowGaps