mirror of
https://gitee.com/milvus-io/milvus.git
synced 2024-12-03 12:29:36 +08:00
143502e708
See also #35183 Signed-off-by: Congqi Xia <congqi.xia@zilliz.com>
52 lines
1007 B
Go
52 lines
1007 B
Go
package util
|
|
|
|
import "go.uber.org/atomic"
|
|
|
|
// Tickler counts every time when called inc(),
|
|
type Tickler struct {
|
|
count *atomic.Int32
|
|
total *atomic.Int32
|
|
closedSig *atomic.Bool
|
|
|
|
progressSig chan struct{}
|
|
}
|
|
|
|
func (t *Tickler) Inc() {
|
|
t.count.Inc()
|
|
t.progressSig <- struct{}{}
|
|
}
|
|
|
|
func (t *Tickler) SetTotal(total int32) {
|
|
t.total.Store(total)
|
|
}
|
|
|
|
// progress returns the count over total if total is set
|
|
// else just return the count number.
|
|
func (t *Tickler) Progress() int32 {
|
|
if t.total.Load() == 0 {
|
|
return t.count.Load()
|
|
}
|
|
return t.count.Load() * 100 / t.total.Load()
|
|
}
|
|
|
|
func (t *Tickler) Close() {
|
|
t.closedSig.CompareAndSwap(false, true)
|
|
}
|
|
|
|
func (t *Tickler) IsClosed() bool {
|
|
return t.closedSig.Load()
|
|
}
|
|
|
|
func (t *Tickler) GetProgressSig() chan struct{} {
|
|
return t.progressSig
|
|
}
|
|
|
|
func NewTickler() *Tickler {
|
|
return &Tickler{
|
|
count: atomic.NewInt32(0),
|
|
total: atomic.NewInt32(0),
|
|
closedSig: atomic.NewBool(false),
|
|
progressSig: make(chan struct{}, 200),
|
|
}
|
|
}
|