Skip to content

Commit 0fe3131

Browse files
committed
Update logging in our deployment controllers
Signed-off-by: Michail Kargakis <[email protected]>
1 parent 585b160 commit 0fe3131

File tree

5 files changed

+49
-46
lines changed

5 files changed

+49
-46
lines changed

pkg/deploy/controller/deployment/controller.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ const maxRetryCount = 15
3939
// fatalError is an error which can't be retried.
4040
type fatalError string
4141

42-
func (e fatalError) Error() string { return "fatal error handling deployment: " + string(e) }
42+
func (e fatalError) Error() string { return "fatal error handling rollout: " + string(e) }
4343

4444
// actionableError is an error on which users can act.
4545
type actionableError string
@@ -131,17 +131,17 @@ func (c *DeploymentController) handle(deployment *kapi.ReplicationController, wi
131131
// Generate a deployer pod spec.
132132
deployerPod, err := c.makeDeployerPod(deployment)
133133
if err != nil {
134-
return fatalError(fmt.Sprintf("couldn't make deployer pod for %s: %v", deployutil.LabelForDeployment(deployment), err))
134+
return fatalError(fmt.Sprintf("couldn't make deployer pod for %q: %v", deployutil.LabelForDeployment(deployment), err))
135135
}
136136
// Create the deployer pod.
137137
deploymentPod, err := c.pn.Pods(deployment.Namespace).Create(deployerPod)
138138
// Retry on error.
139139
if err != nil {
140-
return actionableError(fmt.Sprintf("couldn't create deployer pod for %s: %v", deployutil.LabelForDeployment(deployment), err))
140+
return actionableError(fmt.Sprintf("couldn't create deployer pod for %q: %v", deployutil.LabelForDeployment(deployment), err))
141141
}
142142
updatedAnnotations[deployapi.DeploymentPodAnnotation] = deploymentPod.Name
143143
nextStatus = deployapi.DeploymentStatusPending
144-
glog.V(4).Infof("Created deployer pod %s for deployment %s", deploymentPod.Name, deployutil.LabelForDeployment(deployment))
144+
glog.V(4).Infof("Created deployer pod %q for %q", deploymentPod.Name, deployutil.LabelForDeployment(deployment))
145145

146146
// Most likely dead code since we never get an error different from 404 back from the cache.
147147
case deployerErr != nil:
@@ -164,12 +164,10 @@ func (c *DeploymentController) handle(deployment *kapi.ReplicationController, wi
164164
nextStatus = deployapi.DeploymentStatusFailed
165165
updatedAnnotations[deployapi.DeploymentStatusReasonAnnotation] = deployapi.DeploymentFailedUnrelatedDeploymentExists
166166
c.emitDeploymentEvent(deployment, kapi.EventTypeWarning, "FailedCreate", fmt.Sprintf("Error creating deployer pod since another pod with the same name (%q) exists", deployer.Name))
167-
glog.V(2).Infof("Couldn't create deployer pod for %s since an unrelated pod with the same name (%q) exists", deployutil.LabelForDeployment(deployment), deployer.Name)
168167
} else {
169168
// Update to pending or to the appropriate status relative to the existing validated deployer pod.
170169
updatedAnnotations[deployapi.DeploymentPodAnnotation] = deployer.Name
171170
nextStatus = nextStatusComp(nextStatus, deployapi.DeploymentStatusPending)
172-
glog.V(4).Infof("Detected existing deployer pod %s for deployment %s", deployer.Name, deployutil.LabelForDeployment(deployment))
173171
}
174172
}
175173

@@ -187,13 +185,14 @@ func (c *DeploymentController) handle(deployment *kapi.ReplicationController, wi
187185
}
188186
updatedAnnotations[deployapi.DeploymentStatusReasonAnnotation] = deployapi.DeploymentFailedDeployerPodNoLongerExists
189187
c.emitDeploymentEvent(deployment, kapi.EventTypeWarning, "Failed", fmt.Sprintf("Deployer pod %q has gone missing", deployerPodName))
190-
deployerErr = fmt.Errorf("Failing deployment %q because its deployer pod %q disappeared", deployutil.LabelForDeployment(deployment), deployerPodName)
188+
deployerErr = fmt.Errorf("Failing rollout for %q because its deployer pod %q disappeared", deployutil.LabelForDeployment(deployment), deployerPodName)
191189
utilruntime.HandleError(deployerErr)
192190
}
193191

