@@ -29,6 +29,7 @@ import (
2929 api "github.com/arangodb/kube-arangodb/pkg/apis/deployment/v1alpha"
3030 "github.com/arangodb/kube-arangodb/pkg/util"
3131 "github.com/arangodb/kube-arangodb/pkg/util/k8sutil"
32+ "github.com/arangodb/kube-arangodb/pkg/util/profiler"
3233 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3334)
3435
@@ -39,7 +40,7 @@ import (
3940// - any of the underlying resources has changed
4041// - once in a while
4142// Returns the delay until this function should be called again.
42- func (d * Deployment ) inspectDeployment (lastInterval time. Duration ) time. Duration {
43+ func (d * Deployment ) inspectDeployment (lastInterval util. Interval ) util. Interval {
4344 log := d .deps .Log
4445
4546 nextInterval := lastInterval
@@ -92,13 +93,13 @@ func (d *Deployment) inspectDeployment(lastInterval time.Duration) time.Duration
9293 hasError = true
9394 d .CreateEvent (k8sutil .NewErrorEvent ("Pod inspection failed" , err , d .apiObject ))
9495 } else {
95- nextInterval = util . MinDuration ( nextInterval , x )
96+ nextInterval = nextInterval . ReduceTo ( x )
9697 }
9798 if x , err := d .resources .InspectPVCs (ctx ); err != nil {
9899 hasError = true
99100 d .CreateEvent (k8sutil .NewErrorEvent ("PVC inspection failed" , err , d .apiObject ))
100101 } else {
101- nextInterval = util . MinDuration ( nextInterval , x )
102+ nextInterval = nextInterval . ReduceTo ( x )
102103 }
103104
104105 // Check members for resilience
@@ -108,43 +109,67 @@ func (d *Deployment) inspectDeployment(lastInterval time.Duration) time.Duration
108109 }
109110
110111 // Create scale/update plan
111- if err := d .reconciler .CreatePlan (); err != nil {
112- hasError = true
113- d .CreateEvent (k8sutil .NewErrorEvent ("Plan creation failed" , err , d .apiObject ))
114- }
115-
116- // Execute current step of scale/update plan
117- retrySoon , err := d .reconciler .ExecutePlan (ctx )
118- if err != nil {
119- hasError = true
120- d .CreateEvent (k8sutil .NewErrorEvent ("Plan execution failed" , err , d .apiObject ))
121- }
122- if retrySoon {
123- nextInterval = minInspectionInterval
112+ {
113+ ps := profiler .Start ()
114+ if err := d .reconciler .CreatePlan (); err != nil {
115+ hasError = true
116+ d .CreateEvent (k8sutil .NewErrorEvent ("Plan creation failed" , err , d .apiObject ))
117+ }
118+
119+ // Execute current step of scale/update plan
120+ retrySoon , err := d .reconciler .ExecutePlan (ctx )
121+ if err != nil {
122+ hasError = true
123+ d .CreateEvent (k8sutil .NewErrorEvent ("Plan execution failed" , err , d .apiObject ))
124+ }
125+ if retrySoon {
126+ nextInterval = minInspectionInterval
127+ }
128+ ps .Done (log , "plan" )
124129 }
125130
126131 // Ensure all resources are created
127- if err := d .resources .EnsureSecrets (); err != nil {
128- hasError = true
129- d .CreateEvent (k8sutil .NewErrorEvent ("Secret creation failed" , err , d .apiObject ))
130- }
131- if err := d .resources .EnsureServices (); err != nil {
132- hasError = true
133- d .CreateEvent (k8sutil .NewErrorEvent ("Service creation failed" , err , d .apiObject ))
134- }
135- if err := d .resources .EnsurePVCs (); err != nil {
136- hasError = true
137- d .CreateEvent (k8sutil .NewErrorEvent ("PVC creation failed" , err , d .apiObject ))
138- }
139- if err := d .resources .EnsurePods (); err != nil {
140- hasError = true
141- d .CreateEvent (k8sutil .NewErrorEvent ("Pod creation failed" , err , d .apiObject ))
132+ {
133+ ps := profiler .Start ()
134+ {
135+ ps := profiler .Start ()
136+ if err := d .resources .EnsureSecrets (); err != nil {
137+ hasError = true
138+ d .CreateEvent (k8sutil .NewErrorEvent ("Secret creation failed" , err , d .apiObject ))
139+ }
140+ ps .LogIf (log , time .Millisecond * 10 , "EnsureSecrets" )
141+ }
142+ {
143+ ps := profiler .Start ()
144+ if err := d .resources .EnsureServices (); err != nil {
145+ hasError = true
146+ d .CreateEvent (k8sutil .NewErrorEvent ("Service creation failed" , err , d .apiObject ))
147+ }
148+ ps .LogIf (log , time .Millisecond * 10 , "EnsureServices" )
149+ }
150+ if err := d .resources .EnsurePVCs (); err != nil {
151+ hasError = true
152+ d .CreateEvent (k8sutil .NewErrorEvent ("PVC creation failed" , err , d .apiObject ))
153+ }
154+ {
155+ ps := profiler .Start ()
156+ if err := d .resources .EnsurePods (); err != nil {
157+ hasError = true
158+ d .CreateEvent (k8sutil .NewErrorEvent ("Pod creation failed" , err , d .apiObject ))
159+ }
160+ ps .LogIf (log , time .Millisecond * 10 , "EnsurePods" )
161+ }
162+ ps .Done (log , "ensure resources" )
142163 }
143164
144165 // Create access packages
145- if err := d .createAccessPackages (); err != nil {
146- hasError = true
147- d .CreateEvent (k8sutil .NewErrorEvent ("AccessPackage creation failed" , err , d .apiObject ))
166+ {
167+ ps := profiler .Start ()
168+ if err := d .createAccessPackages (); err != nil {
169+ hasError = true
170+ d .CreateEvent (k8sutil .NewErrorEvent ("AccessPackage creation failed" , err , d .apiObject ))
171+ }
172+ ps .Done (log , "createAccessPackages" )
148173 }
149174
150175 // Inspect deployment for obsolete members
@@ -154,9 +179,11 @@ func (d *Deployment) inspectDeployment(lastInterval time.Duration) time.Duration
154179 }
155180
156181 // At the end of the inspect, we cleanup terminated pods.
157- if err := d .resources .CleanupTerminatedPods (); err != nil {
182+ if x , err := d .resources .CleanupTerminatedPods (); err != nil {
158183 hasError = true
159184 d .CreateEvent (k8sutil .NewErrorEvent ("Pod cleanup failed" , err , d .apiObject ))
185+ } else {
186+ nextInterval = nextInterval .ReduceTo (x )
160187 }
161188 }
162189
@@ -169,10 +196,7 @@ func (d *Deployment) inspectDeployment(lastInterval time.Duration) time.Duration
169196 } else {
170197 d .recentInspectionErrors = 0
171198 }
172- if nextInterval > maxInspectionInterval {
173- nextInterval = maxInspectionInterval
174- }
175- return nextInterval
199+ return nextInterval .ReduceTo (maxInspectionInterval )
176200}
177201
178202// triggerInspection ensures that an inspection is run soon.
0 commit comments