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

rawlin 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 f03e361  For topology-based deliveryservices, exclude deliveryservice 
server assignments when querying servers by dsId (#5054)
f03e361 is described below

commit f03e361f541d7a1ba5ec511d3fbb68bf1cc999f5
Author: Zach Hoffman <[email protected]>
AuthorDate: Wed Sep 23 17:01:14 2020 -0600

    For topology-based deliveryservices, exclude deliveryservice server 
assignments when querying servers by dsId (#5054)
    
    * Exclude deliveryservice server assignments when querying servers by dsId
    for topology-based deliveryservices
    
    * Use TO Go client to make deliveryservice server instead of a direct DB
    query
---
 traffic_ops/testing/api/v3/servers_test.go       | 32 +++++++++++++++++++++++-
 traffic_ops/traffic_ops_golang/server/servers.go | 19 +++++++-------
 2 files changed, 41 insertions(+), 10 deletions(-)

diff --git a/traffic_ops/testing/api/v3/servers_test.go 
b/traffic_ops/testing/api/v3/servers_test.go
index a6b09d4..8cb7883 100644
--- a/traffic_ops/testing/api/v3/servers_test.go
+++ b/traffic_ops/testing/api/v3/servers_test.go
@@ -316,7 +316,7 @@ func GetTestServersDetails(t *testing.T) {
 }
 
 func GetTestServersQueryParameters(t *testing.T) {
-       dses, _, err := TOSession.GetDeliveryServicesNullableWithHdr(nil)
+       dses, _, err := TOSession.GetDeliveryServicesV30WithHdr(nil, 
url.Values{})
        if err != nil {
                t.Fatalf("Failed to get Delivery Services: %v", err)
        }
@@ -361,6 +361,36 @@ func GetTestServersQueryParameters(t *testing.T) {
        if !foundTopDs {
                t.Fatalf("unable to find deliveryservice %s", topDsXmlId)
        }
+
+       /* Create a deliveryservice server assignment that should not show up 
in the
+        * client.GetServersWithHdr() response because ds-top is topology-based
+        */
+       const otherServerHostname = "topology-edge-02"
+       serverResponse, _, err := 
TOSession.GetServersWithHdr(&url.Values{"hostName": 
[]string{otherServerHostname}}, nil)
+       if err != nil {
+               t.Fatalf("getting server by hostname %s: %s", 
otherServerHostname, err)
+       }
+       if len(serverResponse.Response) != 1 {
+               t.Fatalf("unable to find server with hostname %s", 
otherServerHostname)
+       }
+       otherServer := serverResponse.Response[0]
+
+       dsTopologyField, dsFirstHeaderRewriteField, innerHeaderRewriteField, 
lastHeaderRewriteField := *ds.Topology, *ds.FirstHeaderRewrite, 
*ds.InnerHeaderRewrite, *ds.LastHeaderRewrite
+       ds.Topology, ds.FirstHeaderRewrite, ds.InnerHeaderRewrite, 
ds.LastHeaderRewrite = nil, nil, nil, nil
+       ds, _, err = TOSession.UpdateDeliveryServiceV30(*ds.ID, ds)
+       if err != nil {
+               t.Fatalf("unable to temporary remove topology-related fields 
from deliveryservice %s: %s", topDsXmlId, err)
+       }
+       _, _, err = TOSession.CreateDeliveryServiceServers(*ds.ID, 
[]int{*otherServer.ID}, false)
+       if err != nil {
+               t.Fatalf("unable to assign server %s to deliveryservice %s: 
%s", *otherServer.HostName, topDsXmlId, err)
+       }
+       ds.Topology, ds.FirstHeaderRewrite, ds.InnerHeaderRewrite, 
ds.LastHeaderRewrite = &dsTopologyField, &dsFirstHeaderRewriteField, 
&innerHeaderRewriteField, &lastHeaderRewriteField
+       ds, _, err = TOSession.UpdateDeliveryServiceV30(*ds.ID, ds)
+       if err != nil {
+               t.Fatalf("unable to re-add topology-related fields to 
deliveryservice %s: %s", topDsXmlId, err)
+       }
+
        params.Set("dsId", strconv.Itoa(*ds.ID))
        expectedHostnames := map[string]bool{
                "edge1-cdn1-cg3": true,
diff --git a/traffic_ops/traffic_ops_golang/server/servers.go 
b/traffic_ops/traffic_ops_golang/server/servers.go
index f23aebd..4be0d29 100644
--- a/traffic_ops/traffic_ops_golang/server/servers.go
+++ b/traffic_ops/traffic_ops_golang/server/servers.go
@@ -64,24 +64,25 @@ JOIN type t ON s.type = t.id
 
 /* language=SQL */
 const dssTopologiesJoinSubquery = `
-SELECT
-       td.id deliveryservice,
-       s.id "server"
+(SELECT
+       ARRAY_AGG(CAST(ROW(td.id, s.id, NULL) AS deliveryservice_server))
 FROM "server" s
 JOIN cachegroup c on s.cachegroup = c.id
 LEFT JOIN topology_cachegroup tc ON c.name = tc.cachegroup
 LEFT JOIN deliveryservice td ON td.topology = tc.topology
-UNION
+),
 `
 
 /* language=SQL */
 const deliveryServiceServersJoin = `
 FULL OUTER JOIN (
-%s
-SELECT
-       dss.deliveryservice,
-       dss."server"
-FROM deliveryservice_server dss
+SELECT (dss.dss_record).deliveryservice, (dss.dss_record).server FROM (
+       SELECT UNNEST(COALESCE(
+               %s
+               (SELECT
+                       ARRAY_AGG(CAST(ROW(dss.deliveryservice, dss."server", 
NULL) AS deliveryservice_server))
+               FROM deliveryservice_server dss)
+       )) AS dss_record) AS dss
 ) dss ON dss.server = s.id
 JOIN deliveryservice d ON cdn.id = d.cdn_id AND dss.deliveryservice = d.id
 `

Reply via email to