@@ -26,6 +26,70 @@ end_phase
26
26
27
27
wait_baseline " ${SCALETEST_PARAM_LOAD_SCENARIO_BASELINE_DURATION} "
28
28
29
+ non_greedy_agent_traffic_args=()
30
+ if [[ ${SCALETEST_PARAM_GREEDY_AGENT} != 1 ]]; then
31
+ greedy_agent_traffic () { : ; }
32
+ else
33
+ echo " WARNING: Greedy agent enabled, this may cause the load tests to fail." >&2
34
+ non_greedy_agent_traffic_args=(
35
+ # Let the greedy agent traffic command be scraped.
36
+ # --scaletest-prometheus-address 0.0.0.0:21113
37
+ # --trace=false
38
+ )
39
+
40
+ annotate_grafana greedy_agent " Create greedy agent"
41
+
42
+ coder exp scaletest create-workspaces \
43
+ --count 1 \
44
+ --template " ${SCALETEST_PARAM_GREEDY_AGENT_TEMPLATE} " \
45
+ --concurrency 1 \
46
+ --timeout 5h \
47
+ --job-timeout 5h \
48
+ --no-cleanup \
49
+ --output json:" ${SCALETEST_RESULTS_DIR} /create-workspaces-greedy-agent.json"
50
+
51
+ wait_baseline " ${SCALETEST_PARAM_LOAD_SCENARIO_BASELINE_DURATION} "
52
+
53
+ greedy_agent_traffic () {
54
+ local timeout=${1} scenario=${2}
55
+ # Run the greedy test for ~1/3 of the timeout.
56
+ delay=$(( timeout * 60 / 3 ))
57
+
58
+ local type=web-terminal
59
+ args=()
60
+ if [[ ${scenario} == " SSH Traffic" ]]; then
61
+ type=ssh
62
+ args+=(--ssh)
63
+ fi
64
+
65
+ sleep " ${delay} "
66
+ annotate_grafana greedy_agent " ${scenario} : Greedy agent traffic"
67
+
68
+ # Produce load at about 1000MB/s (25MB/40ms).
69
+ set +e
70
+ coder exp scaletest workspace-traffic \
71
+ --template " ${SCALETEST_PARAM_GREEDY_AGENT_TEMPLATE} " \
72
+ --bytes-per-tick $(( 1024 * 1024 * 25 )) \
73
+ --tick-interval 40ms \
74
+ --timeout " $(( delay)) s" \
75
+ --job-timeout " $(( delay)) s" \
76
+ --output json:" ${SCALETEST_RESULTS_DIR} /traffic-${type} -greedy-agent.json" \
77
+ --scaletest-prometheus-address 0.0.0.0:21113 \
78
+ --trace=false \
79
+ " ${args[@]} "
80
+ status=${?}
81
+ show_json " ${SCALETEST_RESULTS_DIR} /traffic-${type} -greedy-agent.json"
82
+
83
+ export GRAFANA_ADD_TAGS=
84
+ if [[ ${status} != 0 ]]; then
85
+ GRAFANA_ADD_TAGS=error
86
+ fi
87
+ annotate_grafana_end greedy_agent " ${scenario} : Greedy agent traffic"
88
+
89
+ return ${status}
90
+ }
91
+ fi
92
+
29
93
declare -A failed=()
30
94
for scenario in " ${SCALETEST_PARAM_LOAD_SCENARIOS[@]} " ; do
31
95
start_phase " Load scenario: ${scenario} "
@@ -34,24 +98,40 @@ for scenario in "${SCALETEST_PARAM_LOAD_SCENARIOS[@]}"; do
34
98
status=0
35
99
case " ${scenario} " in
36
100
" SSH Traffic" )
101
+ greedy_agent_traffic " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} " " ${scenario} " &
37
102
coder exp scaletest workspace-traffic \
103
+ --template " ${SCALETEST_PARAM_TEMPLATE} " \
38
104
--ssh \
39
105
--bytes-per-tick " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_BYTES_PER_TICK} " \
40
106
--tick-interval " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_TICK_INTERVAL} ms" \
41
107
--timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} m" \
42
108
--job-timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_SSH_TRAFFIC_DURATION} m30s" \
43
- --output json:" ${SCALETEST_RESULTS_DIR} /traffic-ssh.json"
109
+ --output json:" ${SCALETEST_RESULTS_DIR} /traffic-ssh.json" \
110
+ " ${non_greedy_agent_traffic_args[@]} "
44
111
status=$?
112
+ wait
113
+ status2=$?
114
+ if [[ ${status} == 0 ]]; then
115
+ status=${status2}
116
+ fi
45
117
show_json " ${SCALETEST_RESULTS_DIR} /traffic-ssh.json"
46
118
;;
47
119
" Web Terminal Traffic" )
120
+ greedy_agent_traffic " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} " " ${scenario} " &
48
121
coder exp scaletest workspace-traffic \
122
+ --template " ${SCALETEST_PARAM_TEMPLATE} " \
49
123
--bytes-per-tick " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_BYTES_PER_TICK} " \
50
124
--tick-interval " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_TICK_INTERVAL} ms" \
51
125
--timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} m" \
52
126
--job-timeout " ${SCALETEST_PARAM_LOAD_SCENARIO_WEB_TERMINAL_TRAFFIC_DURATION} m30s" \
53
- --output json:" ${SCALETEST_RESULTS_DIR} /traffic-web-terminal.json"
127
+ --output json:" ${SCALETEST_RESULTS_DIR} /traffic-web-terminal.json" \
128
+ " ${non_greedy_agent_traffic_args[@]} "
54
129
status=$?
130
+ wait
131
+ status2=$?
132
+ if [[ ${status} == 0 ]]; then
133
+ status=${status2}
134
+ fi
55
135
show_json " ${SCALETEST_RESULTS_DIR} /traffic-web-terminal.json"
56
136
;;
57
137
" Dashboard Traffic" )
@@ -65,6 +145,10 @@ for scenario in "${SCALETEST_PARAM_LOAD_SCENARIOS[@]}"; do
65
145
;;
66
146
67
147
# Debug scenarios, for testing the runner.
148
+ " debug:greedy_agent_traffic" )
149
+ greedy_agent_traffic 10 " ${scenario} "
150
+ status=$?
151
+ ;;
68
152
" debug:success" )
69
153
maybedryrun " $DRY_RUN " sleep 10
70
154
status=0
0 commit comments