192+
// Most likely dead code since we never get an error different from 404 back from the cache.
194193
case deployerErr != nil:
195194
// We'll try again later on resync. Continue to process cancellations.
196-
deployerErr = fmt.Errorf("Error getting deployer pod %q for deployment %q: %v", deployerPodName, deployutil.LabelForDeployment(deployment), deployerErr)
195+
deployerErr = fmt.Errorf("Error getting deployer pod %q for %q: %v", deployerPodName, deployutil.LabelForDeployment(deployment), deployerErr)
197196
utilruntime.HandleError(deployerErr)
198197

199198
default: /* err == nil */
@@ -242,12 +241,12 @@ func (c *DeploymentController) handle(deployment *kapi.ReplicationController, wi
242241
}
243242

244243
if _, err := c.rn.ReplicationControllers(deployment.Namespace).Update(deployment); err != nil {
245-
return fmt.Errorf("couldn't update deployment %s to status %s: %v", deployutil.LabelForDeployment(deployment), nextStatus, err)
244+
return fmt.Errorf("couldn't update rollout status for %q to %s: %v", deployutil.LabelForDeployment(deployment), nextStatus, err)
246245
}
247-
glog.V(4).Infof("Updated deployment %s status from %s to %s (scale: %d)", deployutil.LabelForDeployment(deployment), currentStatus, nextStatus, deployment.Spec.Replicas)
246+
glog.V(4).Infof("Updated rollout status for %q from %s to %s (scale: %d)", deployutil.LabelForDeployment(deployment), currentStatus, nextStatus, deployment.Spec.Replicas)
248247

249248
if deployutil.IsDeploymentCancelled(deployment) && deployutil.IsFailedDeployment(deployment) {
250-
c.emitDeploymentEvent(deployment, kapi.EventTypeNormal, "DeploymentCancelled", fmt.Sprintf("Deployment %q cancelled", deployutil.LabelForDeployment(deployment)))
249+
c.emitDeploymentEvent(deployment, kapi.EventTypeNormal, "RolloutCancelled", fmt.Sprintf("Rollout for %q cancelled", deployutil.LabelForDeployment(deployment)))
251250
}
252251
}
253252
return nil
@@ -425,13 +424,13 @@ func (c *DeploymentController) cleanupDeployerPods(deployment *kapi.ReplicationC
425424
if err := c.pn.Pods(deployerPod.Namespace).Delete(deployerPod.Name, &kapi.DeleteOptions{}); err != nil && !kerrors.IsNotFound(err) {
426425
// if the pod deletion failed, then log the error and continue
427426
// we will try to delete any remaining deployer pods and return an error later
428-
utilruntime.HandleError(fmt.Errorf("couldn't delete completed deployer pod %q for deployment %q: %v", deployerPod.Name, deployutil.LabelForDeployment(deployment), err))
427+
utilruntime.HandleError(fmt.Errorf("couldn't delete completed deployer pod %q for %q: %v", deployerPod.Name, deployutil.LabelForDeployment(deployment), err))
429428
cleanedAll = false
430429
}
431430
}
432431

433432
if !cleanedAll {
434-
return actionableError(fmt.Sprintf("couldn't clean up all deployer pods for %s", deployment.Name))
433+
return actionableError(fmt.Sprintf("couldn't clean up all deployer pods for %q", deployutil.LabelForDeployment(deployment)))
435434
}
436435
return nil
437436
}

pkg/deploy/controller/deployment/factory.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package deployment
22

