Skip to content
This repository was archived by the owner on Nov 24, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions lib/go-atscfg/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,18 +88,21 @@ locationParamsFor:
for cfgFile, cfgParams := range locationParams {
if strings.HasSuffix(cfgFile, ".config") {
dsConfigFilePrefixes := []string{
"hdr_rw_mid_", // must come before hdr_rw_, to avoid thinking we have a "hdr_rw_" with a ds of "mid_x"
"hdr_rw_",
"regex_remap_",
"url_sig_",
"uri_signing_",
}
prefixFor:
for _, prefix := range dsConfigFilePrefixes {
if strings.HasPrefix(cfgFile, prefix) {
dsName := strings.TrimSuffix(strings.TrimPrefix(cfgFile, prefix), ".config")
if _, ok := dsNames[tc.DeliveryServiceName(dsName)]; !ok {
log.Warnln("Server Profile had 'location' Parameter '" + cfgFile + "', but delivery Service '" + dsName + "' is not assigned to this Server! Not including in meta config!")
continue locationParamsFor
}
break prefixFor // if it has a prefix, don't check the next prefix. This is important for hdr_rw_mid_, which will match hdr_rw_ and result in a "ds name" of "mid_x" if we don't continue here.
}
}
}
Expand Down
71 changes: 49 additions & 22 deletions traffic_ops/ort/atstccfg/cfgfile/meta.go
Original file line number Diff line number Diff line change
Expand Up @@ -183,31 +183,58 @@ func GetConfigFileMeta(cfg config.TCCfg, serverNameOrID string) (string, error)
return "", errors.New("getting delivery services: " + err.Error())
}

