Skip to content

Commit

Permalink
Prefer retry.WithPolicy over other retrial methods
Browse files Browse the repository at this point in the history
  • Loading branch information
oklahomer committed Jun 10, 2018
1 parent b5e6518 commit d707589
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 42 deletions.
8 changes: 4 additions & 4 deletions gitter/adapter.go
Expand Up @@ -49,10 +49,10 @@ func (adapter *Adapter) BotType() sarah.BotType {
func (adapter *Adapter) Run(ctx context.Context, enqueueInput func(sarah.Input) error, notifyErr func(error)) {
// Get belonging rooms.
var rooms *Rooms
err := retry.WithInterval(adapter.config.RetryLimit, func() (e error) {
err := retry.WithPolicy(adapter.config.RetryPolicy, func() (e error) {
rooms, e = adapter.apiClient.Rooms(ctx)
return e
}, adapter.config.RetryInterval)
})
if err != nil {
notifyErr(sarah.NewBotNonContinuableError(err.Error()))
return
Expand Down Expand Up @@ -91,10 +91,10 @@ func (adapter *Adapter) runEachRoom(ctx context.Context, room *Room, enqueueInpu
log.Infof("connecting to room: %s", room.ID)

var conn Connection
err := retry.WithInterval(adapter.config.RetryLimit, func() (e error) {
err := retry.WithPolicy(adapter.config.RetryPolicy, func() (e error) {
conn, e = adapter.streamingClient.Connect(ctx, room)
return e
}, adapter.config.RetryInterval)
})
if err != nil {
log.Warnf("could not connect to room: %s. error: %s.", room.ID, err.Error())
return
Expand Down
26 changes: 16 additions & 10 deletions gitter/adapter_test.go
Expand Up @@ -3,6 +3,7 @@ package gitter
import (
"errors"
"github.com/oklahomer/go-sarah"
"github.com/oklahomer/go-sarah/retry"
"golang.org/x/net/context"
"reflect"
"testing"
Expand Down Expand Up @@ -141,8 +142,9 @@ func TestAdapter_runEachRoom(t *testing.T) {
},
},
config: &Config{
RetryLimit: retryLimit,
RetryInterval: 1 * time.Millisecond,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
}

Expand Down Expand Up @@ -183,8 +185,9 @@ func TestAdapter_runEachRoom_ConnectionInitializationError(t *testing.T) {
},
},
config: &Config{
RetryLimit: retryLimit,
RetryInterval: 1 * time.Millisecond,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
}

Expand Down Expand Up @@ -237,8 +240,9 @@ func TestAdapter_runEachRoom_ConnectionError(t *testing.T) {
},
},
config: &Config{
RetryLimit: 1,
RetryInterval: 1 * time.Millisecond,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
}

Expand Down Expand Up @@ -277,8 +281,9 @@ func TestAdapter_Run(t *testing.T) {
roomID := "dummy"
adapter := &Adapter{
config: &Config{
RetryLimit: 1,
RetryInterval: 100 * time.Millisecond,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
apiClient: &DummyAPIClient{
RoomsFunc: func(_ context.Context) (*Rooms, error) {
Expand Down Expand Up @@ -313,8 +318,9 @@ func TestAdapter_Run(t *testing.T) {
func TestAdapter_Run_RestAPIClientRoomsError(t *testing.T) {
adapter := &Adapter{
config: &Config{
RetryLimit: 1,
RetryInterval: 100 * time.Millisecond,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
apiClient: &DummyAPIClient{
RoomsFunc: func(_ context.Context) (*Rooms, error) {
Expand Down
18 changes: 11 additions & 7 deletions gitter/config.go
@@ -1,21 +1,25 @@
package gitter

import "time"
import (
"github.com/oklahomer/go-sarah/retry"
"time"
)

// Config contains some configuration variables for gitter Adapter.
type Config struct {
Token string `json:"token" yaml:"token"`
RetryLimit uint `json:"retry_limit" yaml:"retry_limit"`
RetryInterval time.Duration `json:"retry_interval" yaml:"retry_interval"`
Token string `json:"token" yaml:"token"`
RetryPolicy *retry.Policy `json:"retry_policy" yaml:"retry_policy"`
}

// NewConfig returns initialized Config struct with default settings.
// Token is empty at this point. Token can be set by feeding this instance to json.Unmarshal/yaml.Unmarshal,
// or direct assignment.
func NewConfig() *Config {
return &Config{
Token: "",
RetryLimit: 10,
RetryInterval: 500 * time.Millisecond,
Token: "",
RetryPolicy: &retry.Policy{
Trial: 10,
Interval: 500 * time.Millisecond,
},
}
}
8 changes: 4 additions & 4 deletions slack/adapter.go
Expand Up @@ -230,20 +230,20 @@ func (adapter *Adapter) superviseConnection(connCtx context.Context, payloadSend
func (adapter *Adapter) connect(ctx context.Context) (rtmapi.Connection, error) {
// Get RTM session via Web API.
var rtmStart *webapi.RTMStart
err := retry.WithInterval(adapter.config.RetryLimit, func() (e error) {
err := retry.WithPolicy(adapter.config.RetryPolicy, func() (e error) {
rtmStart, e = adapter.client.StartRTMSession(ctx)
return e
}, adapter.config.RetryInterval)
})
if err != nil {
return nil, err
}

// Establish WebSocket connection with given RTM session.
var conn rtmapi.Connection
err = retry.WithInterval(adapter.config.RetryLimit, func() (e error) {
err = retry.WithPolicy(adapter.config.RetryPolicy, func() (e error) {
conn, e = adapter.client.ConnectRTM(ctx, rtmStart.URL)
return e
}, adapter.config.RetryInterval)
})

return conn, err
}
Expand Down
30 changes: 18 additions & 12 deletions slack/adapter_test.go
Expand Up @@ -3,6 +3,7 @@ package slack
import (
"errors"
"github.com/oklahomer/go-sarah"
"github.com/oklahomer/go-sarah/retry"
"github.com/oklahomer/golack/rtmapi"
"github.com/oklahomer/golack/slackobject"
"github.com/oklahomer/golack/webapi"
Expand Down Expand Up @@ -384,9 +385,10 @@ func TestAdapter_Run(t *testing.T) {

adapter := &Adapter{
config: &Config{
PingInterval: 100 * time.Second,
RetryInterval: 1 * time.Millisecond,
RetryLimit: 1,
PingInterval: 100 * time.Second,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
client: client,
}
Expand Down Expand Up @@ -424,8 +426,9 @@ func TestAdapter_Run_ConnectionInitializationError(t *testing.T) {

adapter := &Adapter{
config: &Config{
RetryInterval: 1 * time.Millisecond,
RetryLimit: 1,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
client: client,
}
Expand Down Expand Up @@ -483,9 +486,10 @@ func TestAdapter_Run_ConnectionAbortionError(t *testing.T) {

adapter := &Adapter{
config: &Config{
PingInterval: 100 * time.Second,
RetryInterval: 1 * time.Millisecond,
RetryLimit: 1,
PingInterval: 100 * time.Second,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
client: client,
}
Expand Down Expand Up @@ -664,8 +668,9 @@ func TestAdapter_connect(t *testing.T) {

adapter := &Adapter{
config: &Config{
RetryInterval: 1 * time.Millisecond,
RetryLimit: 1,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
client: client,
}
Expand All @@ -690,8 +695,9 @@ func TestAdapter_connect_error(t *testing.T) {

adapter := &Adapter{
config: &Config{
RetryInterval: 1 * time.Millisecond,
RetryLimit: 1,
RetryPolicy: &retry.Policy{
Trial: 1,
},
},
client: client,
}
Expand Down
14 changes: 9 additions & 5 deletions slack/config.go
@@ -1,17 +1,19 @@
package slack

import "time"
import (
"github.com/oklahomer/go-sarah/retry"
"time"
)

// Config contains some configuration variables for slack Adapter.
type Config struct {
Token string `json:"token" yaml:"token"`
HelpCommand string `json:"help_command" yaml:"help_command"`
AbortCommand string `json:"abort_command" yaml:"abort_command"`
SendingQueueSize uint `json:"sending_queue_size" yaml:"sending_queue_size"`
RetryLimit uint `json:"retry_limit" yaml:"retry_limit"`
RequestTimeout time.Duration `json:"request_timeout" yaml:"request_timeout"`
RetryInterval time.Duration `json:"retry_interval" yaml:"retry_interval"`
PingInterval time.Duration `json:"ping_interval" yaml:"ping_interval"`
RetryPolicy *retry.Policy `json:"retry_policy" yaml:"retry_policy"`
}

// NewConfig returns initialized Config struct with default settings.
Expand All @@ -23,9 +25,11 @@ func NewConfig() *Config {
HelpCommand: ".help",
AbortCommand: ".abort",
SendingQueueSize: 100,
RetryLimit: 10,
RequestTimeout: 3 * time.Second,
RetryInterval: 500 * time.Millisecond,
PingInterval: 30 * time.Second,
RetryPolicy: &retry.Policy{
Trial: 10,
Interval: 500 * time.Millisecond,
},
}
}

0 comments on commit d707589

Please sign in to comment.