cronman: add Start2() for working with electObj

This commit is contained in:
Yousong Zhou
2020-03-12 18:53:46 +08:00
parent 1d8fa1a1f2
commit 0f7ff65a46
+28
View File
@@ -27,6 +27,7 @@ import (
"yunion.io/x/onecloud/pkg/appctx"
"yunion.io/x/onecloud/pkg/appsrv"
"yunion.io/x/onecloud/pkg/cloudcommon/elect"
"yunion.io/x/onecloud/pkg/mcclient"
"yunion.io/x/onecloud/pkg/mcclient/auth"
)
@@ -297,6 +298,33 @@ func (self *SCronJobManager) next(now time.Time) {
}
}
func (self *SCronJobManager) Start2(ctx context.Context, electObj *elect.Elect) {
ctx, self.stopFunc = context.WithCancel(ctx)
if electObj == nil {
self.start(ctx)
return
}
go func() {
ch := make(chan elect.ElectEvent)
electObj.Subscribe(ch)
for {
select {
case ev := <-ch:
log.Infof("cronman: elect event %s: cronman", ev)
switch ev {
case elect.ElectEventWin:
self.start(ctx)
case elect.ElectEventLost:
self.Stop()
}
case <-ctx.Done():
return
}
}
}()
}
func (self *SCronJobManager) Start() {
ctx := context.Background()
ctx, self.stopFunc = context.WithCancel(ctx)