This is an automated email from the ASF dual-hosted git repository. rshah pushed a commit to branch bugfix/ds-org-servers in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git
commit 13bfe5b60772c417e36a8d1e5ab6dacfa2e633d5 Author: Chatterjee, Srijeet <srijeet_chatter...@comcast.com> AuthorDate: Mon Feb 5 09:02:53 2024 -0700 Fix incorrect display of delivery services for an ORG server (#107) add changelog code review --------- Co-authored-by: Srijeet Chatterjee <srijeet0...@gmail.com> --- .../api/v3/servers_id_deliveryservices_test.go | 3 +-- .../api/v4/servers_id_deliveryservices_test.go | 3 +-- .../api/v5/servers_id_deliveryservices_test.go | 3 +-- .../deliveryservice/servers/servers.go | 24 +++++++++++++++------- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/traffic_ops/testing/api/v3/servers_id_deliveryservices_test.go b/traffic_ops/testing/api/v3/servers_id_deliveryservices_test.go index 9dd2f45d03..93c5b376d5 100644 --- a/traffic_ops/testing/api/v3/servers_id_deliveryservices_test.go +++ b/traffic_ops/testing/api/v3/servers_id_deliveryservices_test.go @@ -90,9 +90,8 @@ func TestServersIDDeliveryServices(t *testing.T) { GetServerID(t, "denver-mso-org-01")(), []int{ GetDeliveryServiceId(t, "ds-top")(), - GetDeliveryServiceId(t, "ds-top-req-cap2")(), }, - 2)), + 1)), }, "CONFLICT when SERVER NOT IN SAME CDN as DELIVERY SERVICE": { EndpointID: GetServerID(t, "cdn2-test-edge"), diff --git a/traffic_ops/testing/api/v4/servers_id_deliveryservices_test.go b/traffic_ops/testing/api/v4/servers_id_deliveryservices_test.go index 87b7e45060..9949eb2a31 100644 --- a/traffic_ops/testing/api/v4/servers_id_deliveryservices_test.go +++ b/traffic_ops/testing/api/v4/servers_id_deliveryservices_test.go @@ -92,9 +92,8 @@ func TestServersIDDeliveryServices(t *testing.T) { totest.GetServerID(t, TOSession, "denver-mso-org-01")(), []int{ totest.GetDeliveryServiceId(t, TOSession, "ds-top")(), - totest.GetDeliveryServiceId(t, TOSession, "ds-top-req-cap2")(), }, - 2)), + 1)), }, "CONFLICT when SERVER NOT IN SAME CDN as DELIVERY SERVICE": { EndpointID: totest.GetServerID(t, TOSession, "cdn2-test-edge"), diff --git a/traffic_ops/testing/api/v5/servers_id_deliveryservices_test.go b/traffic_ops/testing/api/v5/servers_id_deliveryservices_test.go index 2cae5f3018..4b6f10e3bf 100644 --- a/traffic_ops/testing/api/v5/servers_id_deliveryservices_test.go +++ b/traffic_ops/testing/api/v5/servers_id_deliveryservices_test.go @@ -91,9 +91,8 @@ func TestServersIDDeliveryServices(t *testing.T) { GetServerID(t, "denver-mso-org-01")(), []int{ GetDeliveryServiceId(t, "ds-top")(), - GetDeliveryServiceId(t, "ds-top-req-cap2")(), }, - 2)), + 1)), }, "CONFLICT when SERVER NOT IN SAME CDN as DELIVERY SERVICE": { EndpointID: GetServerID(t, "cdn2-test-edge"), diff --git a/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go b/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go index 1b14e0a930..6eaedd3d04 100644 --- a/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go +++ b/traffic_ops/traffic_ops_golang/deliveryservice/servers/servers.go @@ -944,9 +944,20 @@ func (dss *TODSSDeliveryService) Read(h http.Header, useIMS bool) ([]interface{} where = "WHERE " } - where += ` + serverID, _ := strconv.Atoi(params["id"]) + serverInfo, exists, err := dbhelpers.GetServerInfo(serverID, tx) + if err != nil { + return nil, nil, err, http.StatusInternalServerError, nil + } + if !exists { + return nil, fmt.Errorf("server with ID %d doesn't exist", serverID), nil, http.StatusNotFound, nil + } + if serverInfo.Type == tc.OriginTypeName { + where += `ds.id in (SELECT deliveryservice FROM deliveryservice_server WHERE server = :server)` + } else { + where += ` (ds.id in ( - SELECT deliveryService FROM deliveryservice_server WHERE server = :server + SELECT deliveryservice FROM deliveryservice_server WHERE server = :server ) OR ds.id in ( SELECT d.id FROM deliveryservice d JOIN cdn c ON d.cdn_id = c.id @@ -960,16 +971,15 @@ func (dss *TODSSDeliveryService) Read(h http.Header, useIMS bool) ([]interface{} AND d.cdn_id = (SELECT cdn_id FROM server WHERE id = :server))) AND (( -(SELECT (t.name = 'ORG') FROM type t JOIN server s ON s.type = t.id WHERE s.id = :server) -OR -(SELECT COALESCE(ARRAY_AGG(ssc.server_capability), '{}') -FROM server_server_capability ssc -WHERE ssc."server" = :server) +(SELECT COALESCE(ARRAY_AGG(ssc.server_capability), '{}') +FROM server_server_capability ssc +WHERE ssc."server" = :server) @> ( SELECT COALESCE(ds.required_capabilities, '{}') ))) ` + } tenantIDs, err := tenant.GetUserTenantIDListTx(tx, user.TenantID) if err != nil {