1
0
mirror of https://github.com/sasjs/adapter.git synced 2026-01-18 09:30:06 +00:00

fix: retry requests with API approach

This commit is contained in:
Mihajlo Medjedovic
2020-07-30 00:43:12 +02:00
parent fb02c77a3a
commit 4422c37827

View File

@@ -49,6 +49,8 @@ export default class SASjs {
private loginUrl: string = ""; private loginUrl: string = "";
private csrfToken: CsrfToken | null = null; private csrfToken: CsrfToken | null = null;
private retryCount: number = 0; private retryCount: number = 0;
private retryCountComputeApi: number = 0;
private retryCountJeseApi: number = 0;
private sasjsRequests: SASjsRequest[] = []; private sasjsRequests: SASjsRequest[] = [];
private sasjsWaitingRequests: SASjsWaitingRequest[] = []; private sasjsWaitingRequests: SASjsWaitingRequest[] = [];
private userName: string = ""; private userName: string = "";
@@ -409,6 +411,8 @@ export default class SASjs {
loginRequiredCallback, loginRequiredCallback,
accessToken accessToken
); );
this.retryCountComputeApi = 0;
} else { } else {
requestResponse = await this.executeJobViaJesApi( requestResponse = await this.executeJobViaJesApi(
sasJob, sasJob,
@@ -417,6 +421,8 @@ export default class SASjs {
loginRequiredCallback, loginRequiredCallback,
accessToken accessToken
); );
this.retryCountJeseApi = 0;
} }
} else { } else {
requestResponse = await this.executeJobViaWeb( requestResponse = await this.executeJobViaWeb(
@@ -510,36 +516,54 @@ export default class SASjs {
sasjsWaitingRequest.requestPromise.promise = new Promise( sasjsWaitingRequest.requestPromise.promise = new Promise(
async (resolve, reject) => { async (resolve, reject) => {
resolve( this.sasViyaApiClient
await this.sasViyaApiClient ?.executeComputeJob(
?.executeComputeJob( sasJob,
sasJob, config.contextName,
config.contextName, config.debug,
config.debug, data,
data, accessToken
accessToken )
) .then((response) => {
.then((response) => { if (!config.debug) {
if (!config.debug) { this.appendSasjsRequest(null, sasJob, null);
this.appendSasjsRequest(null, sasJob, null); } else {
this.appendSasjsRequest(response, sasJob, null);
}
resolve(JSON.parse(response!.result));
})
.catch(async (e) => {
if (needsRetry(JSON.stringify(e))) {
if (this.retryCountComputeApi < requestRetryLimit) {
let retryResponse = await this.executeJobViaComputeApi(
sasJob,
data,
config,
loginRequiredCallback,
accessToken
);
this.retryCountComputeApi++;
resolve(retryResponse);
} else { } else {
this.appendSasjsRequest(response, sasJob, null); this.retryCountComputeApi = 0;
reject({ MESSAGE: "Compute API retry requests limit reached" });
} }
return JSON.parse(response!.result); }
})
.catch((e) => { if (e && e.status === 401) {
if (e && e.status === 401) { if (loginRequiredCallback) loginRequiredCallback(true);
if (loginRequiredCallback) loginRequiredCallback(true); sasjsWaitingRequest.requestPromise.resolve = resolve;
sasjsWaitingRequest.requestPromise.resolve = resolve; sasjsWaitingRequest.requestPromise.reject = reject;
sasjsWaitingRequest.requestPromise.reject = reject; sasjsWaitingRequest.config = config;
sasjsWaitingRequest.config = config; this.sasjsWaitingRequests.push(sasjsWaitingRequest);
this.sasjsWaitingRequests.push(sasjsWaitingRequest); } else {
} else { reject({ MESSAGE: e || "Job execution failed" });
reject({ MESSAGE: e || "Job execution failed" }); }
} })
}) }
);
}
); );
return sasjsWaitingRequest.requestPromise.promise; return sasjsWaitingRequest.requestPromise.promise;
} }
@@ -589,9 +613,28 @@ export default class SASjs {
} }
return JSON.parse(response!.result); return JSON.parse(response!.result);
}) })
.catch((e) => .catch(async (e) => {
if (needsRetry(JSON.stringify(e))) {
if (this.retryCountJeseApi < requestRetryLimit) {
let retryResponse = await this.executeJobViaJesApi(
sasJob,
data,
config,
loginRequiredCallback,
accessToken
);
this.retryCountJeseApi++;
resolve(retryResponse);
} else {
this.retryCountJeseApi = 0;
reject({ MESSAGE: "Jes API retry requests limit reached" });
}
}
reject({ MESSAGE: (e && e.message) || "Job execution failed" }) reject({ MESSAGE: (e && e.message) || "Job execution failed" })
) })
); );
} }
} }