blob: 00cdcf2b6786925ddd11b2ef83cd2b9e1f987af5 [file] [log] [blame]
// Copyright 2025 The Go Authors. All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.
package main
import (
"os"
"runtime"
"runtime/pprof"
"sync"
"time"
)
func init() {
register("Kubernetes30872", Kubernetes30872)
}
type PopProcessFunc_kubernetes30872 func()
type ProcessFunc_kubernetes30872 func()
func Util_kubernetes30872(f func(), stopCh <-chan struct{}) {
JitterUntil_kubernetes30872(f, stopCh)
}
func JitterUntil_kubernetes30872(f func(), stopCh <-chan struct{}) {
for {
select {
case <-stopCh:
return
default:
}
func() {
f()
}()
}
}
type Queue_kubernetes30872 interface {
HasSynced()
Pop(PopProcessFunc_kubernetes30872)
}
type Config_kubernetes30872 struct {
Queue Queue_kubernetes30872
Process ProcessFunc_kubernetes30872
}
type Controller_kubernetes30872 struct {
config Config_kubernetes30872
}
func (c *Controller_kubernetes30872) Run(stopCh <-chan struct{}) {
Util_kubernetes30872(c.processLoop, stopCh)
}
func (c *Controller_kubernetes30872) HasSynced() {
c.config.Queue.HasSynced()
}
func (c *Controller_kubernetes30872) processLoop() {
c.config.Queue.Pop(PopProcessFunc_kubernetes30872(c.config.Process))
}
type ControllerInterface_kubernetes30872 interface {
Run(<-chan struct{})
HasSynced()
}
type ResourceEventHandler_kubernetes30872 interface {
OnAdd()
}
type ResourceEventHandlerFuncs_kubernetes30872 struct {
AddFunc func()
}
func (r ResourceEventHandlerFuncs_kubernetes30872) OnAdd() {
if r.AddFunc != nil {
r.AddFunc()
}
}
type informer_kubernetes30872 struct {
controller ControllerInterface_kubernetes30872
stopChan chan struct{}
}
type federatedInformerImpl_kubernetes30872 struct {
sync.Mutex
clusterInformer informer_kubernetes30872
}
func (f *federatedInformerImpl_kubernetes30872) ClustersSynced() {
f.Lock() // L1
defer f.Unlock()
f.clusterInformer.controller.HasSynced()
}
func (f *federatedInformerImpl_kubernetes30872) addCluster() {
f.Lock() // L1
defer f.Unlock()
}
func (f *federatedInformerImpl_kubernetes30872) Start() {
f.Lock() // L1
defer f.Unlock()
f.clusterInformer.stopChan = make(chan struct{})
go f.clusterInformer.controller.Run(f.clusterInformer.stopChan) // G2
runtime.Gosched()
}
func (f *federatedInformerImpl_kubernetes30872) Stop() {
f.Lock() // L1
defer f.Unlock()
close(f.clusterInformer.stopChan)
}
type DelayingDeliverer_kubernetes30872 struct{}
func (d *DelayingDeliverer_kubernetes30872) StartWithHandler(handler func()) {
go func() { // G4
handler()
}()
}
type FederationView_kubernetes30872 interface {
ClustersSynced()
}
type FederatedInformer_kubernetes30872 interface {
FederationView_kubernetes30872
Start()
Stop()
}
type NamespaceController_kubernetes30872 struct {
namespaceDeliverer *DelayingDeliverer_kubernetes30872
namespaceFederatedInformer FederatedInformer_kubernetes30872
}
func (nc *NamespaceController_kubernetes30872) isSynced() {
nc.namespaceFederatedInformer.ClustersSynced()
}
func (nc *NamespaceController_kubernetes30872) reconcileNamespace() {
nc.isSynced()
}
func (nc *NamespaceController_kubernetes30872) Run(stopChan <-chan struct{}) {
nc.namespaceFederatedInformer.Start()
go func() { // G3
<-stopChan
nc.namespaceFederatedInformer.Stop()
}()
nc.namespaceDeliverer.StartWithHandler(func() {
nc.reconcileNamespace()
})
}
type DeltaFIFO_kubernetes30872 struct {
lock sync.RWMutex
}
func (f *DeltaFIFO_kubernetes30872) HasSynced() {
f.lock.Lock() // L2
defer f.lock.Unlock()
}
func (f *DeltaFIFO_kubernetes30872) Pop(process PopProcessFunc_kubernetes30872) {
f.lock.Lock() // L2
defer f.lock.Unlock()
process()
}
func NewFederatedInformer_kubernetes30872() FederatedInformer_kubernetes30872 {
federatedInformer := &federatedInformerImpl_kubernetes30872{}
federatedInformer.clusterInformer.controller = NewInformer_kubernetes30872(
ResourceEventHandlerFuncs_kubernetes30872{
AddFunc: func() {
federatedInformer.addCluster()
},
})
return federatedInformer
}
func NewInformer_kubernetes30872(h ResourceEventHandler_kubernetes30872) *Controller_kubernetes30872 {
fifo := &DeltaFIFO_kubernetes30872{}
cfg := &Config_kubernetes30872{
Queue: fifo,
Process: func() {
h.OnAdd()
},
}
return &Controller_kubernetes30872{config: *cfg}
}
func NewNamespaceController_kubernetes30872() *NamespaceController_kubernetes30872 {
nc := &NamespaceController_kubernetes30872{}
nc.namespaceDeliverer = &DelayingDeliverer_kubernetes30872{}
nc.namespaceFederatedInformer = NewFederatedInformer_kubernetes30872()
return nc
}
func Kubernetes30872() {
prof := pprof.Lookup("goroutineleak")
defer func() {
time.Sleep(100 * time.Millisecond)
prof.WriteTo(os.Stdout, 2)
}()
for i := 0; i < 100; i++ {
go func() { // G1
namespaceController := NewNamespaceController_kubernetes30872()
stop := make(chan struct{})
namespaceController.Run(stop)
close(stop)
}()
}
}