func allocateWorkToClient()

in network/benchmarks/netperf/nptest/nptest.go [502:563]


func allocateWorkToClient(workerState *workerState, workItem *WorkItem) {
	if !allWorkersIdle() {
		workItem.IsIdle = true
		return
	}

	// System is all idle - pick up next work item to allocate to client
	for n, v := range active_tests {
		if v.Finished {
			continue
		}
		if v.SourceNode != workerState.worker {
			workItem.IsIdle = true
			return
		}
		if _, ok := workerStateMap[v.DestinationNode]; !ok {
			workItem.IsIdle = true
			return
		}
		fmt.Printf("Requesting jobrun '%s' from %s to %s for MSS %d for MsgSize %d\n", v.Label, v.SourceNode, v.DestinationNode, v.MSS, v.MsgSize)
		workItem.IsClientItem = true
		workItem.TestCaseIndex = n
		workerState.idle = false

		if !v.ClusterIP {
			workItem.ClientItem.Host = workerStateMap[workerState.worker].IP
		} else {
			workItem.ClientItem.Host = os.Getenv("NETPERF_W2_SERVICE_HOST")
		}

		workItem.ClientItem.Params = v.TestParams

		if v.MSS != 0 && v.MSS < mssMax {
			v.MSS += mssStepSize
		} else {
			v.Finished = true
		}

		if v.Type == netperfTest {
			workItem.ClientItem.Port = "12865"
		} else {
			workItem.ClientItem.Port = "5201"
		}

		return
	}

	for _, v := range active_tests {
		if !v.Finished {
			return
		}
	}

	if !datapointsFlushed {
		fmt.Println("ALL TESTCASES AND MSS RANGES COMPLETE - GENERATING CSV OUTPUT")
		flushDataPointsToCsv()
		flushResultJsonData()
		datapointsFlushed = true
	}

	workItem.IsIdle = true
}