You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by ra...@apache.org on 2022/05/11 22:13:40 UTC
[trafficcontrol] branch master updated: Cleanup parent.config generation code (#6618)
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 b0a673fc5c Cleanup parent.config generation code (#6618)
b0a673fc5c is described below
commit b0a673fc5cce732019220de75d94e627dfc02c42
Author: Robert O Butts <ro...@users.noreply.github.com>
AuthorDate: Wed May 11 16:13:36 2022 -0600
Cleanup parent.config generation code (#6618)
Various techdebt cleanup of parent.config generation. Generated config
should be byte-for-byte identical with or without this PR.
- combines "profileCache" and "originServers" into a single "serversWithParams" variable, since the params apply to and are only ever useful with their corresponding server
- renames "profileCache" struct to "parentServerParams", which is what it is, profileCache is an incredibly unmeaningful name inherited from ancient Perl code
- removes unused parentConfigDS symbols
- removes cgServer struct and replaces usage with real Servers; also inherited from ancient Perl code
---
lib/go-atscfg/parentdotconfig.go | 196 ++++++++++++++-------------------------
1 file changed, 71 insertions(+), 125 deletions(-)
diff --git a/lib/go-atscfg/parentdotconfig.go b/lib/go-atscfg/parentdotconfig.go
index f993ba53a9..ac09cafbe0 100644
--- a/lib/go-atscfg/parentdotconfig.go
+++ b/lib/go-atscfg/parentdotconfig.go
@@ -307,13 +307,13 @@ func makeParentDotConfigData(
parentServerDSes[dss.Server][dss.DeliveryService] = struct{}{}
}
- originServers, profileCaches, orgProfWarns, err := getOriginServersAndProfileCaches(cgServers, parentServerDSes, profileParentConfigParams, dses, serverCapabilities)
+ originServers, orgProfWarns, err := getOriginServers(cgServers, parentServerDSes, profileParentConfigParams, dses, serverCapabilities)
warnings = append(warnings, orgProfWarns...)
if err != nil {
return nil, warnings, errors.New("getting origin servers and profile caches: " + err.Error())
}
- parentInfos, piWarns := makeParentInfo(serverParentCGData, serverCDNDomain, profileCaches, originServers)
+ parentInfos, piWarns := makeParentInfo(serverParentCGData, serverCDNDomain, originServers, serverCapabilities)
warnings = append(warnings, piWarns...)
dsOrigins, dsOriginWarns := makeDSOrigins(dss, dses, servers)
@@ -634,27 +634,6 @@ func makeParentComment(addComments bool, dsName string, topology string) string
return "ds '" + dsName + "' topology '" + topology + "'"
}
-type parentConfigDS struct {
- Name tc.DeliveryServiceName
- QStringIgnore tc.QStringIgnore
- OriginFQDN string
- MultiSiteOrigin bool
- OriginShield string
- Type tc.DSType
- QStringHandling string
- RequiredCapabilities map[ServerCapability]struct{}
- Topology string
-}
-
-type parentConfigDSTopLevel struct {
- parentConfigDS
- MSOAlgorithm string
- MSOParentRetry string
- MSOUnavailableServerRetryResponses string
- MSOMaxSimpleRetries string
- MSOMaxUnavailableServerRetries string
-}
-
type parentInfo struct {
Host string
Port int
@@ -713,7 +692,7 @@ func (s parentInfoSortByRank) Less(i, j int) bool {
type serverWithParams struct {
Server
- Params profileCache
+ Params parentServerParams
}
type serversWithParamsSortByRank []serverWithParams
@@ -762,14 +741,6 @@ func (ss serversWithParamsSortByRank) Less(i, j int) bool {
return bytes.Compare(iIP, jIP) <= 0
}
-type parentConfigDSTopLevelSortByName []parentConfigDSTopLevel
-
-func (s parentConfigDSTopLevelSortByName) Len() int { return len(s) }
-func (s parentConfigDSTopLevelSortByName) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s parentConfigDSTopLevelSortByName) Less(i, j int) bool {
- return strings.Compare(string(s[i].Name), string(s[j].Name)) < 0
-}
-
type dsesSortByName []DeliveryService
func (s dsesSortByName) Len() int { return len(s) }
@@ -784,7 +755,7 @@ func (s dsesSortByName) Less(i, j int) bool {
return *s[i].XMLID < *s[j].XMLID
}
-type profileCache struct {
+type parentServerParams struct {
Weight string
Port int
UseIP bool
@@ -794,8 +765,8 @@ type profileCache struct {
const DefaultParentWeight = 0.999
-func defaultProfileCache() profileCache {
- return profileCache{
+func defaultParentServerParams() parentServerParams {
+ return parentServerParams{
Weight: strconv.FormatFloat(DefaultParentWeight, 'f', 3, 64),
Port: 0,
UseIP: false,
@@ -804,24 +775,6 @@ func defaultProfileCache() profileCache {
}
}
-// cgServer is the server table data needed when selecting the servers assigned to a cachegroup.
-type cgServer struct {
- ServerID ServerID
- ServerHost string
- ServerIP string
- ServerPort int
- CacheGroupID int
- CacheGroupName string
- Status int
- Type int
- ProfileID ProfileID
- ProfileName string
- CDN int
- TypeName string
- Domain string
- Capabilities map[ServerCapability]struct{}
-}
-
type originURI struct {
Scheme string
Host string
@@ -1244,12 +1197,12 @@ func getTopologyQueryStringIgnore(
// serverParentageParams gets the Parameters used for parent= line, or defaults if they don't exist
// Returns the Parameters used for parent= lines for the given server, and any warnings.
-func serverParentageParams(sv *Server, params []parameterWithProfilesMap) (profileCache, []string) {
+func serverParentageParams(sv *Server, params []parameterWithProfilesMap) (parentServerParams, []string) {
warnings := []string{}
// TODO deduplicate with atstccfg/parentdotconfig.go
- profileCache := defaultProfileCache()
+ parentServerParams := defaultParentServerParams()
if sv.TCPPort != nil {
- profileCache.Port = *sv.TCPPort
+ parentServerParams.Port = *sv.TCPPort
}
for _, param := range params {
if _, ok := param.ProfileNames[(sv.ProfileNames)[0]]; !ok {
@@ -1257,31 +1210,31 @@ func serverParentageParams(sv *Server, params []parameterWithProfilesMap) (profi
}
switch param.Name {
case ParentConfigCacheParamWeight:
- profileCache.Weight = param.Value
+ parentServerParams.Weight = param.Value
case ParentConfigCacheParamPort:
if i, err := strconv.Atoi(param.Value); err != nil {
warnings = append(warnings, "port param is not an integer, skipping! : "+err.Error())
} else {
- profileCache.Port = i
+ parentServerParams.Port = i
}
case ParentConfigCacheParamUseIP:
- profileCache.UseIP = param.Value == "1"
+ parentServerParams.UseIP = param.Value == "1"
case ParentConfigCacheParamRank:
if i, err := strconv.Atoi(param.Value); err != nil {
warnings = append(warnings, "rank param is not an integer, skipping! : "+err.Error())
} else {
- profileCache.Rank = i
+ parentServerParams.Rank = i
}
case ParentConfigCacheParamNotAParent:
- profileCache.NotAParent = param.Value != "false"
+ parentServerParams.NotAParent = param.Value != "false"
}
}
- return profileCache, warnings
+ return parentServerParams, warnings
}
-func serverParentStr(sv *Server, svParams profileCache) (*ParentAbstractionServiceParent, error) {
+func serverParentStr(sv *Server, svParams parentServerParams) (*ParentAbstractionServiceParent, error) {
if svParams.NotAParent {
return nil, nil
}
@@ -1608,17 +1561,16 @@ func getMSOParentStrs(
func makeParentInfo(
serverParentCGData serverParentCacheGroupData,
serverDomain string, // getCDNDomainByProfileID(tx, server.ProfileID)
- profileCaches map[ProfileID]profileCache, // getServerParentCacheGroupProfiles(tx, server)
- originServers map[OriginHost][]cgServer, // getServerParentCacheGroupProfiles(tx, server)
+ originServers map[OriginHost][]serverWithParams,
+ serverCapabilities map[int]map[ServerCapability]struct{},
) (map[OriginHost][]parentInfo, []string) {
warnings := []string{}
parentInfos := map[OriginHost][]parentInfo{}
// note servers also contains an "all" key
for originHost, servers := range originServers {
- for _, row := range servers {
- profile := profileCaches[row.ProfileID]
- if profile.NotAParent {
+ for _, sv := range servers {
+ if sv.Params.NotAParent {
continue
}
// Perl has this check, but we only select servers ("deliveryServices" in Perl) with the right CDN in the first place
@@ -1626,26 +1578,32 @@ func makeParentInfo(
// continue
// }
- weight, err := strconv.ParseFloat(profile.Weight, 64)
+ weight, err := strconv.ParseFloat(sv.Params.Weight, 64)
if err != nil {
- warnings = append(warnings, "profile "+strconv.Itoa(int(row.ProfileID))+" had malformed weight, using default!")
+ warnings = append(warnings, "server "+*sv.HostName+" profile had malformed weight, using default!")
weight = DefaultParentWeight
}
+ ipAddr := getServerIPAddress(&sv.Server)
+ if ipAddr == nil {
+ warnings = append(warnings, "making parent info: got server with no valid IP Address, skipping!")
+ continue
+ }
+
parentInf := parentInfo{
- Host: row.ServerHost,
- Port: profile.Port,
- Domain: row.Domain,
+ Host: *sv.HostName,
+ Port: sv.Params.Port,
+ Domain: *sv.DomainName,
Weight: weight,
- UseIP: profile.UseIP,
- Rank: profile.Rank,
- IP: row.ServerIP,
- PrimaryParent: serverParentCGData.ParentID == row.CacheGroupID,
- SecondaryParent: serverParentCGData.SecondaryParentID == row.CacheGroupID,
- Capabilities: row.Capabilities,
+ UseIP: sv.Params.UseIP,
+ Rank: sv.Params.Rank,
+ IP: ipAddr.String(),
+ PrimaryParent: serverParentCGData.ParentID == *sv.CachegroupID,
+ SecondaryParent: serverParentCGData.SecondaryParentID == *sv.CachegroupID,
+ Capabilities: serverCapabilities[*sv.ID],
}
if parentInf.Port < 1 {
- parentInf.Port = row.ServerPort
+ parentInf.Port = *sv.TCPPort
}
parentInfos[originHost] = append(parentInfos[originHost], parentInf)
}
@@ -1663,22 +1621,21 @@ func unavailableServerRetryResponsesValid(s string) bool {
return re.MatchString(s)
}
-// getOriginServersAndProfileCaches returns the origin servers, ProfileCaches, any warnings, and any error.
-func getOriginServersAndProfileCaches(
+// getOriginServers returns the origin servers with parameters, any warnings, and any error.
+func getOriginServers(
cgServers map[int]Server,
parentServerDSes map[int]map[int]struct{},
profileParentConfigParams map[string]map[string]string, // map[profileName][paramName]paramVal
dses []DeliveryService,
serverCapabilities map[int]map[ServerCapability]struct{},
-) (map[OriginHost][]cgServer, map[ProfileID]profileCache, []string, error) {
+) (map[OriginHost][]serverWithParams, []string, error) {
warnings := []string{}
- originServers := map[OriginHost][]cgServer{} // "deliveryServices" in Perl
- profileCaches := map[ProfileID]profileCache{} // map[profileID]ProfileCache
+ originServers := map[OriginHost][]serverWithParams{}
dsIDMap := map[int]DeliveryService{}
for _, ds := range dses {
if ds.ID == nil {
- return nil, nil, warnings, errors.New("delivery services got nil ID!")
+ return nil, warnings, errors.New("delivery services got nil ID!")
}
if !ds.Type.IsHTTP() && !ds.Type.IsDNS() {
continue // skip ANY_MAP, STEERING, etc
@@ -1705,13 +1662,19 @@ func getOriginServersAndProfileCaches(
dsOrigins, dsOriginWarns, err := getDSOrigins(allDSMap)
warnings = append(warnings, dsOriginWarns...)
if err != nil {
- return nil, nil, warnings, errors.New("getting DS origins: " + err.Error())
+ return nil, warnings, errors.New("getting DS origins: " + err.Error())
}
profileParams, profParamWarns := getParentConfigProfileParams(cgServers, profileParentConfigParams)
warnings = append(warnings, profParamWarns...)
for _, cgSv := range cgServers {
+ parentServerParams, profileParamsHasProfile := profileParams[cgSv.ProfileNames[0]]
+ if !profileParamsHasProfile {
+ warnings = append(warnings, fmt.Sprintf("cachegroup has server %+v profile with no parameters\n", *cgSv.HostName))
+ parentServerParams = defaultParentServerParams()
+ }
+
if cgSv.ID == nil {
warnings = append(warnings, "getting origin servers: got server with nil ID, skipping!")
continue
@@ -1747,20 +1710,6 @@ func getOriginServersAndProfileCaches(
continue
}
- realCGServer := cgServer{
- ServerID: ServerID(*cgSv.ID),
- ServerHost: *cgSv.HostName,
- ServerIP: ipAddr.String(),
- ServerPort: *cgSv.TCPPort,
- CacheGroupID: *cgSv.CachegroupID,
- Status: *cgSv.StatusID,
- Type: *cgSv.TypeID,
- CDN: *cgSv.CDNID,
- TypeName: cgSv.Type,
- Domain: *cgSv.DomainName,
- Capabilities: serverCapabilities[*cgSv.ID],
- }
-
if cgSv.Type == tc.OriginTypeName {
for dsID, _ := range parentServerDSes[*cgSv.ID] { // map[serverID][]dsID
orgURI := dsOrigins[dsID]
@@ -1769,44 +1718,41 @@ func getOriginServersAndProfileCaches(
continue
}
orgHost := OriginHost(orgURI.Host)
- originServers[orgHost] = append(originServers[orgHost], realCGServer)
+ originServers[orgHost] = append(originServers[orgHost], serverWithParams{
+ Server: cgSv,
+ Params: parentServerParams,
+ })
}
} else {
- originServers[deliveryServicesAllParentsKey] = append(originServers[deliveryServicesAllParentsKey], realCGServer)
- }
-
- if _, profileCachesHasProfile := profileCaches[realCGServer.ProfileID]; !profileCachesHasProfile {
- if profileCache, profileParamsHasProfile := profileParams[cgSv.ProfileNames[0]]; !profileParamsHasProfile {
- warnings = append(warnings, fmt.Sprintf("cachegroup has server with profile %+v but that profile has no parameters\n", cgSv.ProfileNames[0]))
- profileCaches[realCGServer.ProfileID] = defaultProfileCache()
- } else {
- profileCaches[realCGServer.ProfileID] = profileCache
- }
+ originServers[deliveryServicesAllParentsKey] = append(originServers[deliveryServicesAllParentsKey], serverWithParams{
+ Server: cgSv,
+ Params: parentServerParams,
+ })
}
}
- return originServers, profileCaches, warnings, nil
+ return originServers, warnings, nil
}
// GetParentConfigProfileParams returns the parent config profile params, and any warnings.
func getParentConfigProfileParams(
cgServers map[int]Server,
profileParentConfigParams map[string]map[string]string, // map[profileName][paramName]paramVal
-) (map[string]profileCache, []string) {
+) (map[string]parentServerParams, []string) {
warnings := []string{}
- parentConfigServerCacheProfileParams := map[string]profileCache{} // map[profileName]ProfileCache
+ parentConfigServerCacheProfileParams := map[string]parentServerParams{} // map[profileName]parentServerParams
for _, cgServer := range cgServers {
if len(cgServer.ProfileNames) == 0 {
warnings = append(warnings, "getting parent config profile params: server has nil profiles, skipping!")
continue
}
- profileCache, ok := parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]]
+ serverParams, ok := parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]]
if !ok {
- profileCache = defaultProfileCache()
+ serverParams = defaultParentServerParams()
}
params, ok := profileParentConfigParams[cgServer.ProfileNames[0]]
if !ok {
- parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]] = profileCache
+ parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]] = serverParams
continue
}
for name, val := range params {
@@ -1816,29 +1762,29 @@ func getParentConfigProfileParams(
// if err != nil {
// warnings = append(warnings, "parent.config generation: weight param is not a float, skipping! : " + err.Error())
// } else {
- // profileCache.Weight = f
+ // parentServerParams.Weight = f
// }
// TODO validate float?
- profileCache.Weight = val
+ serverParams.Weight = val
case ParentConfigCacheParamPort:
if i, err := strconv.Atoi(val); err != nil {
warnings = append(warnings, "port param is not an integer, skipping! : "+err.Error())
} else {
- profileCache.Port = i
+ serverParams.Port = i
}
case ParentConfigCacheParamUseIP:
- profileCache.UseIP = val == "1"
+ serverParams.UseIP = val == "1"
case ParentConfigCacheParamRank:
if i, err := strconv.Atoi(val); err != nil {
warnings = append(warnings, "rank param is not an integer, skipping! : "+err.Error())
} else {
- profileCache.Rank = i
+ serverParams.Rank = i
}
case ParentConfigCacheParamNotAParent:
- profileCache.NotAParent = val != "false"
+ serverParams.NotAParent = val != "false"
}
}
- parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]] = profileCache
+ parentConfigServerCacheProfileParams[cgServer.ProfileNames[0]] = serverParams
}
return parentConfigServerCacheProfileParams, warnings
}