@@ -26,6 +26,53 @@ end_phase
26
26
27
27
wait_baseline " ${SCALETEST_PARAM_LOAD_SCENARIO_BASELINE_DURATION} "
28
28
29
+ if [[ ${SCALETEST_PARAM_GREEDY_AGENT} != 1 ]]; then
30
+ greedy_agent () { : ; }
31
+ else
32
+ echo " WARNING: Greedy agent enabled, this may cause the load tests to fail." >&2
33
+
34
+ coder exp scaletest create-workspaces \
35
+ --count 1 \
36
+ --template " ${SCALETEST_PARAM_GREEDY_AGENT_TEMPLATE} " \
37
+ --concurrency 1 \
38
+ --timeout 5h \
39
+ --job-timeout 5h \
40
+ --no-cleanup \
41
+ --output json:" ${SCALETEST_RESULTS_DIR} /create-workspaces-greedy-agent.json"
42
+
43
+ greedy_agent () {
44
+ local timeout=${1} scenario=${2}
45
+ # Run the greedy test for ~1/3 of the timeout.
46
+ delay=$(( timeout / 3 ))
47
+
48
+ local type=web-terminal
49
+ args=()
50
+ if [[ ${scenario} == " SSH Traffic" ]]; then
51
+ type=ssh
52
+ args+=(--ssh)
53
+ fi
54
+
55
+ sleep " $delay "
56
+ start_phase " ${scenario} : Greedy agent"
57
+
58
+ # Produce load at about 1000MB/s.
59
+ set +e
60
+ coder exp scaletest workspace-traffic \
61
+ --template " ${SCALETEST_PARAM_GREEDY_AGENT_TEMPLATE} " \
62
+ --timeout " $(( timeout - delay)) s" \
63
+ --job-timeout " $(( timeout - delay)) s" \
64
+ --output json:" ${SCALETEST_RESULTS_DIR} /traffic-${type} -greedy-agent.json" \
65
+ --bytes-per-tick $(( 1024 * 1000 )) \
66
+ --tick-interval 1ms \
67
+ " ${args[@]} "
68
+ status=$?
69
+
70
+ end_phase " ${scenario} : Greedy agent"
71
+
72
+ return $status
73
+ }
74
+ fi
75
+
29
76
declare -A failed=()
30
77
for scenario in " ${SCALETEST_PARAM_LOAD_SCENARIOS[@]} " ; do
31
78
start_phase " Load scenario: ${scenario} "
@@ -34,24 +81,38 @@ for scenario in "${SCALETEST_PARAM_LOAD_SCENARIOS[@]}"; do
34
81
status=0
35
82
case " ${scenario} " in
36
83
" SSH Traffic" )
84
+ greedy_agent " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} " " ${scenario} " &
37
85
coder exp scaletest workspace-traffic \
86
+ --template " ${SCALETEST_PARAM_TEMPLATE} " \
38
87
--ssh \
39
88
--bytes-per-tick " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_BYTES_PER_TICK} " \
40
89
--tick-interval " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_TICK_INTERVAL} ms" \
41
90
--timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} m" \
42
91
--job-timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} m30s" \
43
92
--output json:" ${SCALETEST_RESULTS_DIR} /traffic-ssh.json"
44
93
status=$?
94
+ wait
95
+ status2=$?
96
+ if [[ ${status} == 0 ]]; then
97
+ status=${status2}
98
+ fi
45
99
show_json " ${SCALETEST_RESULTS_DIR} /traffic-ssh.json"
46
100
;;
47
101
" Web Terminal Traffic" )
102
+ greedy_agent " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} " " ${scenario} " &
48
103
coder exp scaletest workspace-traffic \
104
+ --template " ${SCALETEST_PARAM_TEMPLATE} " \
49
105
--bytes-per-tick " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_BYTES_PER_TICK} " \
50
106
--tick-interval " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_TICK_INTERVAL} ms" \
51
107
--timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} m" \
52
108
--job-timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} m30s" \
53
109
--output json:" ${SCALETEST_RESULTS_DIR} /traffic-web-terminal.json"
54
110
status=$?
111
+ wait
112
+ status2=$?
113
+ if [[ ${status} == 0 ]]; then
114
+ status=${status2}
115
+ fi
55
116
show_json " ${SCALETEST_RESULTS_DIR} /traffic-web-terminal.json"
56
117
;;
57
118
" Dashboard Traffic" )
0 commit comments