Process empty record list in Amazon KCL
MediumProcessing 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
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;
}