@@ -35,15 +35,13 @@ import (
35
35
36
36
const (
37
37
operatorAnnotation = "auto.request.operator/optimize"
38
- // cacheKeyFunc defines the key function required in TTLStore.
39
- cacheTTL = 60 * time .Second
40
38
)
41
39
42
40
func cacheKeyFunc (obj interface {}) (string , error ) {
43
41
return obj .(PodRequests ).Name , nil
44
42
}
45
43
46
- var cacheStore = cache .NewTTLStore (cacheKeyFunc , cacheTTL )
44
+ var cacheStore = cache .NewStore (cacheKeyFunc )
47
45
48
46
// Reconcile handles a reconciliation request for a Pod.
49
47
// If the Pod has the podHasAnnotation annotation, then Reconcile
@@ -75,7 +73,6 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
75
73
}
76
74
77
75
if (! r .EnableAnnotation ) || (r .EnableAnnotation && annotation ) {
78
- log .Info ("Checking Pod: " + pod .Name + " in namespace " + pod .Namespace )
79
76
80
77
data , err := r .ClientSet .RESTClient ().Get ().AbsPath (fmt .Sprintf ("apis/metrics.k8s.io/v1beta1/namespaces/%v/pods/%v" , pod .Namespace , pod .Name )).DoRaw (ctx )
81
78
@@ -94,14 +91,18 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
94
91
SumPodRequest .Sample = 0
95
92
SumPodRequest .TimeSinceFirstSample = 0
96
93
SumPodRequest .Timestamp = time .Now ()
94
+ log .Info (fmt .Sprint ("Adding cache sample " , SumPodRequest .Sample ))
97
95
addToCache (cacheStore , SumPodRequest )
98
96
} else {
99
97
if err != nil {
100
98
log .Error (err , err .Error ())
101
99
} else {
102
100
SumPodRequest .Sample = LatestPodRequest .Sample + 1
103
- SumPodRequest .TimeSinceFirstSample = int (time .Since (LatestPodRequest .Timestamp ).Seconds ())
101
+ log .Info (fmt .Sprint (time .Now (), LatestPodRequest .Timestamp ))
102
+ SumPodRequest .TimeSinceFirstSample = time .Since (LatestPodRequest .Timestamp ).Seconds ()
104
103
SumPodRequest .Timestamp = time .Now ()
104
+ log .Info (fmt .Sprint ("Updating cache sample " , SumPodRequest .Sample ))
105
+
105
106
for _ , sumC := range SumPodRequest .ContainerRequests {
106
107
for _ , latestC := range LatestPodRequest .ContainerRequests {
107
108
if latestC .Name == sumC .Name {
@@ -111,6 +112,7 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
111
112
}
112
113
}
113
114
}
115
+
114
116
err := deleteFromCache (cacheStore , LatestPodRequest )
115
117
if err != nil {
116
118
log .Error (err , err .Error ())
@@ -121,11 +123,12 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
121
123
}
122
124
}
123
125
}
124
-
126
+ log .Info (fmt .Sprint (SumPodRequest ))
127
+ log .Info (fmt .Sprint (SumPodRequest .TimeSinceFirstSample , ">" , r .MinSecondsBetweenPodRestart ))
125
128
if (SumPodRequest .Sample >= r .SampleSize ) && (SumPodRequest .TimeSinceFirstSample >= r .MinSecondsBetweenPodRestart ) {
129
+ log .Info ("Sample Size and Minimum Time have been reached" )
126
130
PodChange := false
127
131
Requests := []NewContainerRequests {}
128
- log .Info (fmt .Sprint (SumPodRequest ))
129
132
for _ , c := range SumPodRequest .ContainerRequests {
130
133
AverageUsageCPU := c .CPU / int64 (SumPodRequest .Sample )
131
134
AverageUsageMemory := c .Memory / int64 (SumPodRequest .Sample )
@@ -135,18 +138,22 @@ func (r *PodReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.R
135
138
for i , v := range pod .Spec .Containers {
136
139
if v .Name == c .Name {
137
140
log .Info (c .Name )
138
- log .Info (fmt .Sprint ("Comparing CPU: " , fmt .Sprintf ("%dm" , AverageUsageCPU ), " < " , fmt .Sprintf ("%dm" , currentC .CPU )))
139
- log .Info (fmt .Sprint ("Comparing Memory: " , fmt .Sprintf ("%dMi" , AverageUsageMemory ), " < " , fmt .Sprintf ("%dMi" , currentC .Memory )))
141
+ log .Info (fmt .Sprint ("Comparing CPU: " , fmt .Sprintf ("%dm" , AverageUsageCPU ), " <> " , fmt .Sprintf ("%dm" , currentC .CPU )))
142
+ log .Info (fmt .Sprint ("Comparing Memory: " , fmt .Sprintf ("%dMi" , AverageUsageMemory ), " <> " , fmt .Sprintf ("%dMi" , currentC .Memory )))
140
143
// if AverageUsageCPU < currentC.CPU {
141
144
if AverageUsageCPU > 0 {
142
- pod .Spec .Containers [i ].Resources .Requests [v1 .ResourceCPU ] = resource .MustParse (fmt .Sprintf ("%dm" , AverageUsageCPU ))
143
- PodChange = true
145
+ if pod .Spec .Containers [i ].Resources .Requests != nil {
146
+ pod .Spec .Containers [i ].Resources .Requests [v1 .ResourceCPU ] = resource .MustParse (fmt .Sprintf ("%dm" , AverageUsageCPU ))
147
+ PodChange = true
148
+ }
144
149
}
145
150
// }
146
151
// if AverageUsageMemory < currentC.Memory {
147
152
if AverageUsageMemory > 0 {
148
- pod .Spec .Containers [i ].Resources .Requests [v1 .ResourceMemory ] = resource .MustParse (fmt .Sprintf ("%dMi" , AverageUsageMemory ))
149
- PodChange = true
153
+ if pod .Spec .Containers [i ].Resources .Requests != nil {
154
+ pod .Spec .Containers [i ].Resources .Requests [v1 .ResourceMemory ] = resource .MustParse (fmt .Sprintf ("%dMi" , AverageUsageMemory ))
155
+ PodChange = true
156
+ }
150
157
}
151
158
// }
152
159
Requests = append (Requests , NewContainerRequests {Name : c .Name , Requests : pod .Spec .Containers [i ].Resources })
0 commit comments