/** * Handles a records request. * * @param request the request to handle */ private void handleRecords(RecordsRequest request) { if (request.reset()) { index = request.record().index() - 1; } if (request.record().index() == index + 1) { Consumer<LogRecord> consumer = this.consumer; if (consumer != null) { consumer.accept(request.record()); index = request.record().index(); } } else { protocol.reset(leader, ResetRequest.request(memberId, subject, index + 1)); } }
/** * Sends the next batch to the consumer. */ void next() { if (!open) { return; } context.threadContext().execute(() -> { if (reader.hasNext()) { Indexed<LogEntry> entry = reader.next(); LogRecord record = new LogRecord(entry.index(), entry.entry().timestamp(), entry.entry().value()); boolean reset = reader.getFirstIndex() == entry.index(); RecordsRequest request = RecordsRequest.request(record, reset); log.trace("Sending {} to {} at {}", request, memberId, subject); context.protocol().produce(memberId, subject, request); next(); } }); }
/** * Handles a records request. * * @param request the request to handle */ private void handleRecords(RecordsRequest request) { if (request.reset()) { index = request.record().index() - 1; } if (request.record().index() == index + 1) { Consumer<LogRecord> consumer = this.consumer; if (consumer != null) { consumer.accept(request.record()); index = request.record().index(); } } else { protocol.reset(leader, ResetRequest.request(memberId, subject, index + 1)); } }
/** * Sends the next batch to the consumer. */ void next() { if (!open) { return; } context.threadContext().execute(() -> { if (reader.hasNext()) { Indexed<LogEntry> entry = reader.next(); LogRecord record = new LogRecord(entry.index(), entry.entry().timestamp(), entry.entry().value()); boolean reset = reader.getFirstIndex() == entry.index(); RecordsRequest request = RecordsRequest.request(record, reset); log.trace("Sending {} to {} at {}", request, memberId, subject); context.protocol().produce(memberId, subject, request); next(); } }); }
private void consume(LogRecord record) { LogOperation operation = decodeInternal(record.value()); currentIndex = record.index(); currentSession = session; currentOperation = operation.operationId().type(); currentTimestamp = record.timestamp(); while (pendingRead != null && pendingRead.index <= record.index()) { session = getOrCreateSession(this.session.sessionId()); currentSession = session;