Skip to content

Commit 774fabd

Browse files
committed
add retry
1 parent 34b1fcc commit 774fabd

File tree

2 files changed

+48
-13
lines changed

2 files changed

+48
-13
lines changed

load-test/scripts/configuration.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const PRIVATE_KEY = null;
2323
// reached this time. This is so we do not issue too many requests.
2424
export const REQUEST_TIME_MS = 20000;
2525
// Time after which to timeout a request
26-
export const TIMEOUT_MS = 40000;
26+
export const TIMEOUT_MS = 60000;
2727

2828
// Mini-app types
2929
export const MiniAppType = {
@@ -60,8 +60,7 @@ export function getTestOptions(maxUserGoal, highLoadTimeMinutes) {
6060
exceptions: ["count == 0"],
6161
errors: ["count == 0"],
6262
timeouts: ["count == 0"],
63-
total_session_time: ["p(95) < 5000"],
64-
dropped_iterations: ["count == 0"]
63+
total_session_time: ["p(95) < 5000"]
6564
},
6665
summaryTrendStats: ["avg", "min", "med", "max", "p(90)", "p(95)", "p(98)", "p(99)"],
6766
};

load-test/scripts/loadTest.js

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ import {
1818
// Change these options to increase the user goal or time to run the test.
1919
export const options = getTestOptions(
2020
/* User goal */ 1000,
21-
/* High load time minutes */ 15
21+
/* High load time minutes */ 4
2222
);
2323

2424
// Change this to test different code
2525
const sourceToTest = helloWorld;
2626
// Set this to true to space out requests every REQUEST_TIME_MS milliseconds. Set to
2727
// false to send as many requests as possible.
28-
const SHOULD_SLEEP = true;
28+
const SHOULD_SLEEP = false;
2929

3030
const exceptionCounter = new Counter("exceptions");
3131
const errorCounter = new Counter("errors");
@@ -34,6 +34,9 @@ const totalSessionTime = new Trend("total_session_time", true);
3434
const sessionsOver10Seconds = new Counter("session_over_10_seconds");
3535
const sessionsOver15Seconds = new Counter("session_over_15_seconds");
3636
const sessionsOver20Seconds = new Counter("session_over_20_seconds");
37+
const zeroRetries = new Counter("sessions_with_0_retries");
38+
const oneRetry = new Counter("sessions_with_1_retry");
39+
const twoRetries = new Counter("sessions_with_2_retries");
3740

3841

3942
function isResultSuccess(result) {
@@ -53,20 +56,53 @@ export default function () {
5356
check(uploadResult, { "upload status is 200": (r) => isResultSuccess(r)});
5457

5558
if (isResultSuccess(uploadResult)) {
56-
let res = null;
57-
try {
58-
res = ws.connect(WEBSOCKET_URL + authToken, WEBSOCKET_PARAMS, (socket) =>
59-
onSocketConnect(socket, requestStartTime, Date.now(), sessionId)
60-
);
61-
} catch(error) {
62-
console.log(`ERROR ${error} for session id ${sessionId}`);
63-
}
59+
let res = connectToWebsocketWithRetry(authToken, sessionId, requestStartTime);
6460
check(res, { "websocket status is 101": (r) => r && r.status === 101 });
6561
} else {
6662
console.log(`ERROR upload failed for session id ${sessionId}`);
6763
}
6864
}
6965

66+
function connectToWebsocketWithRetry(authToken, sessionId, requestStartTime) {
67+
let res = null;
68+
let tries = 0;
69+
let shouldRetry = true;
70+
while(tries < 3 && shouldRetry) {
71+
if (tries > 0) {
72+
// before the first retry sleep for 1 second, before the second retry sleep for 2 seconds.
73+
console.log(`RETRY ${tries} for session id ${sessionId}`);
74+
sleep(1 * tries);
75+
}
76+
res = connectToWebsocket(authToken, sessionId, requestStartTime);
77+
if (res != null) {
78+
shouldRetry = false;
79+
}
80+
tries++;
81+
}
82+
if (tries === 1) {
83+
zeroRetries.add(1);
84+
} else if (tries === 2) {
85+
oneRetry.add(1);
86+
} else if (tries === 3) {
87+
twoRetries.add(1);
88+
} else {
89+
console.log(`Unexpected number of retries: ${tries}`);
90+
}
91+
return res;
92+
}
93+
94+
function connectToWebsocket(authToken, sessionId, requestStartTime) {
95+
let res = null;
96+
try {
97+
res = ws.connect(WEBSOCKET_URL + authToken, WEBSOCKET_PARAMS, (socket) =>
98+
onSocketConnect(socket, requestStartTime, Date.now(), sessionId)
99+
);
100+
} catch(error) {
101+
console.log(`ERROR ${error} for session id ${sessionId}`);
102+
}
103+
return res;
104+
}
105+
70106
function onSocketConnect(socket, requestStartTime, websocketStartTime, sessionId) {
71107
socket.on("open", () => {
72108
socket.setTimeout(() => {

0 commit comments

Comments
 (0)