-
Notifications
You must be signed in to change notification settings - Fork 3
/
enqueueroptions.go
57 lines (52 loc) · 1.86 KB
/
enqueueroptions.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
57
package messagequeue
import (
"github.com/beaconsoftwarellc/gadget/v2/errors"
"github.com/beaconsoftwarellc/gadget/v2/log"
)
const (
minimumBufferSize = 2
maximumBufferSize = 1024
defaultBufferSize = 20
minimumFailedBufferSize = 1
maximumFailedBufferSize = maximumBufferSize
defaultFailedBufferSize = 15
)
// NewEnqueuerOptions with default values
func NewEnqueuerOptions() *EnqueuerOptions {
return &EnqueuerOptions{
ChunkerOptions: NewChunkerOptions(),
Logger: log.Global(),
BufferSize: defaultBufferSize,
FailedBufferSize: defaultFailedBufferSize,
}
}
type EnqueuerOptions struct {
*ChunkerOptions
// Logger for the enqueuer to use
Logger log.Logger
// BufferSize to use for forming batches, must be greater than BatchSize
BufferSize uint
// FailedBufferSize for messages that fail to enqueue. This should be at
// least equal to BatchSize to avoid blocking.
FailedBufferSize uint
// FailureHandler receives messages that failed to enqueue, optional.
FailureHandler HandleFailedEnqueue
}
// Validate that the values contained in this Options are complete and within the
// bounds necessary for operation.
func (eo *EnqueuerOptions) Validate() error {
// logger should not be nil
if eo.Logger == nil {
return errors.New("EnqueuerOptions.Logger cannot be nil")
}
// buffer size must be within sensible bounds
if eo.BufferSize < minimumBufferSize || eo.BufferSize > maximumBufferSize {
return errors.New("EnqueuerOptions.BufferSize(%d) was out of bounds [%d, %d]",
eo.BufferSize, minimumBufferSize, maximumBufferSize)
}
if eo.FailedBufferSize < minimumFailedBufferSize || eo.FailedBufferSize > maximumFailedBufferSize {
return errors.New("EnqueuerOptions.FailedBufferSize(%d) was out of bounds [%d, %d)",
eo.FailedBufferSize, minimumFailedBufferSize, maximumFailedBufferSize)
}
return eo.ChunkerOptions.Validate()
}