dsIDs := []int{}
for _, ds := range deliveryServices {
if ds.ID == nil {
// TODO log error?
continue
dsNames := map[tc.DeliveryServiceName]struct{}{}
if tc.CacheTypeFromString(server.Type) != tc.CacheTypeMid {
dsIDs := []int{}
for _, ds := range deliveryServices {
if ds.ID == nil {
// TODO log error?
continue
}
dsIDs = append(dsIDs, *ds.ID)
}
dsIDs = append(dsIDs, *ds.ID)
}

serverIDs := []int{server.ID}
serverIDs := []int{server.ID}

dsServers, err := toreq.GetDeliveryServiceServers(cfg, dsIDs, serverIDs)
if err != nil {
return "", errors.New("getting meta config delivery service servers: " + err.Error())
}
dsServers, err := toreq.GetDeliveryServiceServers(cfg, dsIDs, serverIDs)
if err != nil {
return "", errors.New("getting meta config delivery service servers: " + err.Error())
}

dssMap := map[int]struct{}{} // set of map[dsID]. We know we only asked for our own server, so we don't care about the servers returned.
for _, dss := range dsServers {
if dss.DeliveryService == nil {
continue // TODO log?
dssMap := map[int]struct{}{} // set of map[dsID]. We know we only asked for our own server, so we don't care about the servers returned.
for _, dss := range dsServers {
if dss.DeliveryService == nil {
continue // TODO log?
}
dssMap[*dss.DeliveryService] = struct{}{}
}
for _, ds := range deliveryServices {
if ds.ID == nil {
continue
}
if ds.XMLID == nil {
continue // TODO log?
}
if _, ok := dssMap[*ds.ID]; !ok {
continue
}
dsNames[tc.DeliveryServiceName(*ds.XMLID)] = struct{}{}
}
} else {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: I think if-else code is generally easier to read when the shorter block comes first (i.e. inverting the logic to if tc.CacheTypeFromString(server.Type) == tc.CacheTypeMid and moving this block up).

for _, ds := range deliveryServices {
if ds.ID == nil {
continue
}
if ds.XMLID == nil {
continue // TODO log?
}
if ds.CDNID == nil || *ds.CDNID != server.CDNID {
continue
}
dsNames[tc.DeliveryServiceName(*ds.XMLID)] = struct{}{}
}
dssMap[*dss.DeliveryService] = struct{}{}
}

dsNames := map[tc.DeliveryServiceName]struct{}{}
uriSignedDSes := []tc.DeliveryServiceName{}
for _, ds := range deliveryServices {
if ds.ID == nil {
Expand All @@ -216,13 +243,13 @@ func GetConfigFileMeta(cfg config.TCCfg, serverNameOrID string) (string, error)
if ds.XMLID == nil {
continue // TODO log?
}
if _, ok := dssMap[*ds.ID]; !ok {
if _, ok := dsNames[tc.DeliveryServiceName(*ds.XMLID)]; !ok {
continue
}
dsNames[tc.DeliveryServiceName(*ds.XMLID)] = struct{}{}
if ds.SigningAlgorithm != nil && *ds.SigningAlgorithm == tc.SigningAlgorithmURISigning {
uriSignedDSes = append(uriSignedDSes, tc.DeliveryServiceName(*ds.XMLID))
if ds.SigningAlgorithm == nil || *ds.SigningAlgorithm != tc.SigningAlgorithmURISigning {
continue
}
uriSignedDSes = append(uriSignedDSes, tc.DeliveryServiceName(*ds.XMLID))
}

return atscfg.MakeMetaConfig(tc.CacheName(serverHostName), &serverInfo, toURL, toReverseProxyURL, locationParams, uriSignedDSes, scopeParams, dsNames), nil
Expand Down
61 changes: 61 additions & 0 deletions traffic_ops/testing/api/v14/atsconfig_meta_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ func TestATSConfigMeta(t *testing.T) {
defer DeleteTestDeliveryServiceServersCreated(t)
CreateTestDeliveryServiceServers(t)
GetTestATSConfigMeta(t)
GetTestATSConfigMetaMidHdrRw(t)
})
}

Expand Down Expand Up @@ -82,3 +83,63 @@ func GetTestATSConfigMeta(t *testing.T) {
t.Errorf("Getting server '"+server.HostName+"' config list: expected: %+v actual: %+v\n", expected, *actual)
}
}

func GetTestATSConfigMetaMidHdrRw(t *testing.T) {
testServer := tc.Server{}
for _, sv := range testData.Servers {
if tc.CacheTypeFromString(sv.Type) == tc.CacheTypeMid {

testServer = sv
break
}
}
if testServer.HostName == "" {
t.Fatal("cannot GET Server: no test data")
}

serverList, _, err := TOSession.GetServerByHostName(testServer.HostName)
if err != nil {
t.Fatalf("cannot GET Server: %v", err)
}
if len(serverList) < 1 {
t.Fatalf("cannot GET Server '" + testServer.HostName + "', returned no servers\n")
}
server := serverList[0]

lst, _, err := TOSession.GetATSServerConfigList(server.ID)
if err != nil {
t.Fatalf("Getting server '" + server.HostName + "' config list: " + err.Error() + "\n")
}

expected := tc.ATSConfigMetaDataConfigFile{
FileNameOnDisk: "hdr_rw_mid_ds1nat.config",
Location: "/remap/config/location/parameter",
APIURI: "cdns/cdn1/configfiles/ats/hdr_rw_mid_ds1nat.config", // expected suffix; config gen doesn't care about API version
URL: "",
Scope: "cdns",
}

actual := (*tc.ATSConfigMetaDataConfigFile)(nil)
for _, cfg := range lst.ConfigFiles {
if cfg.FileNameOnDisk == expected.FileNameOnDisk {
actual = &cfg
break
}
}
if actual == nil {
t.Fatalf("Getting server '"+server.HostName+"' config list: expected: %+v actual: not found\n", expected.FileNameOnDisk)
}

if expected.FileNameOnDisk != actual.FileNameOnDisk {
t.Errorf("Getting server '"+server.HostName+"' config list: expected: %+v actual: %+v\n", expected, *actual)
}
if expected.Location != actual.Location {
t.Errorf("Getting server '"+server.HostName+"' config list: expected: %+v actual: %+v\n", expected, *actual)
}
if !strings.HasSuffix(actual.APIURI, expected.APIURI) {
t.Errorf("Getting server '"+server.HostName+"' config list: expected: %+v actual: %+v\n", expected, *actual)
}
if actual.Scope != expected.Scope {
t.Errorf("Getting server '"+server.HostName+"' config list: expected: %+v actual: %+v\n", expected, *actual)
}
}
67 changes: 67 additions & 0 deletions traffic_ops/testing/api/v14/tc-fixtures.json
Original file line number Diff line number Diff line change
Expand Up @@ -630,6 +630,73 @@
"type": "HTTP_LIVE",
"xmlId": "msods1",
"anonymousBlockingEnabled": true
},
{
"active": true,
"cdnName": "cdn1",
"cacheurl": "cacheUrl1",
"ccrDnsTtl": 3600,
"checkPath": "",
"consistentHashQueryParams": [],
"deepCachingType": "NEVER",
"displayName": "ds1natDisplayName",
"dnsBypassCname": null,
"dnsBypassIp": "",
"dnsBypassIp6": "",
"dnsBypassTtl": 30,
"dscp": 40,
"edgeHeaderRewrite": "edgeHeader1",
"exampleURLs": [
"http://ccr.ds1nat.example.net",
"https://ccr.ds1nat.example.net"
],
"fqPacingRate": 0,
"geoLimit": 0,
"geoLimitCountries": "",
"geoLimitRedirectURL": null,
"geoProvider": 0,
"globalMaxMbps": 0,
"globalMaxTps": 0,
"httpBypassFqdn": "",
"infoUrl": "TBD",
"initialDispersion": 1,
"ipv6RoutingEnabled": true,
"lastUpdated": "2018-04-06 16:48:51+00",
"logsEnabled": false,
"longDesc": "d s 1",
"longDesc1": "ds1nat",
"longDesc2": "ds1nat",
"matchList": [
{
"pattern": ".*\\.ds1nat\\..*",
"setNumber": 0,
"type": "HOST_REGEXP"
}
],
"maxDnsAnswers": 0,
"midHeaderRewrite": "midHeader1",
"missLat": 41.881944,
"missLong": -87.627778,
"multiSiteOrigin": false,
"orgServerFqdn": "http://origin.example.net",
"originShield": null,
"profileDescription": null,
"profileName": null,
"protocol": 2,
"qstringIgnore": 1,
"rangeRequestHandling": 0,
"regexRemap": "rr1",
"regionalGeoBlocking": false,
"remapText": "@plugin=tslua.so @pparam=/opt/trafficserver/etc/trafficserver/remapPlugin1.lua",
"routingName": "ccr-ds1nat",
"signed": false,
"signingAlgorithm": "url_sig",
"sslKeyVersion": 2,
"tenant": "tenant1",
"tenantName": "tenant1",
"type": "HTTP_LIVE_NATNL",
"xmlId": "ds1nat",
"anonymousBlockingEnabled": true
}
],
"deliveryservicesRequiredCapabilities": [
Expand Down
21 changes: 19 additions & 2 deletions traffic_ops/traffic_ops_golang/ats/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -750,17 +750,34 @@ WHERE
}

// GetDSNames returns a set of delivery service names which have the given server assigned, and any error.
// For edges, this returns all manually-assigned delivery services. For Mids, it returns all delivery services on the Mid's CDN.
func GetDSNames(tx *sql.Tx, serverHostName string, serverPort int) (map[tc.DeliveryServiceName]struct{}, error) {
qry := `
WITH s_name_port AS (
SELECT $1::text as name, $2::integer as port
)
SELECT
ds.xml_id
FROM
deliveryservice ds
JOIN deliveryservice_server dss ON ds.id = dss.deliveryservice
JOIN server s ON s.id = dss.server
JOIN type tp on s.type = tp.id
WHERE
s.host_name = $1
AND s.tcp_port = $2
s.host_name = (select name from s_name_port)
AND s.tcp_port = (select port from s_name_port)
AND tp.name <> '` + tc.CacheTypeMid.String() + `'
UNION ALL
SELECT
ds.xml_id
FROM
deliveryservice ds
JOIN server s ON s.cdn_id = ds.cdn_id
JOIN type tp on s.type = tp.id
WHERE
s.host_name = (select name from s_name_port)
AND s.tcp_port = (select port from s_name_port)
AND tp.name = '` + tc.CacheTypeMid.String() + `'
`
rows, err := tx.Query(qry, serverHostName, serverPort)
if err != nil {
Expand Down