1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-01-26 03:52:12 +02:00

sync/pipeline: using timer replace ticker (#477)

This commit is contained in:
Astone 2020-03-29 11:47:55 +08:00 committed by GitHub
parent 04948fd5cc
commit f2c6751ed4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -169,17 +169,18 @@ func (p *Pipeline) Close() (err error) {
func (p *Pipeline) mergeproc(mirror bool, index int, ch <-chan *message) { func (p *Pipeline) mergeproc(mirror bool, index int, ch <-chan *message) {
defer p.wait.Done() defer p.wait.Done()
var ( var (
m *message m *message
vals = make(map[string][]interface{}, p.config.MaxSize) vals = make(map[string][]interface{}, p.config.MaxSize)
closed bool closed bool
count int count int
inteval = p.config.Interval inteval = p.config.Interval
oldTicker = true timeout = false
) )
if index > 0 { if index > 0 {
inteval = xtime.Duration(int64(index) * (int64(p.config.Interval) / int64(p.config.Worker))) inteval = xtime.Duration(int64(index) * (int64(p.config.Interval) / int64(p.config.Worker)))
} }
ticker := time.NewTicker(time.Duration(inteval)) timer := time.NewTimer(time.Duration(inteval))
defer timer.Stop()
for { for {
select { select {
case m = <-ch: case m = <-ch:
@ -193,12 +194,8 @@ func (p *Pipeline) mergeproc(mirror bool, index int, ch <-chan *message) {
break break
} }
continue continue
case <-ticker.C: case <-timer.C:
if oldTicker { timeout = true
ticker.Stop()
ticker = time.NewTicker(time.Duration(p.config.Interval))
oldTicker = false
}
} }
name := p.name name := p.name
process := count process := count
@ -215,8 +212,12 @@ func (p *Pipeline) mergeproc(mirror bool, index int, ch <-chan *message) {
_metricChanLen.Set(float64(len(ch)), name, strconv.Itoa(index)) _metricChanLen.Set(float64(len(ch)), name, strconv.Itoa(index))
_metricCount.Add(float64(process), name, strconv.Itoa(index)) _metricCount.Add(float64(process), name, strconv.Itoa(index))
if closed { if closed {
ticker.Stop()
return return
} }
if !timer.Stop() && !timeout {
<-timer.C
timeout = false
}
timer.Reset(time.Duration(p.config.Interval))
} }
} }