| // 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) |
| }() |
| } |
| } |