private List<SourceRecord> getSourceRecords(List<SourceRecord> results) throws InterruptedException {
while (!reader.hasNext() && !stopped.get()) {
log.debug("Blocking until new S3 files are available.");
Thread.sleep(s3PollInterval);
readFromStoredOffsets();
}
if (stopped.get()) {
return results;
}
for (int i = 0; reader.hasNext() && i < maxPoll && !stopped.get(); i++) {
S3SourceRecord record = reader.next();
updateOffsets(record.file(), record.offset());
String topic = topicMapping.computeIfAbsent(record.topic(), this::remapTopic);
Optional<SchemaAndValue> key = keyConverter.map(c -> c.toConnectData(topic, record.key()));
SchemaAndValue value = valueConverter.toConnectData(topic, record.value());
results.add(new SourceRecord(record.file().asMap(), record.offset().asMap(), topic,
record.partition(),
key.map(SchemaAndValue::schema).orElse(null), key.map(SchemaAndValue::value).orElse(null),
value.schema(), value.value()));
}
log.debug("{} returning {} records.", name(), results.size());
return results;
}