/
changelog.go
43 lines (37 loc) · 1.16 KB
/
changelog.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
package changelog
import (
"github.com/uber/storagetapper/config"
"github.com/uber/storagetapper/log"
"github.com/uber/storagetapper/pipe"
"github.com/uber/storagetapper/pool"
"golang.org/x/net/context" //"context"
)
//Reader is a contract for changelog reader
type Reader interface {
//Worker is a main log reader routine
//returns false if no more log readers of this type are needed
Worker() bool
}
//ReaderConstructor initializes logger plugin
type ReaderConstructor func(ctx context.Context, cfg *config.AppConfig, bufPipe pipe.Pipe, t pool.Thread) (Reader, error)
//Plugins contains registered binlog reader plugins
var Plugins map[string]ReaderConstructor
func registerPlugin(name string, init ReaderConstructor) {
if Plugins == nil {
Plugins = make(map[string]ReaderConstructor)
}
Plugins[name] = init
}
//Worker iterates over available workers and try start them
func Worker(ctx context.Context, cfg *config.AppConfig, bufPipe pipe.Pipe, tp pool.Thread) bool {
for n, init := range Plugins {
reader, err := init(ctx, cfg, bufPipe, tp)
if err != nil {
log.Errorf("Init failed for: %v", n)
}
if reader.Worker() {
return true
}
}
return false
}