Limit the amount of library dependencies by using the official AWS SDK. https://github.com/harlow/kinesis-connectors/issues/19
51 lines
1.5 KiB
Go
51 lines
1.5 KiB
Go
package connector
|
|
|
|
// RecordBuffer is a basic implementation of the Buffer interface.
|
|
// It buffer's records and answers questions on when it should be periodically flushed.
|
|
type RecordBuffer struct {
|
|
NumRecordsToBuffer int
|
|
|
|
firstSequenceNumber string
|
|
lastSequenceNumber string
|
|
recordsInBuffer []interface{}
|
|
}
|
|
|
|
// ProcessRecord adds a message to the buffer.
|
|
func (b *RecordBuffer) ProcessRecord(record interface{}, sequenceNumber string) {
|
|
if b.NumRecordsInBuffer() == 0 {
|
|
b.firstSequenceNumber = sequenceNumber
|
|
}
|
|
|
|
b.lastSequenceNumber = sequenceNumber
|
|
b.recordsInBuffer = append(b.recordsInBuffer, record)
|
|
}
|
|
|
|
// Records returns the records in the buffer.
|
|
func (b *RecordBuffer) Records() []interface{} {
|
|
return b.recordsInBuffer
|
|
}
|
|
|
|
// NumRecordsInBuffer returns the number of messages in the buffer.
|
|
func (b RecordBuffer) NumRecordsInBuffer() int {
|
|
return len(b.recordsInBuffer)
|
|
}
|
|
|
|
// Flush empties the buffer and resets the sequence counter.
|
|
func (b *RecordBuffer) Flush() {
|
|
b.recordsInBuffer = b.recordsInBuffer[:0]
|
|
}
|
|
|
|
// ShouldFlush determines if the buffer has reached its target size.
|
|
func (b *RecordBuffer) ShouldFlush() bool {
|
|
return len(b.recordsInBuffer) >= b.NumRecordsToBuffer
|
|
}
|
|
|
|
// FirstSequenceNumber returns the sequence number of the first message in the buffer.
|
|
func (b *RecordBuffer) FirstSequenceNumber() string {
|
|
return b.firstSequenceNumber
|
|
}
|
|
|
|
// LastSequenceNumber returns the sequence number of the last message in the buffer.
|
|
func (b *RecordBuffer) LastSequenceNumber() string {
|
|
return b.lastSequenceNumber
|
|
}
|