You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by da...@apache.org on 2018/07/12 20:44:42 UTC

[trafficcontrol] branch master updated: Fix TO database leak

This is an automated email from the ASF dual-hosted git repository.

dangogh pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new 57201d4  Fix TO database leak
57201d4 is described below

commit 57201d46998d6f2c43807c8de1c1f541cdc94686
Author: Robert Butts <ro...@apache.org>
AuthorDate: Thu Jul 12 09:18:08 2018 -0600

    Fix TO database leak
    
    Fixes a missing rows.Close(), by changing a Query() whose results
    were unused to an Exec().
    
    Also fixes a db Scan() error being ignored.
---
 .../traffic_ops_golang/deliveryservice/servers/servers.go      | 10 ++++++----
 .../deliveryservicesregexes/deliveryservicesregexes.go         |  3 +++
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go b/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go
index d1e3018..0c4cbec 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go
@@ -521,10 +521,13 @@ func GetCreateHandler(db *sqlx.DB) http.HandlerFunc {
 		// the same transaction
 		for serverIds.Next() {
 			var serverId int
-			err := serverIds.Scan(&serverId)
+			if err := serverIds.Scan(&serverId); err != nil {
+				log.Errorln("scanning for create delivery service servers: " + err.Error())
+				handleErrs(http.StatusInternalServerError, errors.New("scanning for create delivery service servers: "+err.Error()))
+				return
+			}
 			dtos := map[string]interface{}{"id": dsId, "server": serverId}
-			resultRows, err := tx.NamedQuery(insertIdsQuery(), dtos)
-			if err != nil {
+			if _, err := tx.NamedExec(insertIdsQuery(), dtos); err != nil {
 				if pqErr, ok := err.(*pq.Error); ok {
 					err, eType := dbhelpers.ParsePQUniqueConstraintError(pqErr)
 					log.Errorln("could not begin transaction: %v", err)
@@ -538,7 +541,6 @@ func GetCreateHandler(db *sqlx.DB) http.HandlerFunc {
 				log.Errorf("received non pq error: %++v from create execution", err)
 				return
 			}
-			resultRows.Next()
 		}
 
 		err = tx.Commit()
diff --git a/traffic_ops/traffic_ops_golang/deliveryservicesregexes/deliveryservicesregexes.go b/traffic_ops/traffic_ops_golang/deliveryservicesregexes/deliveryservicesregexes.go
index 7016943..5b8caa0 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservicesregexes/deliveryservicesregexes.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservicesregexes/deliveryservicesregexes.go
@@ -58,6 +58,7 @@ JOIN type as rt ON r.type = rt.id
 			handleErrs(http.StatusInternalServerError, errors.New("querying: "+err.Error()))
 			return
 		}
+		defer rows.Close()
 		dsRegexes := map[tc.DeliveryServiceName][]tc.DeliveryServiceRegex{}
 		for rows.Next() {
 			// if (!$tenant_utils->is_ds_resource_accessible($tenants_data, $ds->tenant_id)) {
@@ -141,6 +142,7 @@ ORDER BY dsr.set_number ASC
 			handleErrs(http.StatusInternalServerError, errors.New("querying: "+err.Error()))
 			return
 		}
+		defer rows.Close()
 		regexes := []tc.DeliveryServiceIDRegex{}
 		for rows.Next() {
 			dsTenantID := 0
@@ -233,6 +235,7 @@ ORDER BY dsr.set_number ASC
 			handleErrs(http.StatusInternalServerError, errors.New("querying: "+err.Error()))
 			return
 		}
+		defer rows.Close()
 		regexes := []tc.DeliveryServiceIDRegex{}
 		for rows.Next() {
 			dsTenantID := 0