Process empty record list in Amazon KCL

Medium
Processing empty records from getRecords operations is more efficient by setting withCallProcessRecordsEvenForEmptyRecordList to TRUE during Kinesis Client Library (KCL) initialization. This will allow for differentiation of empty records so that they may be treated differently.
Detector ID
java/kcl-with-call-process-records@v1.0
Category
Code Quality
Tags
  • amazon-kinesis
  • aws-java-sdk
  • efficiency
Common Weakness Enumeration (CWE) 

Noncompliant example

  public KinesisClientLibConfiguration configureKCLNoncompliant() {
    // Noncompliant: doesn't set withCallProcessRecordsEvenForEmptyRecordList to true during Kinesis Client Library (KCL) initialization.
    KinesisClientLibConfiguration kclConfig = new KinesisClientLibConfiguration(applicationName,
            streamARN, ddbStreamCredentials, workerID)
            .withMaxRecords(maxRecords)
            .withIdleTimeBetweenReadsInMillis(idleTimeBetweenReadsInMillis)
            .withFailoverTimeMillis(leaseFailOverTimeInMillis)
            .withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON);
    return kclConfig;
}

Compliant example

  public KinesisClientLibConfiguration configureKCLCompliant() {
    // Compliant: sets withCallProcessRecordsEvenForEmptyRecordList to true during Kinesis Client Library (KCL) initialization.
    KinesisClientLibConfiguration kclConfig = new KinesisClientLibConfiguration(applicationName,
            streamARN, ddbStreamCredentials, workerID)
            .withMaxRecords(maxRecords)
            .withCallProcessRecordsEvenForEmptyRecordList(true)
            .withIdleTimeBetweenReadsInMillis(idleTimeBetweenReadsInMillis)
            .withFailoverTimeMillis(leaseFailOverTimeInMillis)
            .withInitialPositionInStream(InitialPositionInStream.TRIM_HORIZON);
    return kclConfig;
}