@Override public Records getNext(int maxNumberOfRecords) { ensureBuffered(); if (!it.hasNext() && buffer.isEndOfShard()) { return new Records(ImmutableList.<Record>of(), true); } ImmutableList.Builder<Record> recs = new ImmutableList.Builder<>(); int recsSize = 0; while (recsSize < maxNumberOfRecords) { if (it.hasNext()) { recs.add(it.next()); recsSize++; } else if (!it.hasNext() && !buffer.isEndOfShard()) { rebuffer(); // No more data in shard. if (!it.hasNext()) { break; } } else { // No more records, end of shard. break; } } return new Records(recs.build(), false); }