33
import (
4+
"fmt"
45
"time"
56

67
"github.com/golang/glog"
@@ -29,7 +30,7 @@ const (
2930
func NewDeploymentController(rcInformer, podInformer cache.SharedIndexInformer, kc kclientset.Interface, sa, image string, env []kapi.EnvVar, codec runtime.Codec) *DeploymentController {
3031
eventBroadcaster := record.NewBroadcaster()
3132
eventBroadcaster.StartRecordingToSink(&kcoreclient.EventSinkImpl{Interface: kc.Core().Events("")})
32-
recorder := eventBroadcaster.NewRecorder(kapi.EventSource{Component: "deployments-controller"})
33+
recorder := eventBroadcaster.NewRecorder(kapi.EventSource{Component: "deployer-controller"})
3334

3435
c := &DeploymentController{
3536
rn: kc.Core(),
@@ -79,15 +80,15 @@ func (c *DeploymentController) Run(workers int, stopCh <-chan struct{}) {
7980
go wait.Until(c.worker, time.Second, stopCh)
8081
}
8182
<-stopCh
82-
glog.Infof("Shutting down deployment controller")
83+
glog.Infof("Shutting down deployer controller")
8384
c.queue.ShutDown()
8485
}
8586

8687
func (c *DeploymentController) waitForSyncedStores(ready chan<- struct{}, stopCh <-chan struct{}) {
8788
defer utilruntime.HandleCrash()
8889

8990
for !c.rcStoreSynced() || !c.podStoreSynced() {
90-
glog.V(4).Infof("Waiting for the rc and pod caches to sync before starting the deployment controller workers")
91+
glog.V(4).Infof("Waiting for the rc and pod caches to sync before starting the deployer controller workers")
9192
select {
9293
case <-time.After(storeSyncedPollPeriod):
9394
case <-stopCh:
@@ -141,12 +142,12 @@ func (c *DeploymentController) deletePod(obj interface{}) {
141142
if !ok {
142143
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
143144
if !ok {
144-
glog.Errorf("Couldn't get object from tombstone: %+v", obj)
145+
utilruntime.HandleError(fmt.Errorf("Couldn't get object from tombstone: %+v", obj))
145146
return
146147
}
147148
pod, ok = tombstone.Obj.(*kapi.Pod)
148149
if !ok {
149-
glog.Errorf("Tombstone contained object that is not a pod: %+v", obj)
150+
utilruntime.HandleError(fmt.Errorf("Tombstone contained object that is not a pod: %+v", obj))
150151
return
151152
}
152153
}
@@ -159,14 +160,19 @@ func (c *DeploymentController) deletePod(obj interface{}) {
159160
func (c *DeploymentController) enqueueReplicationController(rc *kapi.ReplicationController) {
160161
key, err := kcontroller.KeyFunc(rc)
161162
if err != nil {
162-
glog.Errorf("Couldn't get key for object %#v: %v", rc, err)
163+
utilruntime.HandleError(fmt.Errorf("Couldn't get key for object %#v: %v", rc, err))
163164
return
164165
}
165166
c.queue.Add(key)
166167
}
167168

168169
func (c *DeploymentController) rcForDeployerPod(pod *kapi.Pod) (*kapi.ReplicationController, error) {
169-
key := pod.Namespace + "/" + deployutil.DeploymentNameFor(pod)
170+
rcName := deployutil.DeploymentNameFor(pod)
171+
if len(rcName) == 0 {
172+
// Not a deployer pod, so don't bother with it.
173+
return nil, nil
174+
}
175+
key := pod.Namespace + "/" + rcName
170176
return c.getByKey(key)
171177
}
172178

@@ -187,7 +193,7 @@ func (c *DeploymentController) work() bool {
187193

188194
rc, err := c.getByKey(key.(string))
189195
if err != nil {
190-
glog.Error(err.Error())
196+
utilruntime.HandleError(err)
191197
}
192198

193199
if rc == nil {
@@ -207,12 +213,11 @@ func (c *DeploymentController) work() bool {
207213
func (c *DeploymentController) getByKey(key string) (*kapi.ReplicationController, error) {
208214
obj, exists, err := c.rcStore.Indexer.GetByKey(key)
209215
if err != nil {
210-
glog.Infof("Unable to retrieve replication controller %q from store: %v", key, err)
211-
c.queue.Add(key)
216+
c.queue.AddRateLimited(key)
212217
return nil, err
213218
}
214219
if !exists {
215-
glog.Infof("Replication controller %q has been deleted", key)
220+
glog.V(4).Infof("Replication controller %q has been deleted", key)
216221
return nil, nil
217222
}
218223

pkg/deploy/controller/deploymentconfig/controller.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ func (c *DeploymentConfigController) reconcileDeployments(existingDeployments []
246246
}
247247
copied, err = deployutil.DeploymentDeepCopy(rc)
248248
if err != nil {
249-
glog.V(2).Infof("Deep copy of deployment %q failed: %v", rc.Name, err)
250249
return err
251250
}
252251
copied.Spec.Replicas = newReplicaCount
@@ -279,7 +278,6 @@ func (c *DeploymentConfigController) reconcileDeployments(existingDeployments []
279278
func (c *DeploymentConfigController) updateStatus(config *deployapi.DeploymentConfig, deployments []*kapi.ReplicationController, additional ...deployapi.DeploymentCondition) error {
280279
newStatus, err := c.calculateStatus(*config, deployments, additional...)
281280
if err != nil {
282-
glog.V(2).Infof("Cannot calculate the status for %q: %v", deployutil.LabelForDeploymentConfig(config), err)
283281
return err
284282
}
285283

@@ -297,10 +295,14 @@ func (c *DeploymentConfigController) updateStatus(config *deployapi.DeploymentCo
297295
copied.Status = newStatus
298296
// TODO: Retry update conficts
299297
if _, err := c.dn.DeploymentConfigs(copied.Namespace).UpdateStatus(copied); err != nil {
300-
glog.V(2).Infof("Cannot update the status for %q: %v", deployutil.LabelForDeploymentConfig(copied), err)
301298
return err
302299
}
303-
glog.V(4).Infof("Updated the status for %q (observed generation: %d)", deployutil.LabelForDeploymentConfig(copied), copied.Status.ObservedGeneration)
300+
glog.V(4).Infof(fmt.Sprintf("Updated status for DeploymentConfig: %s, ", deployutil.LabelForDeploymentConfig(config)) +
301+
fmt.Sprintf("replicas %d->%d (need %d), ", config.Status.Replicas, newStatus.Replicas, config.Spec.Replicas) +
302+
fmt.Sprintf("readyReplicas %d->%d, ", config.Status.ReadyReplicas, newStatus.ReadyReplicas) +
303+
fmt.Sprintf("availableReplicas %d->%d, ", config.Status.AvailableReplicas, newStatus.AvailableReplicas) +
304+
fmt.Sprintf("unavailableReplicas %d->%d, ", config.Status.UnavailableReplicas, newStatus.UnavailableReplicas) +
305+
fmt.Sprintf("sequence No: %v->%v", config.Status.ObservedGeneration, newStatus.ObservedGeneration))
304306
return nil
305307
}
306308

@@ -430,7 +432,6 @@ func (c *DeploymentConfigController) cleanupOldDeployments(existingDeployments [
430432

431433
err := c.rn.ReplicationControllers(deployment.Namespace).Delete(deployment.Name, nil)
432434
if err != nil && !kapierrors.IsNotFound(err) {
433-
glog.V(2).Infof("Failed deleting old Replication Controller %q for Deployment Config %q: %v", deployment.Name, deploymentConfig.Name, err)
434435
deletionErrors = append(deletionErrors, err)
435436
}
436437
}

pkg/deploy/controller/deploymentconfig/factory.go

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package deploymentconfig
22

33
import (
4+
"fmt"
45
"time"
56

67
"github.com/golang/glog"
@@ -125,12 +126,12 @@ func (c *DeploymentConfigController) deleteDeploymentConfig(obj interface{}) {
125126
if !ok {
126127
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
127128
if !ok {
128-
glog.Errorf("Couldn't get object from tombstone %+v", obj)
129+
utilruntime.HandleError(fmt.Errorf("Couldn't get object from tombstone %+v", obj))
129130
return
130131
}
131132
dc, ok = tombstone.Obj.(*deployapi.DeploymentConfig)
132133
if !ok {
133-
glog.Errorf("Tombstone contained object that is not a deployment config: %+v", obj)
134+
utilruntime.HandleError(fmt.Errorf("Tombstone contained object that is not a deployment config: %+v", obj))
134135
return
135136
}
136137
}
@@ -148,7 +149,6 @@ func (c *DeploymentConfigController) updateReplicationController(old, cur interf
148149
return
149150
}
150151

151-
glog.V(4).Infof("Replication controller %q updated.", curRC.Name)
152152
if dc, err := c.dcStore.GetConfigForController(curRC); err == nil && dc != nil {
153153
c.enqueueDeploymentConfig(dc)
154154
}
@@ -166,16 +166,15 @@ func (c *DeploymentConfigController) deleteReplicationController(obj interface{}
166166
if !ok {
167167
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
168168
if !ok {
169-
glog.Errorf("Couldn't get object from tombstone %#v", obj)
169+
utilruntime.HandleError(fmt.Errorf("Couldn't get object from tombstone %#v", obj))
170170
return
171171
}
172172
rc, ok = tombstone.Obj.(*kapi.ReplicationController)
173173
if !ok {
174-
glog.Errorf("Tombstone contained object that is not a replication controller %#v", obj)
174+
utilruntime.HandleError(fmt.Errorf("Tombstone contained object that is not a replication controller %#v", obj))
175175
return
176176
}
177177
}
178-
glog.V(4).Infof("Replication controller %q deleted.", rc.Name)
179178
if dc, err := c.dcStore.GetConfigForController(rc); err == nil && dc != nil {
180179
c.enqueueDeploymentConfig(dc)
181180
}
@@ -198,12 +197,12 @@ func (c *DeploymentConfigController) deletePod(obj interface{}) {
198197
if !ok {
199198
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
200199
if !ok {
201-
glog.Errorf("Couldn't get object from tombstone %+v", obj)
200+
utilruntime.HandleError(fmt.Errorf("Couldn't get object from tombstone %+v", obj))
202201
return
203202
}
204203
pod, ok = tombstone.Obj.(*kapi.Pod)
205204
if !ok {
206-
glog.Errorf("Tombstone contained object that is not a pod: %+v", obj)
205+
utilruntime.HandleError(fmt.Errorf("Tombstone contained object that is not a pod: %+v", obj))
207206
return
208207
}
209208
}
@@ -215,7 +214,7 @@ func (c *DeploymentConfigController) deletePod(obj interface{}) {
215214
func (c *DeploymentConfigController) enqueueDeploymentConfig(dc *deployapi.DeploymentConfig) {
216215
key, err := kcontroller.KeyFunc(dc)
217216
if err != nil {
218-
glog.Errorf("Couldn't get key for object %#v: %v", dc, err)
217+
utilruntime.HandleError(fmt.Errorf("Couldn't get key for object %#v: %v", dc, err))
219218
return
220219
}
221220
c.queue.Add(key)
@@ -238,7 +237,7 @@ func (c *DeploymentConfigController) work() bool {
238237

239238
dc, err := c.getByKey(key.(string))
240239
if err != nil {
241-
glog.Error(err.Error())
240+
utilruntime.HandleError(err)
242241
}
243242

244243
if dc == nil {
@@ -254,7 +253,6 @@ func (c *DeploymentConfigController) work() bool {
254253
func (c *DeploymentConfigController) getByKey(key string) (*deployapi.DeploymentConfig, error) {
255254
obj, exists, err := c.dcStore.Indexer.GetByKey(key)
256255
if err != nil {
257-
glog.V(2).Infof("Unable to retrieve deployment config %q from store: %v", key, err)
258256
c.queue.AddRateLimited(key)
259257
return nil, err
260258
}

pkg/deploy/controller/generictrigger/factory.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package generictrigger
22

33
import (
4+
"fmt"
45
"reflect"
56
"time"
67

@@ -135,7 +136,7 @@ func (c *DeploymentTriggerController) updateDeploymentConfig(old, cur interface{
135136
if err != nil {
136137
// If we get an error here it may be due to the rc cache lagging behind. In such a case
137138
// just defer to the api server (instantiate REST) where we will retry this.
138-
glog.V(2).Infof("Cannot get latest rc for dc %s:%d (%v) - will defer to instantiate", deployutil.LabelForDeploymentConfig(newDc), newDc.Status.LatestVersion, err)
139+
glog.V(4).Infof("Cannot get latest rc for dc %s:%d (%v) - will defer to instantiate", deployutil.LabelForDeploymentConfig(newDc), newDc.Status.LatestVersion, err)
139140
} else {
140141
initial, err := deployutil.DecodeDeploymentConfig(latestRc, c.codec)
141142
if err != nil {
@@ -190,7 +191,7 @@ func (c *DeploymentTriggerController) updateImageStream(old, cur interface{}) {
190191
func (c *DeploymentTriggerController) enqueueDeploymentConfig(dc *deployapi.DeploymentConfig) {
191192
key, err := kcontroller.KeyFunc(dc)
192193
if err != nil {
193-
glog.Errorf("Couldn't get key for object %+v: %v", dc, err)
194+
utilruntime.HandleError(fmt.Errorf("Couldn't get key for object %+v: %v", dc, err))
194195
return
195196
}
196197
c.queue.Add(key)
@@ -213,7 +214,7 @@ func (c *DeploymentTriggerController) work() bool {
213214

214215
dc, err := c.getByKey(key.(string))
215216
if err != nil {
216-
glog.Error(err.Error())
217+
utilruntime.HandleError(err)
217218
}
218219

219220
if dc == nil {
@@ -229,12 +230,11 @@ func (c *DeploymentTriggerController) work() bool {
229230
func (c *DeploymentTriggerController) getByKey(key string) (*deployapi.DeploymentConfig, error) {
230231
obj, exists, err := c.dcLister.Indexer.GetByKey(key)
231232
if err != nil {
232-
glog.Infof("Unable to retrieve deployment config %q from store: %v", key, err)
233-
c.queue.Add(key)
233+
c.queue.AddRateLimited(key)
234234
return nil, err
235235
}
236236
if !exists {
237-
glog.Infof("Deployment config %q has been deleted", key)
237+
glog.V(4).Infof("Deployment config %q has been deleted", key)
238238
return nil, nil
239239
}
240240

0 commit comments

Comments
 (0)