docs: private GetRecordsResult getRecords(String shardItr, int maxNumberOfRecords) throws Exception {
  		GetRecordsResult getRecordsResult = null;
  		while (getRecordsResult == null) {
  			try {
  				getRecordsResult = kinesis.getRecords(shardItr, maxNumberOfRecords);
  
  				// Update millis behind latest so it gets reported by the millisBehindLatest gauge
  				Long millisBehindLatest = getRecordsResult.getMillisBehindLatest();
  				if (millisBehindLatest != null) {
  					shardMetricsReporter.setMillisBehindLatest(millisBehindLatest);
  				}
  			} catch (ExpiredIteratorException eiEx) {
  				LOG.warn("Encountered an unexpected expired iterator {} for shard {};" +
  					" refreshing the iterator ...", shardItr, subscribedShard);
  
  				shardItr = getShardIterator(lastSequenceNum);
  
  				// sleep for the fetch interval before the next getRecords attempt with the refreshed iterator
  				if (fetchIntervalMillis != 0) {
  					Thread.sleep(fetchIntervalMillis);
  				}
  			}
  		}
  		return getRecordsResult;
  	}