Commit 91a7152e authored by Kevin Di Lallo's avatar Kevin Di Lallo
Browse files

tc-engine fixes for scenario update events

parent da5d3289
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -94,7 +94,9 @@ func (re *RoutingEngine) RefreshLbRules() {


		// Set load balanced MG Service instance
		// Set load balanced MG Service instance
		for _, svcMap := range netElem.ServiceMaps {
		for _, svcMap := range netElem.ServiceMaps {
			podInfo.MgSvcMap[svcMap.MgSvcName] = svcInfoMap[svcMap.LbSvcName]
			if svcInfo, found := svcInfoMap[svcMap.LbSvcName]; found {
				podInfo.MgSvcMap[svcMap.MgSvcName] = svcInfo
			}
		}
		}
	}
	}


+56 −41
Original line number Original line Diff line number Diff line
@@ -278,8 +278,8 @@ func initMeepSidecar() (err error) {
	// Initialize latency results
	// Initialize latency results
	latestLatencyResultsMap = make(map[string]int32)
	latestLatencyResultsMap = make(map[string]int32)


	// Refresh Ping destinations
	// Refresh destinations
	refreshPingDests()
	refreshDests()


	return nil
	return nil
}
}
@@ -335,8 +335,8 @@ func refreshNcRules() {
	elapsed := time.Since(currentTime)
	elapsed := time.Since(currentTime)
	log.Debug("refreshNcRules: execution time for ", nbAppliedOperations, " updates, elapsed time: ", elapsed)
	log.Debug("refreshNcRules: execution time for ", nbAppliedOperations, " updates, elapsed time: ", elapsed)


	// Refresh ping destinations
	// Refresh destinations
	refreshPingDests()
	refreshDests()
}
}


func refreshLbRules() {
func refreshLbRules() {
@@ -569,22 +569,38 @@ func refreshLbRulesHandler(key string, fields map[string]string, userData interf
	return nil
	return nil
}
}


// refreshPingDests - Refresh ping destinations to match valid DB entries
// refreshDests - Refresh destinations to match valid DB entries
func refreshPingDests() {
func refreshDests() {
	// Get list of destinations with valid IP addresses
	// Get list of destinations with valid IP addresses
	var pingDests []DestElement
	var destElems []DestElement
	keyName := baseKey + typeNet + ":" + PodName + ":filter*"
	keyName := baseKey + typeNet + ":" + PodName + ":filter*"
	err := rc.ForEachEntry(keyName, refreshPingDestsHandler, &pingDests)
	err := rc.ForEachEntry(keyName, refreshDestsHandler, &destElems)
	if err != nil {
	if err != nil {
		log.Error("Failed to update dest pod list. Error: ", err)
		log.Error("Failed to update dest pod list. Error: ", err)
	}
	}


	// Create new dest list
	semOptsDests.Lock()
	dests := []*destination{}
	defer semOptsDests.Unlock()
	for _, pingDest := range pingDests {

		remotes, err := resolve(pingDest.ipAddr, opts.resolverTimeout)
	// Find existing elements or add new elements
	var dests []*destination
	for _, destElem := range destElems {

		// Find existing destination
		found := false
		for _, d := range opts.dests {
			if destElem.name == d.remoteName && destElem.ipAddr == d.host && destElem.IfbNumber == d.ifbNumber {
				dests = append(dests, d)
				found = true
				break
			}
		}

		// Create a new destination if not found
		if !found {
			remotes, err := resolve(destElem.ipAddr, opts.resolverTimeout)
			if err != nil {
			if err != nil {
			log.Debug("error resolving host ", pingDest.name, "(", pingDest.ipAddr, ") err: ", err)
				log.Debug("error resolving host ", destElem.name, "(", destElem.ipAddr, ") err: ", err)
				continue
				continue
			}
			}


@@ -594,13 +610,13 @@ func refreshPingDests() {
				}
				}


				ipaddr := remote // need to create a copy
				ipaddr := remote // need to create a copy
			name := pingDest.name
				name := destElem.name
				dest := destination{
				dest := destination{
				host:       pingDest.ipAddr,
					host:       destElem.ipAddr,
					hostName:   PodName,
					hostName:   PodName,
					remote:     &ipaddr,
					remote:     &ipaddr,
					remoteName: name,
					remoteName: name,
				ifbNumber:  pingDest.IfbNumber,
					ifbNumber:  destElem.IfbNumber,
					history: &history{
					history: &history{
						results: make([]time.Duration, opts.statBufferSize),
						results: make([]time.Duration, opts.statBufferSize),
					},
					},
@@ -614,15 +630,14 @@ func refreshPingDests() {
				dests = append(dests, &dest)
				dests = append(dests, &dest)
			}
			}
		}
		}
	}


	// Update ping dest list
	// Update dests
	semOptsDests.Lock()
	opts.dests = dests
	opts.dests = dests
	semOptsDests.Unlock()
}
}


func refreshPingDestsHandler(key string, fields map[string]string, userData interface{}) error {
func refreshDestsHandler(key string, fields map[string]string, userData interface{}) error {
	pingDests := userData.(*[]DestElement)
	dests := userData.(*[]DestElement)
	var dest DestElement
	var dest DestElement
	dest.name = fields["srcName"]
	dest.name = fields["srcName"]
	dest.ipAddr = fields["srcIp"]
	dest.ipAddr = fields["srcIp"]
@@ -630,7 +645,7 @@ func refreshPingDestsHandler(key string, fields map[string]string, userData inte


	// Append valid pods only
	// Append valid pods only
	if dest.ipAddr != ipAddrNone {
	if dest.ipAddr != ipAddrNone {
		*pingDests = append(*pingDests, dest)
		*dests = append(*dests, dest)
	}
	}
	return nil
	return nil
}
}