You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by de...@apache.org on 2018/02/28 16:57:41 UTC

[incubator-trafficcontrol] 07/07: pull data from db after assign/status change; fix delete message issue

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

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

commit ce2e824ab17e47d988f5bcae693b9a1fe03526d6
Author: Dan Kirkwood <da...@apache.org>
AuthorDate: Tue Feb 27 15:26:22 2018 -0700

    pull data from db after assign/status change; fix delete message issue
---
 .../traffic_ops_golang/api/shared_handlers.go      |  2 +
 .../deliveryservice/request/requests.go            | 48 ++++++++++++++--------
 .../deliveryservice/request/requests_test.go       |  4 +-
 3 files changed, 36 insertions(+), 18 deletions(-)

diff --git a/traffic_ops/traffic_ops_golang/api/shared_handlers.go b/traffic_ops/traffic_ops_golang/api/shared_handlers.go
index 903fa9f..f1edb0d 100644
--- a/traffic_ops/traffic_ops_golang/api/shared_handlers.go
+++ b/traffic_ops/traffic_ops_golang/api/shared_handlers.go
@@ -287,10 +287,12 @@ func DeleteHandler(typeRef Deleter, db *sqlx.DB) http.HandlerFunc {
 		log.Debugf("calling delete on object: %++v", d) //should have id set now
 		err, errType := d.Delete(db, *user)
 		if err != nil {
+			log.Errorf("error deleting: %++v", err)
 			tc.HandleErrorsWithType([]error{err}, errType, handleErrs)
 			return
 		}
 		//audit here
+		log.Debugf("changelog for delete on object")
 		CreateChangeLog(ApiChange, Deleted, d, *user, db)
 		//
 		resp := struct {
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
index 0081e80..9b9fc8b 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests.go
@@ -49,7 +49,7 @@ func GetRefType() *TODeliveryServiceRequest {
 //Implementation of the Identifier, Validator interface functions
 
 // GetID is part of the tc.Identifier interface
-func (req *TODeliveryServiceRequest) GetID() (int, bool) {
+func (req TODeliveryServiceRequest) GetID() (int, bool) {
 	if req.ID == nil {
 		return 0, false
 	}
@@ -57,15 +57,12 @@ func (req *TODeliveryServiceRequest) GetID() (int, bool) {
 }
 
 // GetAuditName is part of the tc.Identifier interface
-func (req *TODeliveryServiceRequest) GetAuditName() string {
-	if req.ID == nil {
-		return "0"
-	}
-	return strconv.Itoa(*req.ID)
+func (req TODeliveryServiceRequest) GetAuditName() string {
+	return req.getXMLID()
 }
 
 // GetType is part of the tc.Identifier interface
-func (req *TODeliveryServiceRequest) GetType() string {
+func (req TODeliveryServiceRequest) GetType() string {
 	return "deliveryservice_request"
 }
 
@@ -160,7 +157,7 @@ LEFT OUTER JOIN tm_user e ON r.last_edited_by_id = e.id
 }
 
 // IsTenantAuthorized implements the Tenantable interface to ensure the user is authorized on the deliveryservice tenant
-func (req *TODeliveryServiceRequest) IsTenantAuthorized(user auth.CurrentUser, db *sqlx.DB) (bool, error) {
+func (req TODeliveryServiceRequest) IsTenantAuthorized(user auth.CurrentUser, db *sqlx.DB) (bool, error) {
 	ds := req.DeliveryService
 	if ds == nil {
 		// No deliveryservice applied yet -- wide open
@@ -375,6 +372,7 @@ func (req *TODeliveryServiceRequest) Create(db *sqlx.DB, user auth.CurrentUser)
 // Delete removes the request from the db
 func (req *TODeliveryServiceRequest) Delete(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiErrorType) {
 	var st tc.RequestStatus
+	log.Debugln("DELETING REQUEST WITH ID ", strconv.Itoa(*req.ID))
 	if req.ID == nil {
 		return errors.New("cannot delete deliveryservice_request -- ID is nil"), tc.SystemError
 	}
@@ -404,21 +402,26 @@ func (req *TODeliveryServiceRequest) Delete(db *sqlx.DB, user auth.CurrentUser)
 		log.Error.Println("could not begin transaction: ", err.Error())
 		return tc.DBError, tc.SystemError
 	}
-	log.Debugf("about to run exec query: %s with ds request: %++v", deleteRequestQuery(), req)
-	result, err := tx.NamedExec(deleteRequestQuery(), req)
+	query := `DELETE FROM deliveryservice_request WHERE id=` + strconv.Itoa(*req.ID)
+	log.Debugf("about to run exec query: %s", query)
+
+	result, err := tx.Exec(query)
 	if err != nil {
 		log.Errorln("received error from delete execution: ", err.Error())
 		return tc.DBError, tc.SystemError
 	}
 	rowsAffected, err := result.RowsAffected()
 	if err != nil {
+		log.Errorln("error getting rows affected: ", err.Error())
 		return tc.DBError, tc.SystemError
 	}
 	if rowsAffected < 1 {
+		log.Errorln("no request with that id found")
 		return errors.New("no request with that id found"), tc.DataMissingError
 	}
 	if rowsAffected > 1 {
-		return fmt.Errorf("this create affected too many rows: %d", rowsAffected), tc.SystemError
+		log.Errorln("the delete affected too many rows")
+		return fmt.Errorf("this delete affected too many rows: %d", rowsAffected), tc.SystemError
 	}
 	err = tx.Commit()
 	if err != nil {
@@ -430,10 +433,10 @@ func (req *TODeliveryServiceRequest) Delete(db *sqlx.DB, user auth.CurrentUser)
 	return nil, tc.NoError
 }
 
-func (req *TODeliveryServiceRequest) getXMLID() string {
+func (req TODeliveryServiceRequest) getXMLID() string {
 	if req.DeliveryService == nil || req.DeliveryService.XMLID == nil {
 		id, _ := req.GetID()
-		strconv.Itoa(id)
+		return strconv.Itoa(id)
 	}
 	return *req.DeliveryService.XMLID
 }
@@ -446,7 +449,6 @@ func (req TODeliveryServiceRequest) ChangeLogMessage(action string) (string, err
 	}
 	// use ID in case don't have access to XMLID (e.g. on DELETE)
 	message := action + ` ` + req.GetType() + ` of type '` + changeType + `' for deliveryservice '` + req.getXMLID() + `'`
-
 	return message, nil
 }
 
@@ -580,11 +582,18 @@ func (req *deliveryServiceRequestAssignment) Update(db *sqlx.DB, user auth.Curre
 		return tc.DBError, tc.SystemError
 	}
 
+	// update req with current info
+	err = db.QueryRowx(selectDeliveryServiceRequestsQuery() + ` WHERE r.id=` + strconv.Itoa(*req.ID)).StructScan(req)
+	if err != nil {
+		log.Errorf("Error querying DeliveryServiceRequests: %v", err)
+		return err, tc.SystemError
+	}
+
 	rollbackTransaction = false
 	return nil, tc.NoError
 }
 
-func (req *deliveryServiceRequestAssignment) Validate(db *sqlx.DB) []error {
+func (req deliveryServiceRequestAssignment) Validate(db *sqlx.DB) []error {
 	return nil
 }
 
@@ -676,12 +685,19 @@ func (req *deliveryServiceRequestStatus) Update(db *sqlx.DB, user auth.CurrentUs
 		return tc.DBError, tc.SystemError
 	}
 
+	// update req with current info
+	err = db.QueryRowx(selectDeliveryServiceRequestsQuery() + ` WHERE r.id=` + strconv.Itoa(*req.ID)).StructScan(req)
+	if err != nil {
+		log.Errorf("Error querying DeliveryServiceRequests: %v", err)
+		return err, tc.SystemError
+	}
+
 	rollbackTransaction = false
 	return nil, tc.NoError
 }
 
 // Validate is not needed when only Status is updated
-func (req *deliveryServiceRequestStatus) Validate(db *sqlx.DB) []error {
+func (req deliveryServiceRequestStatus) Validate(db *sqlx.DB) []error {
 	return nil
 }
 
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
index e038f69..5aec066 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/request/requests_test.go
@@ -89,8 +89,8 @@ func TestGetDeliveryServiceRequest(t *testing.T) {
 		t.Errorf("expected ID to be %d,  not %d", 10, id)
 	}
 	exp := "10"
-	if r.GetAuditName() != exp {
-		t.Errorf("expected AuditName to be %s,  not %s", exp, r.GetAuditName())
+	if s != r.GetAuditName() {
+		t.Errorf("expected AuditName to be '%s',  not '%s'", s, r.GetAuditName())
 	}
 	exp = "deliveryservice_request"
 	if r.GetType() != "deliveryservice_request" {

-- 
To stop receiving notification emails like this one, please contact
dewrich@apache.org.