Compare commits
2 commits
test-lease
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6e79f1a2d | ||
|
|
3676eb410a |
5 changed files with 71 additions and 388 deletions
|
|
@ -332,6 +332,10 @@ func (cw *MonitoringService) RecordProcessRecordsTime(shard string, time float64
|
|||
m.processRecordsTime = append(m.processRecordsTime, time)
|
||||
}
|
||||
|
||||
func (cw *MonitoringService) DeleteMetricMillisBehindLatest(shard string) {
|
||||
// not implemented
|
||||
}
|
||||
|
||||
func (cw *MonitoringService) getOrCreatePerShardMetrics(shard string) *cloudWatchMetrics {
|
||||
var i interface{}
|
||||
var ok bool
|
||||
|
|
|
|||
|
|
@ -145,16 +145,6 @@ func (sc *PollingShardConsumer) getRecords() error {
|
|||
leaseRenewalErrChan <- sc.renewLease(ctx)
|
||||
}()
|
||||
for {
|
||||
select {
|
||||
case <-*sc.stop:
|
||||
shutdownInput := &kcl.ShutdownInput{ShutdownReason: kcl.REQUESTED, Checkpointer: recordCheckpointer}
|
||||
sc.recordProcessor.Shutdown(shutdownInput)
|
||||
return nil
|
||||
case leaseRenewalErr := <-leaseRenewalErrChan:
|
||||
return leaseRenewalErr
|
||||
default:
|
||||
}
|
||||
|
||||
getRecordsStartTime := time.Now()
|
||||
|
||||
log.Debugf("Trying to read %d record from iterator: %v", sc.kclConfig.MaxRecords, aws.ToString(shardIterator))
|
||||
|
|
@ -236,6 +226,15 @@ func (sc *PollingShardConsumer) getRecords() error {
|
|||
time.Sleep(time.Duration(sc.kclConfig.IdleTimeBetweenReadsInMillis) * time.Millisecond)
|
||||
}
|
||||
|
||||
select {
|
||||
case <-*sc.stop:
|
||||
shutdownInput := &kcl.ShutdownInput{ShutdownReason: kcl.REQUESTED, Checkpointer: recordCheckpointer}
|
||||
sc.recordProcessor.Shutdown(shutdownInput)
|
||||
return nil
|
||||
case leaseRenewalErr := <-leaseRenewalErrChan:
|
||||
return leaseRenewalErr
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -22,26 +22,17 @@ package worker
|
|||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/aws/aws-sdk-go-v2/aws"
|
||||
"github.com/aws/aws-sdk-go-v2/service/kinesis"
|
||||
"github.com/aws/aws-sdk-go-v2/service/kinesis/types"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/mock"
|
||||
chk "github.com/vmware/vmware-go-kcl-v2/clientlibrary/checkpoint"
|
||||
"github.com/vmware/vmware-go-kcl-v2/clientlibrary/config"
|
||||
kcl "github.com/vmware/vmware-go-kcl-v2/clientlibrary/interfaces"
|
||||
"github.com/vmware/vmware-go-kcl-v2/clientlibrary/metrics"
|
||||
par "github.com/vmware/vmware-go-kcl-v2/clientlibrary/partition"
|
||||
"github.com/vmware/vmware-go-kcl-v2/logger"
|
||||
)
|
||||
|
||||
var (
|
||||
testGetRecordsError = errors.New("GetRecords Error")
|
||||
getLeaseTestFailure = errors.New("GetLease test failure")
|
||||
)
|
||||
|
||||
func TestCallGetRecordsAPI(t *testing.T) {
|
||||
|
|
@ -203,8 +194,7 @@ func (m *MockKinesisSubscriberGetter) GetRecords(ctx context.Context, params *ki
|
|||
}
|
||||
|
||||
func (m *MockKinesisSubscriberGetter) GetShardIterator(ctx context.Context, params *kinesis.GetShardIteratorInput, optFns ...func(*kinesis.Options)) (*kinesis.GetShardIteratorOutput, error) {
|
||||
ret := m.Called(ctx, params, optFns)
|
||||
return ret.Get(0).(*kinesis.GetShardIteratorOutput), ret.Error(1)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (m *MockKinesisSubscriberGetter) SubscribeToShard(ctx context.Context, params *kinesis.SubscribeToShardInput, optFns ...func(*kinesis.Options)) (*kinesis.SubscribeToShardOutput, error) {
|
||||
|
|
@ -363,316 +353,3 @@ func TestPollingShardConsumer_checkCoolOffPeriod(t *testing.T) {
|
|||
// restore original time.Now
|
||||
rateLimitTimeNow = time.Now
|
||||
}
|
||||
|
||||
func TestPollingShardConsumer_renewLease(t *testing.T) {
|
||||
type fields struct {
|
||||
checkpointer chk.Checkpointer
|
||||
kclConfig *config.KinesisClientLibConfiguration
|
||||
mService metrics.MonitoringService
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
testMillis time.Duration
|
||||
expRenewalCalls int
|
||||
expRenewals int
|
||||
expErr error
|
||||
}{
|
||||
{
|
||||
"renew once",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 10,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
15,
|
||||
1,
|
||||
1,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"renew some",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 50,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
50*5 + 10,
|
||||
5,
|
||||
5,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"renew twice every 2.5 seconds",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 2500,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
5100,
|
||||
2,
|
||||
2,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"lease error",
|
||||
fields{
|
||||
&mockCheckpointer{fail: true},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 500,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
1100,
|
||||
1,
|
||||
0,
|
||||
getLeaseTestFailure,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
sc := &PollingShardConsumer{
|
||||
commonShardConsumer: commonShardConsumer{
|
||||
shard: &par.ShardStatus{},
|
||||
checkpointer: tt.fields.checkpointer,
|
||||
kclConfig: tt.fields.kclConfig,
|
||||
},
|
||||
mService: tt.fields.mService,
|
||||
}
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
leaseRenewalErrChan := make(chan error, 1)
|
||||
go func() {
|
||||
leaseRenewalErrChan <- sc.renewLease(ctx)
|
||||
}()
|
||||
time.Sleep(tt.testMillis * time.Millisecond)
|
||||
cancel()
|
||||
err := <-leaseRenewalErrChan
|
||||
assert.Equal(t, tt.expErr, err)
|
||||
assert.Equal(t, tt.expRenewalCalls, sc.checkpointer.(*mockCheckpointer).getLeaseCalledTimes)
|
||||
assert.Equal(t, tt.expRenewals, sc.mService.(*mockMetrics).leaseRenewedCalledTimes)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPollingShardConsumer_getRecordsRenewLease(t *testing.T) {
|
||||
log := logger.GetDefaultLogger()
|
||||
type fields struct {
|
||||
checkpointer chk.Checkpointer
|
||||
kclConfig *config.KinesisClientLibConfiguration
|
||||
mService metrics.MonitoringService
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
fields fields
|
||||
|
||||
// testMillis must be at least 200ms or you'll trigger the localTPSExceededError
|
||||
testMillis time.Duration
|
||||
expRenewalCalls int
|
||||
expRenewals int
|
||||
shardClosed bool
|
||||
expErr error
|
||||
}{
|
||||
{
|
||||
"renew once",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 200,
|
||||
Logger: log,
|
||||
InitialPositionInStream: config.LATEST,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
250,
|
||||
1,
|
||||
1,
|
||||
false,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"renew some",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 50,
|
||||
Logger: log,
|
||||
InitialPositionInStream: config.LATEST,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
50*5 + 10,
|
||||
5,
|
||||
5,
|
||||
false,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"renew twice every 2.5 seconds",
|
||||
fields{
|
||||
&mockCheckpointer{},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 2500,
|
||||
Logger: log,
|
||||
InitialPositionInStream: config.LATEST,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
5100,
|
||||
2,
|
||||
2,
|
||||
false,
|
||||
nil,
|
||||
},
|
||||
{
|
||||
"lease error",
|
||||
fields{
|
||||
&mockCheckpointer{fail: true},
|
||||
&config.KinesisClientLibConfiguration{
|
||||
LeaseRefreshWaitTime: 500,
|
||||
Logger: log,
|
||||
InitialPositionInStream: config.LATEST,
|
||||
},
|
||||
&mockMetrics{},
|
||||
},
|
||||
1100,
|
||||
1,
|
||||
0,
|
||||
false,
|
||||
getLeaseTestFailure,
|
||||
},
|
||||
}
|
||||
iterator := "test-iterator"
|
||||
nextIt := "test-next-iterator"
|
||||
millisBehind := int64(0)
|
||||
stopChan := make(chan struct{})
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
mk := MockKinesisSubscriberGetter{}
|
||||
gro := kinesis.GetRecordsOutput{
|
||||
Records: []types.Record{
|
||||
{
|
||||
Data: []byte{},
|
||||
PartitionKey: new(string),
|
||||
SequenceNumber: new(string),
|
||||
ApproximateArrivalTimestamp: &time.Time{},
|
||||
EncryptionType: "",
|
||||
},
|
||||
},
|
||||
MillisBehindLatest: &millisBehind,
|
||||
}
|
||||
if !tt.shardClosed {
|
||||
gro.NextShardIterator = &nextIt
|
||||
}
|
||||
mk.On("GetRecords", mock.Anything, mock.Anything, mock.Anything).Return(&gro, nil)
|
||||
mk.On("GetShardIterator", mock.Anything, mock.Anything, mock.Anything).Return(&kinesis.GetShardIteratorOutput{ShardIterator: &iterator}, nil)
|
||||
rp := mockRecordProcessor{
|
||||
processDurationMillis: tt.testMillis,
|
||||
}
|
||||
sc := &PollingShardConsumer{
|
||||
commonShardConsumer: commonShardConsumer{
|
||||
shard: &par.ShardStatus{
|
||||
ID: "test-shard-id",
|
||||
Mux: &sync.RWMutex{},
|
||||
},
|
||||
checkpointer: tt.fields.checkpointer,
|
||||
kclConfig: tt.fields.kclConfig,
|
||||
kc: &mk,
|
||||
recordProcessor: &rp,
|
||||
mService: tt.fields.mService,
|
||||
},
|
||||
stop: &stopChan,
|
||||
mService: tt.fields.mService,
|
||||
}
|
||||
|
||||
// Send the stop signal a little before the total time it should
|
||||
// take to get records and process them. This prevents test time
|
||||
// errors due to the threads running longer than the test case
|
||||
// expects.
|
||||
go func() {
|
||||
time.Sleep((tt.testMillis - 1) * time.Millisecond)
|
||||
stopChan <- struct{}{}
|
||||
}()
|
||||
|
||||
err := sc.getRecords()
|
||||
|
||||
assert.Equal(t, tt.expErr, err)
|
||||
assert.Equal(t, tt.expRenewalCalls, sc.checkpointer.(*mockCheckpointer).readGetLeaseCalledTimes())
|
||||
assert.Equal(t, tt.expRenewals, sc.mService.(*mockMetrics).readLeaseRenewedCalledTimes())
|
||||
mk.AssertExpectations(t)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
type mockCheckpointer struct {
|
||||
getLeaseCalledTimes int
|
||||
gLCTMu sync.Mutex
|
||||
fail bool
|
||||
}
|
||||
|
||||
func (m *mockCheckpointer) readGetLeaseCalledTimes() int {
|
||||
m.gLCTMu.Lock()
|
||||
defer m.gLCTMu.Unlock()
|
||||
return m.getLeaseCalledTimes
|
||||
}
|
||||
func (m *mockCheckpointer) Init() error { return nil }
|
||||
func (m *mockCheckpointer) GetLease(*par.ShardStatus, string) error {
|
||||
m.gLCTMu.Lock()
|
||||
defer m.gLCTMu.Unlock()
|
||||
m.getLeaseCalledTimes++
|
||||
if m.fail {
|
||||
return getLeaseTestFailure
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func (m *mockCheckpointer) CheckpointSequence(*par.ShardStatus) error { return nil }
|
||||
func (m *mockCheckpointer) FetchCheckpoint(*par.ShardStatus) error { return nil }
|
||||
func (m *mockCheckpointer) RemoveLeaseInfo(string) error { return nil }
|
||||
func (m *mockCheckpointer) RemoveLeaseOwner(string) error { return nil }
|
||||
func (m *mockCheckpointer) GetLeaseOwner(string) (string, error) { return "", nil }
|
||||
func (m *mockCheckpointer) ListActiveWorkers(map[string]*par.ShardStatus) (map[string][]*par.ShardStatus, error) {
|
||||
return map[string][]*par.ShardStatus{}, nil
|
||||
}
|
||||
func (m *mockCheckpointer) ClaimShard(*par.ShardStatus, string) error { return nil }
|
||||
|
||||
type mockRecordProcessor struct {
|
||||
processDurationMillis time.Duration
|
||||
}
|
||||
|
||||
func (m mockRecordProcessor) Initialize(initializationInput *kcl.InitializationInput) {}
|
||||
func (m mockRecordProcessor) ProcessRecords(processRecordsInput *kcl.ProcessRecordsInput) {
|
||||
time.Sleep(time.Millisecond * m.processDurationMillis)
|
||||
}
|
||||
func (m mockRecordProcessor) Shutdown(shutdownInput *kcl.ShutdownInput) {}
|
||||
|
||||
type mockMetrics struct {
|
||||
leaseRenewedCalledTimes int
|
||||
lRCTMu sync.Mutex
|
||||
}
|
||||
|
||||
func (m *mockMetrics) readLeaseRenewedCalledTimes() int {
|
||||
m.lRCTMu.Lock()
|
||||
defer m.lRCTMu.Unlock()
|
||||
return m.leaseRenewedCalledTimes
|
||||
}
|
||||
func (m *mockMetrics) Init(appName, streamName, workerID string) error { return nil }
|
||||
func (m *mockMetrics) Start() error { return nil }
|
||||
func (m *mockMetrics) IncrRecordsProcessed(shard string, count int) {}
|
||||
func (m *mockMetrics) IncrBytesProcessed(shard string, count int64) {}
|
||||
func (m *mockMetrics) MillisBehindLatest(shard string, milliSeconds float64) {}
|
||||
func (m *mockMetrics) DeleteMetricMillisBehindLatest(shard string) {}
|
||||
func (m *mockMetrics) LeaseGained(shard string) {}
|
||||
func (m *mockMetrics) LeaseLost(shard string) {}
|
||||
func (m *mockMetrics) LeaseRenewed(shard string) {
|
||||
m.lRCTMu.Lock()
|
||||
defer m.lRCTMu.Unlock()
|
||||
m.leaseRenewedCalledTimes++
|
||||
}
|
||||
func (m *mockMetrics) RecordGetRecordsTime(shard string, time float64) {}
|
||||
func (m *mockMetrics) RecordProcessRecordsTime(shard string, time float64) {}
|
||||
func (m *mockMetrics) Shutdown() {}
|
||||
|
|
|
|||
37
go.mod
37
go.mod
|
|
@ -1,14 +1,14 @@
|
|||
module github.com/vmware/vmware-go-kcl-v2
|
||||
|
||||
go 1.17
|
||||
go 1.21
|
||||
|
||||
require (
|
||||
github.com/aws/aws-sdk-go-v2 v1.11.2
|
||||
github.com/aws/aws-sdk-go-v2/config v1.11.1
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.6.5
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.13.0
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.11.0
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.11.0
|
||||
github.com/aws/aws-sdk-go-v2 v1.25.2
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.5
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.5
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.36.1
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.1
|
||||
github.com/awslabs/kinesis-aggregation/go/v2 v2.0.0-20211222152315-953b66f67407
|
||||
github.com/golang/protobuf v1.5.2
|
||||
github.com/google/uuid v1.3.0
|
||||
|
|
@ -23,17 +23,18 @@ require (
|
|||
|
||||
require (
|
||||
github.com/BurntSushi/toml v0.4.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.8.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.3.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.7.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.12.0 // indirect
|
||||
github.com/aws/smithy-go v1.9.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 // indirect
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.2 // indirect
|
||||
github.com/aws/smithy-go v1.20.1 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||
|
|
|
|||
74
go.sum
74
go.sum
|
|
@ -41,42 +41,44 @@ github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRF
|
|||
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
|
||||
github.com/aws/aws-sdk-go-v2 v1.9.0/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4=
|
||||
github.com/aws/aws-sdk-go-v2 v1.11.2 h1:SDiCYqxdIYi6HgQfAWRhgdZrdnOuGyLDJVRSWLeHWvs=
|
||||
github.com/aws/aws-sdk-go-v2 v1.11.2/go.mod h1:SQfA+m2ltnu1cA0soUkj4dRSsmITiVQUJvBIZjzfPyQ=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0 h1:yVUAwvJC/0WNPbyl0nA3j1L6CW1CN8wBubCRqtG7JLI=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.0.0/go.mod h1:Xn6sxgRuIDflLRJFj5Ev7UxABIkNbccFPV/p8itDReM=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.11.1 h1:KXSjb7ZMLRtjxClFptukTYibiOqJS9NwBO+9WD3UMto=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.11.1/go.mod h1:VvfkzUhVtntSg1JfGFMSKS0CyiTZd3NqBxK5af4zsME=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.6.5 h1:ZrsO2js2v4T95rsCIWoAb/ck5+U1kwkizGdZHY+ni3s=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.6.5/go.mod h1:HWSOnsnqVMbLcWUmom6AN1cqhcLzLJ62AObW28CbYbU=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.8.2 h1:KiN5TPOLrEjbGCvdTQR4t0U4T87vVwALZ5Bg3jpMqPY=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.8.2/go.mod h1:dF2F6tXEOgmW5X1ZFO/EPtWrcm7XkW07KNcJUGNtt4s=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.2 h1:XJLnluKuUxQG255zPNe+04izXl7GSyUVafIsgfv9aw4=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.2/go.mod h1:SgKKNBIoDC/E1ZCDhhMW3yalWjwuLjMcpLzsM/QQnWo=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.2 h1:EauRoYZVNPlidZSZJDscjJBQ22JhVF2+tdteatax2Ak=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.0.2/go.mod h1:xT4XX6w5Sa3dhg50JrYyy3e4WPYo/+WjY/BXtqXVunU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.2 h1:IQup8Q6lorXeiA/rK72PeToWoWK8h7VAPgHNWdSrtgE=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.2/go.mod h1:VITe/MdW6EMXPb0o0txu/fsonXbMHUU2OC2Qp7ivU4o=
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.13.0 h1:BcSBoss+CeyRS4TgZKAcR6kcZ0Sb2P+DHs8r8aMlTpQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.13.0/go.mod h1:eAgmZ4hIzTsTOlAA7yvGJz+RywxZo3KWtGt7J+jAUxU=
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.11.0 h1:te+nIFwPf5Bi/cZvd9g/+EF0gkJT3c0J/5+NMx0NBZg=
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.11.0/go.mod h1:ELltfl9ri0n4sZ/VjPZBgemNMd9mYIpCAuZhc7NP7l4=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0 h1:lPLbw4Gn59uoKqvOfSnkJr54XWk5Ak1NK20ZEiSWb3U=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.5.0/go.mod h1:80NaCIH9YU3rzTTs/J/ECATjXuRqzo/wB6ukO6MZ0XY=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.3.3 h1:ru9+IpkVIuDvIkm9Q0DEjtWHnh6ITDoZo8fH2dIjlqQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.3.3/go.mod h1:zOyLMYyg60yyZpOCniAUuibWVqTU4TuLmMa/Wh4P+HA=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.2 h1:CKdUNKmuilw/KNmO2Q53Av8u+ZyXMC2M9aX8Z+c/gzg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.5.2/go.mod h1:FgR1tCsn8C6+Hf+N5qkfrE4IXvUL1RgW87sunJ+5J4I=
|
||||
github.com/aws/aws-sdk-go-v2 v1.25.2 h1:/uiG1avJRgLGiQM9X3qJM8+Qa6KRGK5rRPuXE0HUM+w=
|
||||
github.com/aws/aws-sdk-go-v2 v1.25.2/go.mod h1:Evoc5AsmtveRt1komDwIsjHFyrP5tDuF1D1U+6z6pNo=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1 h1:gTK2uhtAPtFcdRRJilZPx8uJLL2J85xK11nKtWL0wfU=
|
||||
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.1/go.mod h1:sxpLb+nZk7tIfCWChfd+h4QwHNUR57d8hA1cleTkjJo=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.5 h1:brBPsyRFQn97M1ZhQ9tLXkO7Zytiar0NS06FGmEJBdg=
|
||||
github.com/aws/aws-sdk-go-v2/config v1.27.5/go.mod h1:I53uvsfddRRTG5YcC4n5Z3aOD1BU8hYCoIG7iEJG4wM=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.5 h1:yn3zSvIKC2NZIs40cY3kckcy9Zma96PrRR07N54PCvY=
|
||||
github.com/aws/aws-sdk-go-v2/credentials v1.17.5/go.mod h1:8JcKPAGZVnDWuR5lusAwmrSDtZnDIAnpQWaDC9RFt2g=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2 h1:AK0J8iYBFeUk2Ax7O8YpLtFsfhdOByh2QIkHmigpRYk=
|
||||
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.15.2/go.mod h1:iRlGzMix0SExQEviAyptRWRGdYNo3+ufW/lCzvKVTUc=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2 h1:bNo4LagzUKbjdxE0tIcR9pMzLR2U/Tgie1Hq1HQ3iH8=
|
||||
github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.2/go.mod h1:wRQv0nN6v9wDXuWThpovGQjqF1HFdcgWjporw14lS8k=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2 h1:EtOU5jsPdIQNP+6Q2C5e3d65NKT1PeCiQk+9OdzO12Q=
|
||||
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.2/go.mod h1:tyF5sKccmDz0Bv4NrstEr+/9YkSPJHrcO7UsUKf7pWM=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0 h1:hT8rVHwugYE2lEfdFE0QWVo81lF7jMrYJVDWI+f+VxU=
|
||||
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.0/go.mod h1:8tu/lYfQfFe6IGnaOdrpVgEL2IrrDOf6/m9RQum4NkY=
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.36.1 h1:mQySuI87thHtcbZvEDjwUROGWikU6fqgpHklCBXpJU4=
|
||||
github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.36.1/go.mod h1:Z1ThUUTuCO9PArtiQsTmBGBv+38NGj+795Zl0n1jgiM=
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2 h1:n+nT52A+Ik+ut1D8IV4EP1qfyUdP9Jq60uYfnlJwSWc=
|
||||
github.com/aws/aws-sdk-go-v2/service/dynamodb v1.30.2/go.mod h1:BzzW6QegtSMnC1BhD+lagiUDSRYjRTOhXAb1mLfEaMg=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1 h1:EyBZibRTVAs6ECHZOw5/wlylS9OcTzwyjeQMudmREjE=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.11.1/go.mod h1:JKpmtYhhPs7D97NL/ltqz7yCkERFW5dOlHyVl66ZYF8=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3 h1:/MpYoYvgshlGMFmSyfzGWf6HKoEo/DrKBoHxXR3vh+U=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/endpoint-discovery v1.9.3/go.mod h1:1Pf5vPqk8t9pdYB3dmUMRE/0m8u0IHHg8ESSiutJd0I=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3 h1:x0N5ftQzgcfRpCpTiyZC40pvNUJYhzf4UgCsAyO6/P8=
|
||||
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.11.3/go.mod h1:Ru7vg1iQ7cR4i7SZ/JTLYN9kaXtbL69UdgG0OQWQxW0=
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.6.0/go.mod h1:9O7UG2pELnP0hq35+Gd7XDjOLBkg7tmgRQ0y14ZjoJI=
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.11.0 h1:s47dGRX/fBy9s/Zculav/cyqRhkMKsE/5hjg6rWAH6E=
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.11.0/go.mod h1:B1x58TfECuYHFX/bga902rUvMqQu9C/v2XiCi2GZZXE=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.7.0 h1:E4fxAg/UE8a6yiLZYv8/EP0uXKPPRImiMau4ift6S/g=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.7.0/go.mod h1:KnIpszaIdwI33tmc/W/GGXyn22c1USYxA/2KyvoeDY0=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.12.0 h1:7g0252k2TF3eA1DtfkTQB/tqI41YvbUPaolwTR0/ITc=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.12.0/go.mod h1:UV2N5HaPfdbDpkgkz4sRzWCvQswZjdO1FfqCWl0t7RA=
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.1 h1:p8dOJ/UKXOwttc1Cxw1Ek52klVmMuiaCUkhsUGxce1I=
|
||||
github.com/aws/aws-sdk-go-v2/service/kinesis v1.27.1/go.mod h1:VpH1IBG1YYZHPu5qShNt7EGaqUQbHAJZrbDtEpqDvvY=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1 h1:utEGkfdQ4L6YW/ietH7111ZYglLJvS+sLriHJ1NBJEQ=
|
||||
github.com/aws/aws-sdk-go-v2/service/sso v1.20.1/go.mod h1:RsYqzYr2F2oPDdpy+PdhephuZxTfjHQe7SOBcZGoAU8=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1 h1:9/GylMS45hGGFCcMrUZDVayQE1jYSIN6da9jo7RAYIw=
|
||||
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.1/go.mod h1:YjAPFn4kGFqKC54VsHs5fn5B6d+PCY2tziEa3U/GB5Y=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.2 h1:0YjXuWdYHvsm0HnT4vO8XpwG1D+i2roxSCBoN6deJ7M=
|
||||
github.com/aws/aws-sdk-go-v2/service/sts v1.28.2/go.mod h1:jI+FWmYkSMn+4APWmZiZTgt0oM0TrvymD51FMqCnWgA=
|
||||
github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.9.0 h1:c7FUdEqrQA1/UVKKCNDFQPNKGp4FQg3YW4Ck5SLTG58=
|
||||
github.com/aws/smithy-go v1.9.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E=
|
||||
github.com/aws/smithy-go v1.20.1 h1:4SZlSlMr36UEqC7XOyRVb27XMeZubNcBNN+9IgEPIQw=
|
||||
github.com/aws/smithy-go v1.20.1/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E=
|
||||
github.com/awslabs/kinesis-aggregation/go/v2 v2.0.0-20211222152315-953b66f67407 h1:p8Ubi4GEgfRc1xFn/WtGNkVG8RXxGHOsKiwGptufIo8=
|
||||
github.com/awslabs/kinesis-aggregation/go/v2 v2.0.0-20211222152315-953b66f67407/go.mod h1:0Qr1uMHFmHsIYMcG4T7BJ9yrJtWadhOmpABCX69dwuc=
|
||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
||||
|
|
@ -153,8 +155,9 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
|
|||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg=
|
||||
github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
|
||||
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
|
||||
|
|
@ -454,7 +457,6 @@ golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
|
|||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
|
|
|
|||
Loading…
Reference in a new issue