37 Star 403 Fork 75

GVPrancher/rancher

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
interval.go 1.54 KB
一键复制 编辑 原始数据 按行查看 历史
kinarashah 提交于 2019-02-07 16:02 . mcapp controller fixes
package multiclusterapp
import (
"context"
"github.com/rancher/rancher/pkg/namespace"
"github.com/rancher/rancher/pkg/ticker"
"github.com/rancher/types/apis/management.cattle.io/v3"
"github.com/sirupsen/logrus"
"sync"
"time"
)
type IntervalData struct {
interval int
cancelFunc context.CancelFunc
}
var mcAppTickerData map[string]*IntervalData
var mcAppDataLock = sync.Mutex{}
func storeContext(cctx context.Context, mcapp *v3.MultiClusterApp, mcApps v3.MultiClusterAppInterface) {
if mcapp.Spec.UpgradeStrategy.RollingUpdate == nil {
return
}
set := mcapp.Spec.UpgradeStrategy.RollingUpdate.Interval
if set == 0 {
return
}
defer mcAppDataLock.Unlock()
mcAppDataLock.Lock()
if data, ok := mcAppTickerData[mcapp.Name]; ok {
if data.interval == set {
return
}
data.interval = set
data.cancelFunc()
delete(mcAppTickerData, mcapp.Name)
}
ctx, cancel := context.WithCancel(cctx)
go startTicker(ctx, set, mcApps, mcapp.Name)
mcAppTickerData[mcapp.Name] = &IntervalData{
interval: set,
cancelFunc: cancel,
}
}
func deleteContext(mcappName string) {
mcAppDataLock.Lock()
if data, ok := mcAppTickerData[mcappName]; ok {
data.cancelFunc()
delete(mcAppTickerData, mcappName)
}
mcAppDataLock.Unlock()
}
func startTicker(ctx context.Context, set int, mcApps v3.MultiClusterAppInterface, name string) {
interval := time.Duration(set) * time.Second
for range ticker.Context(ctx, interval) {
logrus.Debugf("mcappTicker: interval %v enqueue %s", set, name)
mcApps.Controller().Enqueue(namespace.GlobalNamespace, name)
}
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/rancher/rancher.git
git@gitee.com:rancher/rancher.git
rancher
rancher
rancher
v2.2.0-rc6

搜索帮助