bbbdc1c25c
* throttle tests: fix detection of parallel execution The test wasn't able to detect if too many workers were running. On my laptop: - without this change, the 'throttle' target takes ~20 seconds - with this change, the 'throttle' target takes ~70 seconds - 1 second isn't long enough to encounter the issue * Fix throttle test when strategy is 'free' based 'free' strategy allows multiple tasks to be executed in parallel: use one 'throttledir' per task. Use 'linear' strategy with a dedicated play for cleanup/setup tasks * throttle: reset worker idx before queuing a new task * TestStrategyBase: define task.throttle otherwise '1' will be used instead of the default value due to the following expression being equal to '1': int(templar.template(task_mock.throttle)) Co-authored-by: James Cammarata <jimi@sngx.net>
34 lines
1.1 KiB
Python
Executable file
34 lines
1.1 KiB
Python
Executable file
#!/usr/bin/env python
|
|
|
|
from __future__ import (absolute_import, division, print_function)
|
|
__metaclass__ = type
|
|
|
|
import os
|
|
import sys
|
|
import time
|
|
|
|
# read the args from sys.argv
|
|
throttledir, inventory_hostname, max_throttle = sys.argv[1:]
|
|
# format/create additional vars
|
|
max_throttle = int(max_throttle)
|
|
throttledir = os.path.expanduser(throttledir)
|
|
throttlefile = os.path.join(throttledir, inventory_hostname)
|
|
try:
|
|
# create the file
|
|
with(open(throttlefile, 'a')):
|
|
os.utime(throttlefile, None)
|
|
# count the number of files in the dir
|
|
throttlelist = os.listdir(throttledir)
|
|
print("tasks: %d/%d" % (len(throttlelist), max_throttle))
|
|
# if we have too many files, fail
|
|
if len(throttlelist) > max_throttle:
|
|
print(throttlelist)
|
|
raise ValueError("Too many concurrent tasks: %d/%d" % (len(throttlelist), max_throttle))
|
|
time.sleep(1.5)
|
|
finally:
|
|
# remove the file, then wait to make sure it's gone
|
|
os.unlink(throttlefile)
|
|
while True:
|
|
if not os.path.exists(throttlefile):
|
|
break
|
|
time.sleep(0.1)
|