代码拉取完成,页面将自动刷新
package multiclusterapp
import (
"context"
"sync"
"time"
"github.com/rancher/rancher/pkg/namespace"
"github.com/rancher/rancher/pkg/ticker"
v3 "github.com/rancher/types/apis/management.cattle.io/v3"
"github.com/sirupsen/logrus"
)
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)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。