package operator import ( "sync/atomic" "time" "mbase/app/maindb" "mbase/pkg/logger" ) type OperatorConfig struct { Database *maindb.Database } type Operator struct { log *logger.Logger db *maindb.Database dumpingSem atomic.Bool restoringSem atomic.Bool } func NewOperator(conf *OperatorConfig) (*Operator, error) { var err error oper := &Operator{ db: conf.Database, } oper.log = logger.NewLogger("Operator") return oper, err } func (oper *Operator) DumpingSemUp() { oper.dumpingSem.Store(true) } func (oper *Operator) DumpingSemDown() { oper.dumpingSem.Store(false) } func (oper *Operator) WaitDumping() { for { if !oper.dumpingSem.Load() { return } time.Sleep(1 * time.Millisecond) } } func (oper *Operator) RestoringSemUp() { oper.restoringSem.Store(true) } func (oper *Operator) RestoringSemDown() { oper.restoringSem.Store(false) } func (oper *Operator) WaitRestoring() { for { if !oper.restoringSem.Load() { return } time.Sleep(1 * time.Millisecond) } }