Skip to content

Commit c600ffa

Browse files
committed
Add retries to Tableau support
During long exports transient errors might lead to failures. Try to handle these at least a little.
1 parent e5ddf80 commit c600ffa

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

lnt/server/ui/static/lnt_tableau.js

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,21 @@
1515
/** Get a json payload from the LNT server asynchronously or error.
1616
* @param {string} payload_url JSON payloads URL.
1717
*/
18-
function getValue(payload_url) {
18+
function getValue(payload_url, retries) {
1919
var response = $.ajax({
2020
url: payload_url,
2121
async: false,
2222
cache: false,
23-
timeout: 60000, // Make all requests timeout after a minute.
23+
timeout: 60000 // Make all requests timeout after a minute.
2424
});
25-
25+
if (retries > 0 && response.status >= 500) {
26+
tableau.reportProgress("Error: Retrying because of 5xx error code.");
27+
return getValue(payload_url, retries-1);
28+
}
2629
if (response.status >= 400) {
2730
var error_msg = "Requesting data from LNT failed with:\n\n HTTP " +
2831
response.status + ": " + response.responseText + "\n\nURL: " +
29-
payload_url
32+
payload_url;
3033
tableau.abortWithError(error_msg);
3134
throw new Error(error_msg);
3235
}
@@ -36,7 +39,7 @@
3639

3740
function get_matching_machines(regexp) {
3841
const name_regexp = new RegExp(regexp);
39-
var resp = getValue(ts_url + "/machines/");
42+
var resp = getValue(ts_url + "/machines/", 3);
4043
var machines = resp.machines;
4144
return machines.filter(function (name_ids) {
4245
return name_regexp.test(name_ids.name);
@@ -48,7 +51,7 @@
4851
var search_info = JSON.parse(tableau.connectionData);
4952
tableau.reportProgress("Getting Schema from LNT.");
5053

51-
var field_info = getValue(ts_url + "/fields/");
54+
var field_info = getValue(ts_url + "/fields/", 3);
5255
var fields = field_info.fields;
5356

5457
// Lookup machines of interest, and gather run fields.
@@ -61,7 +64,7 @@
6164
}
6265

6366
machine_infos.forEach(function (machine) {
64-
var machines_run_data = getValue(ts_url + "/machines/" + machine.id)
67+
var machines_run_data = getValue(ts_url + "/machines/" + machine.id, 3);
6568
// Grab the last run_info.
6669
// If fields were added over time, it should have the most.
6770
var final_run_info = machines_run_data.runs[machines_run_data.runs.length - 1];
@@ -197,7 +200,7 @@
197200
var submission_batch_size = 10000;
198201
var total_fetched = 1;
199202
machine_names.forEach(function (machine) {
200-
var machines_run_data = getValue(ts_url + "/machines/" + machine.id)
203+
var machines_run_data = getValue(ts_url + "/machines/" + machine.id, 3);
201204

202205
machines_run_data.runs.forEach(function(run_info){
203206
// Incremental support.
@@ -257,7 +260,7 @@
257260
tableau.reportProgress(status_msg);
258261
}
259262

260-
run_data = getValue(ts_url + "/runs/" + run_id);
263+
run_data = getValue(ts_url + "/runs/" + run_id, 3);
261264

262265
run_data.tests.forEach(function (element) {
263266
element.test_name = element.name;

0 commit comments

Comments
 (0)