Merge branch 'master' into add_more_config_for_redis

This commit is contained in:
Phil Kedy 2021-03-18 17:56:00 -04:00 committed by GitHub
commit 280f810047
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
23 changed files with 55 additions and 53 deletions

View File

@ -18,7 +18,7 @@ Input binding:
```go
type InputBinding interface {
Init(metadata Metadata) error
Read(handler func(*ReadResponse) error) error
Read(handler func(*ReadResponse) ([]byte, error) error
}
```

View File

@ -67,12 +67,12 @@ const (
// recordProcessorFactory
type recordProcessorFactory struct {
logger logger.Logger
handler func(*bindings.ReadResponse) error
handler func(*bindings.ReadResponse) ([]byte, error)
}
type recordProcessor struct {
logger logger.Logger
handler func(*bindings.ReadResponse) error
handler func(*bindings.ReadResponse) ([]byte, error)
}
// NewAWSKinesis returns a new AWS Kinesis instance
@ -140,7 +140,7 @@ func (a *AWSKinesis) Invoke(req *bindings.InvokeRequest) (*bindings.InvokeRespon
return nil, err
}
func (a *AWSKinesis) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AWSKinesis) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
if a.metadata.KinesisConsumerMode == SharedThroughput {
a.worker = worker.NewWorker(a.recordProcessorFactory(handler), a.workerConfig, nil)
err := a.worker.Start()
@ -170,7 +170,7 @@ func (a *AWSKinesis) Read(handler func(*bindings.ReadResponse) error) error {
}
// Subscribe to all shards
func (a *AWSKinesis) Subscribe(ctx context.Context, streamDesc kinesis.StreamDescription, handler func(*bindings.ReadResponse) error) error {
func (a *AWSKinesis) Subscribe(ctx context.Context, streamDesc kinesis.StreamDescription, handler func(*bindings.ReadResponse) ([]byte, error)) error {
consumerARN, err := a.ensureConsumer(streamDesc.StreamARN)
if err != nil {
a.logger.Error(err)
@ -320,7 +320,7 @@ func (a *AWSKinesis) parseMetadata(metadata bindings.Metadata) (*kinesisMetadata
return &m, nil
}
func (a *AWSKinesis) recordProcessorFactory(handler func(*bindings.ReadResponse) error) interfaces.IRecordProcessorFactory {
func (a *AWSKinesis) recordProcessorFactory(handler func(*bindings.ReadResponse) ([]byte, error)) interfaces.IRecordProcessorFactory {
return &recordProcessorFactory{logger: a.logger, handler: handler}
}

View File

@ -78,7 +78,7 @@ func (a *AWSSQS) Invoke(req *bindings.InvokeRequest) (*bindings.InvokeResponse,
return nil, err
}
func (a *AWSSQS) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AWSSQS) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
for {
result, err := a.Client.ReceiveMessage(&sqs.ReceiveMessageInput{
QueueUrl: a.QueueURL,
@ -101,7 +101,7 @@ func (a *AWSSQS) Read(handler func(*bindings.ReadResponse) error) error {
res := bindings.ReadResponse{
Data: []byte(*body),
}
err := handler(&res)
_, err := handler(&res)
if err == nil {
msgHandle := m.ReceiptHandle

View File

@ -63,7 +63,7 @@ func (a *AzureEventGrid) Init(metadata bindings.Metadata) error {
return nil
}
func (a *AzureEventGrid) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AzureEventGrid) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
err := a.ensureInputBindingMetadata()
if err != nil {
return err
@ -88,7 +88,7 @@ func (a *AzureEventGrid) Read(handler func(*bindings.ReadResponse) error) error
case "POST":
bodyBytes := ctx.PostBody()
err = handler(&bindings.ReadResponse{
_, err = handler(&bindings.ReadResponse{
Data: bodyBytes,
})
if err != nil {

View File

@ -168,7 +168,7 @@ func (a *AzureEventHubs) Invoke(req *bindings.InvokeRequest) (*bindings.InvokeRe
}
// Read gets messages from eventhubs in a non-blocking fashion
func (a *AzureEventHubs) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AzureEventHubs) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
if !a.metadata.partitioned() {
if err := a.RegisterEventProcessor(handler); err != nil {
return err
@ -190,7 +190,7 @@ func (a *AzureEventHubs) Read(handler func(*bindings.ReadResponse) error) error
}
// RegisterPartitionedEventProcessor - receive eventhub messages by partitionID
func (a *AzureEventHubs) RegisterPartitionedEventProcessor(handler func(*bindings.ReadResponse) error) error {
func (a *AzureEventHubs) RegisterPartitionedEventProcessor(handler func(*bindings.ReadResponse) ([]byte, error)) error {
ctx := context.Background()
runtimeInfo, err := a.hub.GetRuntimeInformation(ctx)
@ -241,7 +241,7 @@ func contains(arr []string, str string) bool {
// RegisterEventProcessor - receive eventhub messages by eventprocessor
// host by balancing partitions
func (a *AzureEventHubs) RegisterEventProcessor(handler func(*bindings.ReadResponse) error) error {
func (a *AzureEventHubs) RegisterEventProcessor(handler func(*bindings.ReadResponse) ([]byte, error)) error {
cred, err := azblob.NewSharedKeyCredential(a.metadata.storageAccountName, a.metadata.storageAccountKey)
if err != nil {
return err
@ -259,7 +259,9 @@ func (a *AzureEventHubs) RegisterEventProcessor(handler func(*bindings.ReadRespo
_, err = processor.RegisterHandler(context.Background(),
func(c context.Context, e *eventhub.Event) error {
return handler(&bindings.ReadResponse{Data: e.Data})
_, err = handler(&bindings.ReadResponse{Data: e.Data})
return err
})
if err != nil {
return err

View File

@ -158,9 +158,9 @@ func (a *AzureServiceBusQueues) Invoke(req *bindings.InvokeRequest) (*bindings.I
return nil, a.client.Send(ctx, msg)
}
func (a *AzureServiceBusQueues) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AzureServiceBusQueues) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
var sbHandler servicebus.HandlerFunc = func(ctx context.Context, msg *servicebus.Message) error {
err := handler(&bindings.ReadResponse{
_, err := handler(&bindings.ReadResponse{
Data: msg.Data,
Metadata: map[string]string{id: msg.ID, correlationID: msg.CorrelationID, label: msg.Label},
})

View File

@ -29,7 +29,7 @@ const (
)
type consumer struct {
callback func(*bindings.ReadResponse) error
callback func(*bindings.ReadResponse) ([]byte, error)
}
// QueueHelper enables injection for testnig
@ -107,7 +107,7 @@ func (d *AzureQueueHelper) Read(ctx context.Context, consumer *consumer) error {
data = []byte(mt)
}
err = consumer.callback(&bindings.ReadResponse{
_, err = consumer.callback(&bindings.ReadResponse{
Data: data,
Metadata: map[string]string{},
})
@ -220,7 +220,7 @@ func (a *AzureStorageQueues) Invoke(req *bindings.InvokeRequest) (*bindings.Invo
return nil, nil
}
func (a *AzureStorageQueues) Read(handler func(*bindings.ReadResponse) error) error {
func (a *AzureStorageQueues) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
c := consumer{
callback: handler,
}

View File

@ -144,11 +144,11 @@ func TestReadQueue(t *testing.T) {
assert.Nil(t, err)
handler := func(data *bindings.ReadResponse) error {
handler := func(data *bindings.ReadResponse) ([]byte, error) {
s := string(data.Data)
assert.Equal(t, s, "This is my message")
return nil
return nil, nil
}
go a.Read(handler)
@ -179,11 +179,11 @@ func TestReadQueueDecode(t *testing.T) {
assert.Nil(t, err)
handler := func(data *bindings.ReadResponse) error {
handler := func(data *bindings.ReadResponse) ([]byte, error) {
s := string(data.Data)
assert.Equal(t, s, "This is my message")
return nil
return nil, nil
}
go a.Read(handler)
@ -211,10 +211,10 @@ func TestReadQueueDecode(t *testing.T) {
assert.Nil(t, err)
var handler = func(data *bindings.ReadResponse) error {
var handler = func(data *bindings.ReadResponse) ([]byte, error) {
s := string(data.Data)
assert.Equal(t, s, "This is my message")
return nil
return nil, nil
}
_ = a.Read(handler)
@ -236,11 +236,11 @@ func TestReadQueueNoMessage(t *testing.T) {
err := a.Init(m)
assert.Nil(t, err)
handler := func(data *bindings.ReadResponse) error {
handler := func(data *bindings.ReadResponse) ([]byte, error) {
s := string(data.Data)
assert.Equal(t, s, "This is my message")
return nil
return nil, nil
}
go a.Read(handler)

View File

@ -55,7 +55,7 @@ func (b *Binding) Init(metadata bindings.Metadata) error {
}
// Read triggers the Cron scheduler
func (b *Binding) Read(handler func(*bindings.ReadResponse) error) error {
func (b *Binding) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
c := cron.New(cron.WithParser(b.parser))
id, err := c.AddFunc(b.schedule, func() {
b.logger.Debugf("schedule fired: %v", time.Now())

View File

@ -59,7 +59,7 @@ func TestCronReadWithDeleteInvoke(t *testing.T) {
assert.NoErrorf(t, c.Init(getTestMetadata(schedule)), "error initializing valid schedule")
testsNum := 3
i := 0
err := c.Read(func(res *bindings.ReadResponse) error {
err := c.Read(func(res *bindings.ReadResponse) ([]byte, error) {
assert.NotNil(t, res)
assert.LessOrEqualf(t, i, testsNum, "Invoke didn't stop the schedule")
i++
@ -73,7 +73,7 @@ func TestCronReadWithDeleteInvoke(t *testing.T) {
assert.Equal(t, schedule, scheduleVal)
}
return nil
return nil, nil
})
assert.NoErrorf(t, err, "error on read")
}

View File

@ -80,10 +80,10 @@ func (g *GCPPubSub) parseMetadata(metadata bindings.Metadata) ([]byte, error) {
return b, err
}
func (g *GCPPubSub) Read(handler func(*bindings.ReadResponse) error) error {
func (g *GCPPubSub) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
sub := g.client.Subscription(g.metadata.Subscription)
err := sub.Receive(context.Background(), func(ctx context.Context, m *pubsub.Message) {
err := handler(&bindings.ReadResponse{
_, err := handler(&bindings.ReadResponse{
Data: m.Data,
Metadata: map[string]string{id: m.ID, publishTime: m.PublishTime.String()},
})

View File

@ -10,5 +10,5 @@ type InputBinding interface {
// Init passes connection and properties metadata to the binding implementation
Init(metadata Metadata) error
// Read is a blocking method that triggers the callback function whenever an event arrives
Read(handler func(*ReadResponse) error) error
Read(handler func(*ReadResponse) ([]byte, error)) error
}

View File

@ -52,13 +52,13 @@ type kafkaMetadata struct {
type consumer struct {
ready chan bool
callback func(*bindings.ReadResponse) error
callback func(*bindings.ReadResponse) ([]byte, error)
}
func (consumer *consumer) ConsumeClaim(session sarama.ConsumerGroupSession, claim sarama.ConsumerGroupClaim) error {
for message := range claim.Messages() {
if consumer.callback != nil {
err := consumer.callback(&bindings.ReadResponse{
_, err := consumer.callback(&bindings.ReadResponse{
Data: message.Value,
})
if err == nil {
@ -207,7 +207,7 @@ func (k *Kafka) getSyncProducer(meta *kafkaMetadata) (sarama.SyncProducer, error
return producer, nil
}
func (k *Kafka) Read(handler func(*bindings.ReadResponse) error) error {
func (k *Kafka) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
config := sarama.NewConfig()
config.Version = sarama.V1_0_0_0
// ignore SASL properties if authRequired is false

View File

@ -72,7 +72,7 @@ func (k *kubernetesInput) parseMetadata(metadata bindings.Metadata) error {
return nil
}
func (k *kubernetesInput) Read(handler func(*bindings.ReadResponse) error) error {
func (k *kubernetesInput) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
watchlist := cache.NewListWatchFromClient(
k.kubeClient.CoreV1().RESTClient(),
"events",

View File

@ -95,7 +95,7 @@ func (m *MQTT) Invoke(req *bindings.InvokeRequest) (*bindings.InvokeResponse, er
return nil, nil
}
func (m *MQTT) Read(handler func(*bindings.ReadResponse) error) error {
func (m *MQTT) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt, syscall.SIGTERM)

View File

@ -220,7 +220,7 @@ func (r *RabbitMQ) declareQueue() (amqp.Queue, error) {
return r.channel.QueueDeclare(r.metadata.QueueName, r.metadata.Durable, r.metadata.DeleteWhenUnused, r.metadata.Exclusive, false, args)
}
func (r *RabbitMQ) Read(handler func(*bindings.ReadResponse) error) error {
func (r *RabbitMQ) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
msgs, err := r.channel.Consume(
r.queue.Name,
"",
@ -238,7 +238,7 @@ func (r *RabbitMQ) Read(handler func(*bindings.ReadResponse) error) error {
go func() {
for d := range msgs {
err := handler(&bindings.ReadResponse{
_, err := handler(&bindings.ReadResponse{
Data: d.Body,
})
if err == nil {

View File

@ -9,7 +9,7 @@ import (
"github.com/dapr/components-contrib/state"
)
// ReadResponse is an the return object from an dapr input binding
// ReadResponse is the return object from an dapr input binding
type ReadResponse struct {
Data []byte `json:"data"`
Metadata map[string]string `json:"metadata"`

View File

@ -60,7 +60,7 @@ func (b *Binding) Init(metadata bindings.Metadata) error {
}
// Read triggers the RethinkDB scheduler
func (b *Binding) Read(handler func(*bindings.ReadResponse) error) error {
func (b *Binding) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
b.logger.Infof("subscribing to state changes in %s.%s...", b.config.Database, b.config.Table)
cursor, err := r.DB(b.config.Database).Table(b.config.Table).Changes(r.ChangesOpts{
IncludeTypes: true,
@ -94,7 +94,7 @@ func (b *Binding) Read(handler func(*bindings.ReadResponse) error) error {
},
}
if err := handler(resp); err != nil {
if _, err := handler(resp); err != nil {
b.logger.Errorf("error invoking change handler: %v", err)
continue

View File

@ -64,11 +64,11 @@ func TestBinding(t *testing.T) {
assert.NoErrorf(t, err, "error initializing")
go func() {
err = b.Read(func(res *bindings.ReadResponse) error {
err = b.Read(func(res *bindings.ReadResponse) ([]byte, error) {
assert.NotNil(t, res)
t.Logf("state change event:\n%s", string(res.Data))
return nil
return nil, nil
})
assert.NoErrorf(t, err, "error on read")
}()

View File

@ -76,7 +76,7 @@ func (t *Binding) Operations() []bindings.OperationKind {
}
// Read triggers the Twitter search and events on each result tweet
func (t *Binding) Read(handler func(*bindings.ReadResponse) error) error {
func (t *Binding) Read(handler func(*bindings.ReadResponse) ([]byte, error)) error {
if t.query == "" {
return nil
}

View File

@ -60,11 +60,11 @@ func TestReadError(t *testing.T) {
err := tw.Init(m)
assert.Nilf(t, err, "error initializing valid metadata properties")
tw.Read(func(res *bindings.ReadResponse) error {
tw.Read(func(res *bindings.ReadResponse) ([]byte, error) {
t.Logf("result: %+v", res)
assert.NotNilf(t, err, "no error on read with invalid credentials")
return nil
return nil, nil
})
}
@ -84,7 +84,7 @@ func TestReed(t *testing.T) {
assert.Nilf(t, err, "error initializing read")
counter := 0
err = tw.Read(func(res *bindings.ReadResponse) error {
err = tw.Read(func(res *bindings.ReadResponse) ([]byte, error) {
counter++
t.Logf("tweet[%d]", counter)
var tweet twitter.Tweet
@ -92,7 +92,7 @@ func TestReed(t *testing.T) {
assert.NotEmpty(t, tweet.IDStr, "tweet should have an ID")
os.Exit(0)
return nil
return nil, nil
})
assert.Nilf(t, err, "error on read")
}

View File

@ -102,7 +102,7 @@ func parseRedisMetadata(meta state.Metadata) (metadata, error) {
if val, ok := meta.Properties[maxRetryBackoff]; ok && val != "" {
parsedVal, err := strconv.ParseInt(val, defaultBase, defaultBitSize)
if err != nil {
return m, fmt.Errorf("redis store error: can't parse maxRetries field: %s", err)
return m, fmt.Errorf("redis store error: can't parse maxRetryBackoff field: %s", err)
}
m.maxRetryBackoff = time.Duration(parsedVal)
}

View File

@ -217,10 +217,10 @@ func ConformanceTests(t *testing.T, props map[string]string, inputBinding bindin
}
func readFromInputBinding(binding bindings.InputBinding, reads *int, readChan chan int) {
binding.Read(func(r *bindings.ReadResponse) error {
binding.Read(func(r *bindings.ReadResponse) ([]byte, error) {
(*reads)++
readChan <- (*reads)
return nil
return nil, nil
})
}