forked from asynkron/protoactor-go
/
grain.go
56 lines (45 loc) · 1.05 KB
/
grain.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package cluster
import "time"
type Grain struct {
id string
}
func (g *Grain) ID() string {
return g.id
}
func (g *Grain) Init(id string) {
g.id = id
}
type GrainCallOptions struct {
RetryCount int
Timeout time.Duration
RetryAction func(n int)
}
var defaultGrainCallOptions *GrainCallOptions
func DefaultGrainCallOptions() *GrainCallOptions {
if defaultGrainCallOptions == nil {
defaultGrainCallOptions = NewGrainCallOptions()
}
return defaultGrainCallOptions
}
func NewGrainCallOptions() *GrainCallOptions {
return &GrainCallOptions{
RetryCount: 10,
Timeout: cfg.TimeoutTime,
RetryAction: func(i int) {
i++
time.Sleep(time.Duration(i * i * 50))
},
}
}
func (config *GrainCallOptions) WithTimeout(timeout time.Duration) *GrainCallOptions {
config.Timeout = timeout
return config
}
func (config *GrainCallOptions) WithRetry(count int) *GrainCallOptions {
config.RetryCount = count
return config
}
func (config *GrainCallOptions) WithRetryAction(act func(i int)) *GrainCallOptions {
config.RetryAction = act
return config
}