more complete usage of retry logic
Signed-off-by: Travis Glenn Hansen <travisghansen@yahoo.com>
This commit is contained in:
parent
2032c67be0
commit
466845cbd9
|
|
@ -1402,7 +1402,27 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
|||
});
|
||||
|
||||
if (deleteAsset) {
|
||||
response = await httpClient.delete(endpoint);
|
||||
response = await GeneralUtils.retry(
|
||||
3,
|
||||
1000,
|
||||
async () => {
|
||||
return await httpClient.delete(endpoint);
|
||||
},
|
||||
{
|
||||
retryCondition: (err) => {
|
||||
if (err.code == "ECONNRESET") {
|
||||
return true;
|
||||
}
|
||||
if (err.code == "ECONNABORTED") {
|
||||
return true;
|
||||
}
|
||||
if (err.response && err.response.statusCode == 504) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// returns a 500 if does not exist
|
||||
// v1 = 204
|
||||
|
|
@ -1483,7 +1503,27 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
|||
});
|
||||
|
||||
if (deleteAsset) {
|
||||
response = await httpClient.delete(endpoint);
|
||||
response = await GeneralUtils.retry(
|
||||
3,
|
||||
1000,
|
||||
async () => {
|
||||
return await httpClient.delete(endpoint);
|
||||
},
|
||||
{
|
||||
retryCondition: (err) => {
|
||||
if (err.code == "ECONNRESET") {
|
||||
return true;
|
||||
}
|
||||
if (err.code == "ECONNABORTED") {
|
||||
return true;
|
||||
}
|
||||
if (err.response && err.response.statusCode == 504) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// returns a 500 if does not exist
|
||||
// v1 = 204
|
||||
|
|
|
|||
|
|
@ -86,6 +86,12 @@ class Client {
|
|||
httpAgent: this.getHttpAgent(),
|
||||
httpsAgent: this.getHttpsAgent(),
|
||||
timeout: 60 * 1000,
|
||||
validateStatus: function (status) {
|
||||
if (status >= 500) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
};
|
||||
|
||||
if (client.options.apiKey) {
|
||||
|
|
|
|||
|
|
@ -1450,7 +1450,27 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
|||
});
|
||||
|
||||
if (deleteAsset) {
|
||||
response = await httpClient.delete(endpoint);
|
||||
response = await GeneralUtils.retry(
|
||||
3,
|
||||
1000,
|
||||
async () => {
|
||||
return await httpClient.delete(endpoint);
|
||||
},
|
||||
{
|
||||
retryCondition: (err) => {
|
||||
if (err.code == "ECONNRESET") {
|
||||
return true;
|
||||
}
|
||||
if (err.code == "ECONNABORTED") {
|
||||
return true;
|
||||
}
|
||||
if (err.response && err.response.statusCode == 504) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// returns a 500 if does not exist
|
||||
// v1 = 204
|
||||
|
|
@ -1532,7 +1552,27 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
|||
});
|
||||
|
||||
if (deleteAsset) {
|
||||
response = await httpClient.delete(endpoint);
|
||||
response = await GeneralUtils.retry(
|
||||
3,
|
||||
1000,
|
||||
async () => {
|
||||
return await httpClient.delete(endpoint);
|
||||
},
|
||||
{
|
||||
retryCondition: (err) => {
|
||||
if (err.code == "ECONNRESET") {
|
||||
return true;
|
||||
}
|
||||
if (err.code == "ECONNABORTED") {
|
||||
return true;
|
||||
}
|
||||
if (err.response && err.response.statusCode == 504) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
// returns a 500 if does not exist
|
||||
// v1 = 204
|
||||
|
|
|
|||
|
|
@ -140,7 +140,16 @@ function axios_request(options, callback = function () {}) {
|
|||
// The request was made and the server responded with a status code
|
||||
// that falls out of the range of 2xx
|
||||
let res = prep_response(err.response);
|
||||
callback(null, res, res.body);
|
||||
let senderr = false;
|
||||
if (
|
||||
options.validateStatus &&
|
||||
typeof options.validateStatus == "function"
|
||||
) {
|
||||
if (!options.validateStatus(res.statusCode)) {
|
||||
senderr = true;
|
||||
}
|
||||
}
|
||||
callback(senderr ? err : null, res, res.body);
|
||||
} else if (err.request) {
|
||||
// The request was made but no response was received
|
||||
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
|
||||
|
|
@ -183,9 +192,12 @@ async function retry(retries, retriesDelay, code, options = {}) {
|
|||
let maxwait = _.get(options, "maxwait");
|
||||
let logerrors = _.get(options, "logerrors", false);
|
||||
let retryCondition = options.retryCondition;
|
||||
let executeStartTime;
|
||||
|
||||
do {
|
||||
current_try++;
|
||||
try {
|
||||
executeStartTime = Date.now();
|
||||
return await code();
|
||||
} catch (err) {
|
||||
if (current_try >= retries) {
|
||||
|
|
@ -202,6 +214,16 @@ async function retry(retries, retriesDelay, code, options = {}) {
|
|||
console.log(`retry - err:`, err);
|
||||
}
|
||||
}
|
||||
// handle minExecutionTime
|
||||
if (options.minExecutionTime > 0) {
|
||||
let minDelayTime =
|
||||
options.minExecutionTime - (Date.now() - executeStartTime);
|
||||
if (minDelayTime > 0) {
|
||||
await sleep(minDelayTime);
|
||||
}
|
||||
}
|
||||
|
||||
// handle delay
|
||||
let sleep_time = retriesDelay;
|
||||
if (_.get(options, "exponential", false) === true) {
|
||||
sleep_time = retriesDelay * current_try;
|
||||
|
|
|
|||
Loading…
Reference in New Issue