1
2
3
4
5 package main
6
7 import (
8 "os"
9 "runtime"
10 "runtime/pprof"
11 "sync"
12 "time"
13 )
14
15 func init() {
16 register("Kubernetes30872", Kubernetes30872)
17 }
18
19 type PopProcessFunc_kubernetes30872 func()
20
21 type ProcessFunc_kubernetes30872 func()
22
23 func Util_kubernetes30872(f func(), stopCh <-chan struct{}) {
24 JitterUntil_kubernetes30872(f, stopCh)
25 }
26
27 func JitterUntil_kubernetes30872(f func(), stopCh <-chan struct{}) {
28 for {
29 select {
30 case <-stopCh:
31 return
32 default:
33 }
34 func() {
35 f()
36 }()
37 }
38 }
39
40 type Queue_kubernetes30872 interface {
41 HasSynced()
42 Pop(PopProcessFunc_kubernetes30872)
43 }
44
45 type Config_kubernetes30872 struct {
46 Queue Queue_kubernetes30872
47 Process ProcessFunc_kubernetes30872
48 }
49
50 type Controller_kubernetes30872 struct {
51 config Config_kubernetes30872
52 }
53
54 func (c *Controller_kubernetes30872) Run(stopCh <-chan struct{}) {
55 Util_kubernetes30872(c.processLoop, stopCh)
56 }
57
58 func (c *Controller_kubernetes30872) HasSynced() {
59 c.config.Queue.HasSynced()
60 }
61
62 func (c *Controller_kubernetes30872) processLoop() {
63 c.config.Queue.Pop(PopProcessFunc_kubernetes30872(c.config.Process))
64 }
65
66 type ControllerInterface_kubernetes30872 interface {
67 Run(<-chan struct{})
68 HasSynced()
69 }
70
71 type ResourceEventHandler_kubernetes30872 interface {
72 OnAdd()
73 }
74
75 type ResourceEventHandlerFuncs_kubernetes30872 struct {
76 AddFunc func()
77 }
78
79 func (r ResourceEventHandlerFuncs_kubernetes30872) OnAdd() {
80 if r.AddFunc != nil {
81 r.AddFunc()
82 }
83 }
84
85 type informer_kubernetes30872 struct {
86 controller ControllerInterface_kubernetes30872
87
88 stopChan chan struct{}
89 }
90
91 type federatedInformerImpl_kubernetes30872 struct {
92 sync.Mutex
93 clusterInformer informer_kubernetes30872
94 }
95
96 func (f *federatedInformerImpl_kubernetes30872) ClustersSynced() {
97 f.Lock()
98 defer f.Unlock()
99 f.clusterInformer.controller.HasSynced()
100 }
101
102 func (f *federatedInformerImpl_kubernetes30872) addCluster() {
103 f.Lock()
104 defer f.Unlock()
105 }
106
107 func (f *federatedInformerImpl_kubernetes30872) Start() {
108 f.Lock()
109 defer f.Unlock()
110
111 f.clusterInformer.stopChan = make(chan struct{})
112 go f.clusterInformer.controller.Run(f.clusterInformer.stopChan)
113 runtime.Gosched()
114 }
115
116 func (f *federatedInformerImpl_kubernetes30872) Stop() {
117 f.Lock()
118 defer f.Unlock()
119 close(f.clusterInformer.stopChan)
120 }
121
122 type DelayingDeliverer_kubernetes30872 struct{}
123
124 func (d *DelayingDeliverer_kubernetes30872) StartWithHandler(handler func()) {
125 go func() {
126 handler()
127 }()
128 }
129
130 type FederationView_kubernetes30872 interface {
131 ClustersSynced()
132 }
133
134 type FederatedInformer_kubernetes30872 interface {
135 FederationView_kubernetes30872
136 Start()
137 Stop()
138 }
139
140 type NamespaceController_kubernetes30872 struct {
141 namespaceDeliverer *DelayingDeliverer_kubernetes30872
142 namespaceFederatedInformer FederatedInformer_kubernetes30872
143 }
144
145 func (nc *NamespaceController_kubernetes30872) isSynced() {
146 nc.namespaceFederatedInformer.ClustersSynced()
147 }
148
149 func (nc *NamespaceController_kubernetes30872) reconcileNamespace() {
150 nc.isSynced()
151 }
152
153 func (nc *NamespaceController_kubernetes30872) Run(stopChan <-chan struct{}) {
154 nc.namespaceFederatedInformer.Start()
155 go func() {
156 <-stopChan
157 nc.namespaceFederatedInformer.Stop()
158 }()
159 nc.namespaceDeliverer.StartWithHandler(func() {
160 nc.reconcileNamespace()
161 })
162 }
163
164 type DeltaFIFO_kubernetes30872 struct {
165 lock sync.RWMutex
166 }
167
168 func (f *DeltaFIFO_kubernetes30872) HasSynced() {
169 f.lock.Lock()
170 defer f.lock.Unlock()
171 }
172
173 func (f *DeltaFIFO_kubernetes30872) Pop(process PopProcessFunc_kubernetes30872) {
174 f.lock.Lock()
175 defer f.lock.Unlock()
176 process()
177 }
178
179 func NewFederatedInformer_kubernetes30872() FederatedInformer_kubernetes30872 {
180 federatedInformer := &federatedInformerImpl_kubernetes30872{}
181 federatedInformer.clusterInformer.controller = NewInformer_kubernetes30872(
182 ResourceEventHandlerFuncs_kubernetes30872{
183 AddFunc: func() {
184 federatedInformer.addCluster()
185 },
186 })
187 return federatedInformer
188 }
189
190 func NewInformer_kubernetes30872(h ResourceEventHandler_kubernetes30872) *Controller_kubernetes30872 {
191 fifo := &DeltaFIFO_kubernetes30872{}
192 cfg := &Config_kubernetes30872{
193 Queue: fifo,
194 Process: func() {
195 h.OnAdd()
196 },
197 }
198 return &Controller_kubernetes30872{config: *cfg}
199 }
200
201 func NewNamespaceController_kubernetes30872() *NamespaceController_kubernetes30872 {
202 nc := &NamespaceController_kubernetes30872{}
203 nc.namespaceDeliverer = &DelayingDeliverer_kubernetes30872{}
204 nc.namespaceFederatedInformer = NewFederatedInformer_kubernetes30872()
205 return nc
206 }
207
208 func Kubernetes30872() {
209 prof := pprof.Lookup("goroutineleak")
210 defer func() {
211 time.Sleep(100 * time.Millisecond)
212 prof.WriteTo(os.Stdout, 2)
213 }()
214
215 for i := 0; i < 100; i++ {
216 go func() {
217 namespaceController := NewNamespaceController_kubernetes30872()
218 stop := make(chan struct{})
219 namespaceController.Run(stop)
220 close(stop)
221 }()
222 }
223 }
224
View as plain text