use of com.couchbase.client.dcp.state.FailoverLogEntry in project kafka-connect-couchbase by couchbase.
the class CouchbaseReader method restoreSavedOffsets.
private void restoreSavedOffsets() {
LOGGER.info("Resuming from saved offsets for {} of {} partitions", partitionToSavedSeqno.size(), partitions.size());
for (Map.Entry<Integer, SeqnoAndVbucketUuid> entry : partitionToSavedSeqno.entrySet()) {
final int partition = entry.getKey();
final SeqnoAndVbucketUuid offset = entry.getValue();
final long savedSeqno = offset.seqno();
PartitionState ps = client.sessionState().get(partition);
ps.setStartSeqno(savedSeqno);
ps.setSnapshot(new SnapshotMarker(savedSeqno, savedSeqno));
if (offset.vbucketUuid().isPresent()) {
long vbuuid = offset.vbucketUuid().getAsLong();
LOGGER.debug("Initializing failover log for partition {} using stored vbuuid {} ", partition, vbuuid);
// Use seqno -1 (max unsigned) so this synthetic failover log entry will always be pruned
// if the initial streamOpen request gets a rollback response. If there's no rollback
// on initial request, then the seqno used here doesn't matter, because the failover log
// gets reset when the stream is opened.
ps.setFailoverLog(singletonList(new FailoverLogEntry(-1L, vbuuid)));
} else {
// If we get here, we're probably restoring the stream offset from a previous version of the connector
// which didn't save vbucket UUIDs. Hope the current vbuuid in the failover log is the correct one.
// CAVEAT: This doesn't always work, and sometimes triggers a rollback to zero.
LOGGER.warn("No vBucket UUID is associated with stream offset for partition {}." + " This is normal if you're upgrading from connector version 3.4.5 or earlier," + " and should stop happening once the Kafka Connect framework asks the connector" + " to save its offsets (see connector worker config property 'offset.flush.interval.ms').", partition);
}
client.sessionState().set(partition, ps);
}
}
use of com.couchbase.client.dcp.state.FailoverLogEntry in project couchbase-elasticsearch-connector by couchbase.
the class DcpHelper method initSessionState.
public static void initSessionState(Client dcpClient, CheckpointService checkpointService, Set<Integer> partitions) throws IOException {
final Map<Integer, Checkpoint> positions = checkpointService.load(partitions);
final SessionState sessionState = dcpClient.sessionState();
LOGGER.debug("Initializing DCP session state from checkpoint: {}", positions);
for (Map.Entry<Integer, Checkpoint> entry : positions.entrySet()) {
final int partition = entry.getKey();
final Checkpoint checkpoint = entry.getValue();
if (checkpoint == null) {
continue;
}
final PartitionState ps = sessionState.get(partition);
ps.setStartSeqno(checkpoint.getSeqno());
ps.setSnapshot(new SnapshotMarker(checkpoint.getSnapshot().getStartSeqno(), checkpoint.getSnapshot().getEndSeqno()));
// Use seqno -1 (max unsigned) so this synthetic failover log entry will always be pruned
// if the initial streamOpen request gets a rollback response. If there's no rollback
// on initial request, then the seqno used here doesn't matter, because the failover log
// gets reset when the stream is opened.
ps.setFailoverLog(singletonList(new FailoverLogEntry(-1L, checkpoint.getVbuuid())));
LOGGER.debug("Initialized partition {} state = {}", partition, ps);
}
}
Aggregations