64 lines
1.0 KiB
Go
64 lines
1.0 KiB
Go
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)
|
|
}
|
|
}
|