| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
|
|
| package main |
|
|
| import ( |
| "math/rand" |
| "os" |
| "runtime" |
| "runtime/pprof" |
| "sync" |
| "time" |
| ) |
|
|
| func init() { |
| register("Kubernetes62464", Kubernetes62464) |
| } |
|
|
| type State_kubernetes62464 interface { |
| GetCPUSetOrDefault() |
| GetCPUSet() bool |
| GetDefaultCPUSet() |
| SetDefaultCPUSet() |
| } |
|
|
| type stateMemory_kubernetes62464 struct { |
| sync.RWMutex |
| } |
|
|
| func (s *stateMemory_kubernetes62464) GetCPUSetOrDefault() { |
| s.RLock() |
| defer s.RUnlock() |
| if ok := s.GetCPUSet(); ok { |
| return |
| } |
| s.GetDefaultCPUSet() |
| } |
|
|
| func (s *stateMemory_kubernetes62464) GetCPUSet() bool { |
| runtime.Gosched() |
| s.RLock() |
| defer s.RUnlock() |
|
|
| if rand.Intn(10) > 5 { |
| return true |
| } |
| return false |
| } |
|
|
| func (s *stateMemory_kubernetes62464) GetDefaultCPUSet() { |
| s.RLock() |
| defer s.RUnlock() |
| } |
|
|
| func (s *stateMemory_kubernetes62464) SetDefaultCPUSet() { |
| s.Lock() |
| runtime.Gosched() |
| defer s.Unlock() |
| } |
|
|
| type staticPolicy_kubernetes62464 struct{} |
|
|
| func (p *staticPolicy_kubernetes62464) RemoveContainer(s State_kubernetes62464) { |
| s.GetDefaultCPUSet() |
| s.SetDefaultCPUSet() |
| } |
|
|
| type manager_kubernetes62464 struct { |
| state *stateMemory_kubernetes62464 |
| } |
|
|
| func (m *manager_kubernetes62464) reconcileState() { |
| m.state.GetCPUSetOrDefault() |
| } |
|
|
| func NewPolicyAndManager_kubernetes62464() (*staticPolicy_kubernetes62464, *manager_kubernetes62464) { |
| s := &stateMemory_kubernetes62464{} |
| m := &manager_kubernetes62464{s} |
| p := &staticPolicy_kubernetes62464{} |
| return p, m |
| } |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| func Kubernetes62464() { |
| prof := pprof.Lookup("goroutineleak") |
| defer func() { |
| time.Sleep(100 * time.Millisecond) |
| prof.WriteTo(os.Stdout, 2) |
| }() |
|
|
| for i := 0; i < 1000; i++ { |
| go func() { |
| p, m := NewPolicyAndManager_kubernetes62464() |
| go m.reconcileState() |
| go p.RemoveContainer(m.state) |
| }() |
| } |
| } |
|
|