2014-07-25 06:03:41 +00:00
|
|
|
package connector
|
|
|
|
|
|
2016-02-03 05:04:22 +00:00
|
|
|
import "github.com/aws/aws-sdk-go/service/kinesis"
|
|
|
|
|
|
|
|
|
|
// Buffer holds records and answers questions on when it
|
|
|
|
|
// should be periodically flushed.
|
|
|
|
|
type Buffer struct {
|
|
|
|
|
records []*kinesis.Record
|
|
|
|
|
firstSequenceNumber string
|
|
|
|
|
lastSequenceNumber string
|
|
|
|
|
|
2016-02-10 06:31:15 +00:00
|
|
|
MaxBatchCount int
|
2016-02-03 05:04:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// AddRecord adds a record to the buffer.
|
|
|
|
|
func (b *Buffer) AddRecord(r *kinesis.Record) {
|
|
|
|
|
if len(b.records) == 0 {
|
|
|
|
|
b.firstSequenceNumber = *r.SequenceNumber
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
b.records = append(b.records, r)
|
|
|
|
|
b.lastSequenceNumber = *r.SequenceNumber
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ShouldFlush determines if the buffer has reached its target size.
|
|
|
|
|
func (b *Buffer) ShouldFlush() bool {
|
2016-02-10 06:31:15 +00:00
|
|
|
return len(b.records) >= b.MaxBatchCount
|
2016-02-03 05:04:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Flush empties the buffer and resets the sequence counter.
|
|
|
|
|
func (b *Buffer) Flush() {
|
|
|
|
|
b.records = b.records[:0]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GetRecords returns the records in the buffer.
|
|
|
|
|
func (b *Buffer) GetRecords() []*kinesis.Record {
|
|
|
|
|
return b.records
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// FirstSequenceNumber returns the sequence number of the first record in the buffer.
|
|
|
|
|
func (b *Buffer) FirstSeq() string {
|
|
|
|
|
return b.firstSequenceNumber
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// LastSeq returns the sequence number of the last record in the buffer.
|
|
|
|
|
func (b *Buffer) LastSeq() string {
|
|
|
|
|
return b.lastSequenceNumber
|
2014-07-25 06:03:41 +00:00
|
|
|
}
|