From bc0e9ab4bcb01d85fe36172bbc5d95ac527a542b Mon Sep 17 00:00:00 2001 From: Oleksii Kliukin Date: Wed, 7 Jun 2017 18:58:52 +0200 Subject: [PATCH] Add error checks per report from errcheck-ng --- pkg/cluster/cluster.go | 8 ++++++-- pkg/cluster/filesystems.go | 5 +---- pkg/cluster/pg.go | 11 +++++++++-- pkg/cluster/volumes.go | 6 +++++- pkg/controller/controller.go | 12 ++++++++---- pkg/controller/postgresql.go | 8 ++++++-- pkg/util/k8sutil/k8sutil.go | 4 +++- pkg/util/teams/teams.go | 9 +++++++-- pkg/util/teams/teams_test.go | 4 +++- 9 files changed, 48 insertions(+), 19 deletions(-) diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 1ad176071..83f068ecd 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -532,7 +532,9 @@ func (c *Cluster) Delete() error { // ReceivePodEvent is called back by the controller in order to add the cluster's pod event to the queue. func (c *Cluster) ReceivePodEvent(event spec.PodEvent) { - c.podEventsQueue.Add(event) + if err := c.podEventsQueue.Add(event); err != nil { + c.logger.Errorf("error when receiving pod events: %v", err) + } } func (c *Cluster) processPodEvent(obj interface{}) error { @@ -562,7 +564,9 @@ func (c *Cluster) processPodEventQueue(stopCh <-chan struct{}) { case <-stopCh: return default: - c.podEventsQueue.Pop(cache.PopProcessFunc(c.processPodEvent)) + if _, err := c.podEventsQueue.Pop(cache.PopProcessFunc(c.processPodEvent)); err != nil { + c.logger.Errorf("error when processing pod event queeue %v", err) + } } } } diff --git a/pkg/cluster/filesystems.go b/pkg/cluster/filesystems.go index fe636ed95..e68e5614c 100644 --- a/pkg/cluster/filesystems.go +++ b/pkg/cluster/filesystems.go @@ -37,10 +37,7 @@ func (c *Cluster) resizePostgresFilesystem(podName *spec.NamespacedName, resizer return c.ExecCommand(podName, "bash", "-c", cmd) }) - if err != nil { - return err - } - return nil + return err } return fmt.Errorf("could not resize filesystem: no compatible resizers for the filesystem of type %s", fsType) } diff --git a/pkg/cluster/pg.go b/pkg/cluster/pg.go index 206ea00e0..fd677006c 100644 --- a/pkg/cluster/pg.go +++ b/pkg/cluster/pg.go @@ -48,7 +48,9 @@ func (c *Cluster) initDbConn() (err error) { } err = conn.Ping() if err != nil { - conn.Close() + if err2 := conn.Close(); err2 != nil { + c.logger.Error("error when closing PostgreSQL connection after another error: %v", err2) + } return err } @@ -64,7 +66,12 @@ func (c *Cluster) readPgUsersFromDatabase(userNames []string) (users spec.PgUser if rows, err = c.pgDb.Query(getUserSQL, pq.Array(userNames)); err != nil { return nil, fmt.Errorf("error when querying users: %v", err) } - defer rows.Close() + defer func() { + if err2 := rows.Close(); err2 != nil { + err = fmt.Errorf("error when closing query cursor: %v", err2) + } + + }() for rows.Next() { var ( rolname, rolpassword string diff --git a/pkg/cluster/volumes.go b/pkg/cluster/volumes.go index ff5f00200..47b3effaa 100644 --- a/pkg/cluster/volumes.go +++ b/pkg/cluster/volumes.go @@ -108,7 +108,11 @@ func (c *Cluster) resizeVolumes(newVolume spec.Volume, resizers []volumes.Volume if err != nil { return fmt.Errorf("could not connect to the volume provider: %v", err) } - defer resizer.DisconnectFromProvider() + defer func() { + err2 := resizer.DisconnectFromProvider(); if err2 != nil { + c.logger.Errorf("%v", err2) + } + }() } awsVolumeId, err := resizer.GetProviderVolumeID(pv) if err != nil { diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index b4801d28c..8a3c3f110 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -96,11 +96,13 @@ func (c *Controller) initController() { c.opConfig.ResyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - c.postgresqlInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + if err := c.postgresqlInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: c.postgresqlAdd, UpdateFunc: c.postgresqlUpdate, DeleteFunc: c.postgresqlDelete, - }) + }); err != nil { + c.logger.Fatalf("could not add event handlers: %v", err) + } // Pods podLw := &cache.ListWatch{ @@ -114,11 +116,13 @@ func (c *Controller) initController() { c.opConfig.ResyncPeriodPod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}) - c.podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ + if err := c.podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: c.podAdd, UpdateFunc: c.podUpdate, DeleteFunc: c.podDelete, - }) + }); err != nil { + c.logger.Fatalf("could not add event handlers: %v", err) + } c.clusterEventQueues = make([]*cache.FIFO, c.opConfig.Workers) for i := range c.clusterEventQueues { diff --git a/pkg/controller/postgresql.go b/pkg/controller/postgresql.go index d8e0e9892..c202c9590 100644 --- a/pkg/controller/postgresql.go +++ b/pkg/controller/postgresql.go @@ -183,7 +183,9 @@ func (c *Controller) processEvent(obj interface{}) error { func (c *Controller) processClusterEventsQueue(idx int) { for { - c.clusterEventQueues[idx].Pop(cache.PopProcessFunc(c.processEvent)) + if _, err := c.clusterEventQueues[idx].Pop(cache.PopProcessFunc(c.processEvent)); err != nil { + c.logger.Errorf("error when processing cluster events queue: %v", err) + } } } @@ -224,7 +226,9 @@ func (c *Controller) queueClusterEvent(old, new *spec.Postgresql, eventType spec } //TODO: if we delete cluster, discard all the previous events for the cluster - c.clusterEventQueues[workerID].Add(clusterEvent) + if err := c.clusterEventQueues[workerID].Add(clusterEvent); err != nil { + c.logger.WithField("worker", workerID).Errorf("error when queueing cluster event: %v", clusterEvent) + } c.logger.WithField("worker", workerID).Infof("%s of the '%s' cluster has been queued", eventType, clusterName) } diff --git a/pkg/util/k8sutil/k8sutil.go b/pkg/util/k8sutil/k8sutil.go index a2105e8d8..f0ea50dd4 100644 --- a/pkg/util/k8sutil/k8sutil.go +++ b/pkg/util/k8sutil/k8sutil.go @@ -56,7 +56,9 @@ func KubernetesRestClient(c *rest.Config) (*rest.RESTClient, error) { ) return nil }) - schemeBuilder.AddToScheme(api.Scheme) + if err := schemeBuilder.AddToScheme(api.Scheme); err != nil { + return nil, fmt.Errorf("could not apply functions to register PostgreSQL TPR type: %v", err) + } return rest.RESTClientFor(c) } diff --git a/pkg/util/teams/teams.go b/pkg/util/teams/teams.go index 09154d594..b00e46271 100644 --- a/pkg/util/teams/teams.go +++ b/pkg/util/teams/teams.go @@ -58,7 +58,7 @@ func NewTeamsAPI(url string, log *logrus.Logger) *API { } // TeamInfo returns information about a given team using its ID and a token to authenticate to the API service. -func (t *API) TeamInfo(teamID, token string) (*team, error) { +func (t *API) TeamInfo(teamID, token string) (tm *team, er error) { url := fmt.Sprintf("%s/teams/%s", t.url, teamID) t.logger.Debugf("Request url: %s", url) req, err := http.NewRequest("GET", url, nil) @@ -71,7 +71,12 @@ func (t *API) TeamInfo(teamID, token string) (*team, error) { if err != nil { return nil, err } - defer resp.Body.Close() + defer func() { + if err:= resp.Body.Close(); err != nil { + er = fmt.Errorf("error when closing response; %v", err) + tm = nil + } + }() if resp.StatusCode != 200 { var raw map[string]json.RawMessage d := json.NewDecoder(resp.Body) diff --git a/pkg/util/teams/teams_test.go b/pkg/util/teams/teams_test.go index f9e8fb940..eac29a5d3 100644 --- a/pkg/util/teams/teams_test.go +++ b/pkg/util/teams/teams_test.go @@ -148,7 +148,9 @@ func TestInfo(t *testing.T) { t.Errorf("Authorization token is wrong or not provided") } w.WriteHeader(tc.inCode) - fmt.Fprint(w, tc.in) + if _, err := fmt.Fprint(w, tc.in); err != nil { + t.Errorf("Error writing teams api response %v", err) + } })) defer ts.Close() api := NewTeamsAPI(ts.URL, logger)