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) {
|
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
|
// returns a 500 if does not exist
|
||||||
// v1 = 204
|
// v1 = 204
|
||||||
|
|
@ -1483,7 +1503,27 @@ class FreeNASApiDriver extends CsiBaseDriver {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (deleteAsset) {
|
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
|
// returns a 500 if does not exist
|
||||||
// v1 = 204
|
// v1 = 204
|
||||||
|
|
|
||||||
|
|
@ -86,6 +86,12 @@ class Client {
|
||||||
httpAgent: this.getHttpAgent(),
|
httpAgent: this.getHttpAgent(),
|
||||||
httpsAgent: this.getHttpsAgent(),
|
httpsAgent: this.getHttpsAgent(),
|
||||||
timeout: 60 * 1000,
|
timeout: 60 * 1000,
|
||||||
|
validateStatus: function (status) {
|
||||||
|
if (status >= 500) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
if (client.options.apiKey) {
|
if (client.options.apiKey) {
|
||||||
|
|
|
||||||
|
|
@ -1450,7 +1450,27 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (deleteAsset) {
|
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
|
// returns a 500 if does not exist
|
||||||
// v1 = 204
|
// v1 = 204
|
||||||
|
|
@ -1532,7 +1552,27 @@ class FreeNASSshDriver extends ControllerZfsBaseDriver {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (deleteAsset) {
|
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
|
// returns a 500 if does not exist
|
||||||
// v1 = 204
|
// v1 = 204
|
||||||
|
|
|
||||||
|
|
@ -140,7 +140,16 @@ function axios_request(options, callback = function () {}) {
|
||||||
// The request was made and the server responded with a status code
|
// The request was made and the server responded with a status code
|
||||||
// that falls out of the range of 2xx
|
// that falls out of the range of 2xx
|
||||||
let res = prep_response(err.response);
|
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) {
|
} else if (err.request) {
|
||||||
// The request was made but no response was received
|
// The request was made but no response was received
|
||||||
// `error.request` is an instance of XMLHttpRequest in the browser and an instance of
|
// `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 maxwait = _.get(options, "maxwait");
|
||||||
let logerrors = _.get(options, "logerrors", false);
|
let logerrors = _.get(options, "logerrors", false);
|
||||||
let retryCondition = options.retryCondition;
|
let retryCondition = options.retryCondition;
|
||||||
|
let executeStartTime;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
current_try++;
|
current_try++;
|
||||||
try {
|
try {
|
||||||
|
executeStartTime = Date.now();
|
||||||
return await code();
|
return await code();
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
if (current_try >= retries) {
|
if (current_try >= retries) {
|
||||||
|
|
@ -202,6 +214,16 @@ async function retry(retries, retriesDelay, code, options = {}) {
|
||||||
console.log(`retry - err:`, err);
|
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;
|
let sleep_time = retriesDelay;
|
||||||
if (_.get(options, "exponential", false) === true) {
|
if (_.get(options, "exponential", false) === true) {
|
||||||
sleep_time = retriesDelay * current_try;
|
sleep_time = retriesDelay * current_try;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue