From bf84a5985a94dbb747dbedf04e9901c7fd4668ee Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Wed, 18 Jul 2018 10:53:37 -0500 Subject: [PATCH] Include spreads configured at job level when precomputing weights/desired counts. --- scheduler/spread.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scheduler/spread.go b/scheduler/spread.go index db59b3322..d3030519b 100644 --- a/scheduler/spread.go +++ b/scheduler/spread.go @@ -101,8 +101,8 @@ func (iter *SpreadIterator) Next() *RankedNode { totalSpreadScore := 0.0 for _, pset := range propertySets { nValue, errorMsg, usedCount := pset.UsedCount(option.Node, tgName) + // Skip if there was errors in resolving this attribute to compute used counts if errorMsg != "" { - // Skip if there was errors in resolving this attribute to compute used counts continue } spreadAttributeMap := iter.tgSpreadInfo[tgName] @@ -138,7 +138,12 @@ func (iter *SpreadIterator) Next() *RankedNode { func (iter *SpreadIterator) computeSpreadInfo(tg *structs.TaskGroup) { spreadInfos := make(spreadAttributeMap, len(tg.Spreads)) totalCount := tg.Count - for _, spread := range tg.Spreads { + + // Always combine any spread stanzas defined at the job level here + combinedSpreads := make([]*structs.Spread, 0, len(tg.Spreads)+len(iter.jobSpreads)) + combinedSpreads = append(combinedSpreads, tg.Spreads...) + combinedSpreads = append(combinedSpreads, iter.jobSpreads...) + for _, spread := range combinedSpreads { sumWeight := uint32(0) for _, st := range spread.SpreadTarget { sumWeight += st.Percent