You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by zr...@apache.org on 2023/04/05 21:18:15 UTC

[trafficcontrol] branch master updated: Fix reserved consistentHashQueryParams entries causing internal server error instead of client error (#7405)

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

zrhoffman 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 94d9850fe4 Fix reserved consistentHashQueryParams entries causing internal server error instead of client error (#7405)
94d9850fe4 is described below

commit 94d9850fe48a7714e33d1e6f71c8e1479ec7c694
Author: ocket8888 <oc...@apache.org>
AuthorDate: Wed Apr 5 15:18:07 2023 -0600

    Fix reserved consistentHashQueryParams entries causing internal server error instead of client error (#7405)
    
    * Fix incorrect response when attempting to use a reserved CHQP
    
    * Update changelog
    
    * Add a reserved query string parameter that I missed
---
 CHANGELOG.md                                               |  1 +
 lib/go-tc/deliveryservices.go                              |  9 +++++++++
 .../traffic_ops_golang/deliveryservice/deliveryservices.go | 14 ++++++++++++--
 3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02653b498c..ec37e0a781 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -97,6 +97,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 - [#6695](https://github.com/apache/trafficcontrol/issues/6695) *Traffic Control Cache Config (t3c)* Directory creation was erroneously reporting an error when actually succeeding.
 - [#7411](https://github.com/apache/trafficcontrol/pull/7411) *Traffic Control Cache Config (t3c)* Fixed issue with wrong parent ordering with MSO non-topology delivery services.
 - [#7425](https://github.com/apache/trafficcontrol/pull/7425) *Traffic Control Cache Config (t3c)* Fixed issue with layered profile iteration being done in the wrong order.
+- [#6385](https://github.com/apache/trafficcontrol/issues/6385) *Traffic Ops* Reserved consistentHashQueryParameters cause internal server error
 
 ### Removed
 - [#7271](https://github.com/apache/trafficcontrol/pull/7271) Remove components in `infrastructre/docker/`, not in use as cdn-in-a-box performs the same functionality.
diff --git a/lib/go-tc/deliveryservices.go b/lib/go-tc/deliveryservices.go
index 2cdedb536a..103a1ea772 100644
--- a/lib/go-tc/deliveryservices.go
+++ b/lib/go-tc/deliveryservices.go
@@ -49,6 +49,15 @@ const MaxRangeSliceBlockSize = 33554432
 // values of a Delivery Service's 'Active' property (v3.0+).
 type DeliveryServiceActiveState string
 
+// These names of URL query string parameters are not allowed to be in a
+// Delivery Service's "ConsistentHashQueryParams" set, because they collide with
+// query string parameters reserved for use by Traffic Router.
+const (
+	ReservedConsistentHashingQueryParameterFormat              = "format"
+	ReservedConsistentHashingQueryParameterTRRED               = "trred"
+	ReservedConsistentHashingQueryParameterFakeClientIPAddress = "fakeClientIpAddress"
+)
+
 // A DeliveryServiceActiveState describes the availability of Delivery Service
 // content from the perspective of caching servers and Traffic Routers.
 const (
diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
index acb8b67787..c1c6943351 100644
--- a/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
+++ b/traffic_ops/traffic_ops_golang/deliveryservice/deliveryservices.go
@@ -1714,10 +1714,20 @@ func validateTypeFields(tx *sql.Tx, ds *tc.DeliveryServiceV5) error {
 		"consistentHashQueryParams": validation.Validate(ds,
 			validation.By(func(dsi interface{}) error {
 				ds := dsi.(*tc.DeliveryServiceV5)
-				if len(ds.ConsistentHashQueryParams) == 0 || tc.DSType(typeName).IsHTTP() {
+				if len(ds.ConsistentHashQueryParams) == 0 {
 					return nil
 				}
-				return fmt.Errorf("consistentHashQueryParams not allowed for '%s' deliveryservice type", typeName)
+				if !tc.DSType(typeName).IsHTTP() {
+					return fmt.Errorf("consistentHashQueryParams not allowed for '%s' deliveryservice type", typeName)
+				}
+
+				for _, param := range ds.ConsistentHashQueryParams {
+					if param == tc.ReservedConsistentHashingQueryParameterFormat || param == tc.ReservedConsistentHashingQueryParameterTRRED || param == tc.ReservedConsistentHashingQueryParameterFakeClientIPAddress {
+						return fmt.Errorf("'%s' cannot be used in consistent hashing, because it is reserved for use by Traffic Router", param)
+					}
+				}
+
+				return nil
 			})),
 		"initialDispersion": validation.Validate(ds.InitialDispersion,
 			validation.By(requiredIfMatchesTypeName([]string{httpTypeRegexp}, typeName)),