mirror of
https://github.com/sasjs/adapter.git
synced 2025-12-11 01:14:36 +00:00
fix: retry requests with API approach
This commit is contained in:
103
src/SASjs.ts
103
src/SASjs.ts
@@ -49,6 +49,8 @@ export default class SASjs {
|
||||
private loginUrl: string = "";
|
||||
private csrfToken: CsrfToken | null = null;
|
||||
private retryCount: number = 0;
|
||||
private retryCountComputeApi: number = 0;
|
||||
private retryCountJeseApi: number = 0;
|
||||
private sasjsRequests: SASjsRequest[] = [];
|
||||
private sasjsWaitingRequests: SASjsWaitingRequest[] = [];
|
||||
private userName: string = "";
|
||||
@@ -409,6 +411,8 @@ export default class SASjs {
|
||||
loginRequiredCallback,
|
||||
accessToken
|
||||
);
|
||||
|
||||
this.retryCountComputeApi = 0;
|
||||
} else {
|
||||
requestResponse = await this.executeJobViaJesApi(
|
||||
sasJob,
|
||||
@@ -417,6 +421,8 @@ export default class SASjs {
|
||||
loginRequiredCallback,
|
||||
accessToken
|
||||
);
|
||||
|
||||
this.retryCountJeseApi = 0;
|
||||
}
|
||||
} else {
|
||||
requestResponse = await this.executeJobViaWeb(
|
||||
@@ -510,36 +516,54 @@ export default class SASjs {
|
||||
|
||||
sasjsWaitingRequest.requestPromise.promise = new Promise(
|
||||
async (resolve, reject) => {
|
||||
resolve(
|
||||
await this.sasViyaApiClient
|
||||
?.executeComputeJob(
|
||||
sasJob,
|
||||
config.contextName,
|
||||
config.debug,
|
||||
data,
|
||||
accessToken
|
||||
)
|
||||
.then((response) => {
|
||||
if (!config.debug) {
|
||||
this.appendSasjsRequest(null, sasJob, null);
|
||||
this.sasViyaApiClient
|
||||
?.executeComputeJob(
|
||||
sasJob,
|
||||
config.contextName,
|
||||
config.debug,
|
||||
data,
|
||||
accessToken
|
||||
)
|
||||
.then((response) => {
|
||||
if (!config.debug) {
|
||||
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 {
|
||||
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 (loginRequiredCallback) loginRequiredCallback(true);
|
||||
sasjsWaitingRequest.requestPromise.resolve = resolve;
|
||||
sasjsWaitingRequest.requestPromise.reject = reject;
|
||||
sasjsWaitingRequest.config = config;
|
||||
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
|
||||
} else {
|
||||
reject({ MESSAGE: e || "Job execution failed" });
|
||||
}
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (e && e.status === 401) {
|
||||
if (loginRequiredCallback) loginRequiredCallback(true);
|
||||
sasjsWaitingRequest.requestPromise.resolve = resolve;
|
||||
sasjsWaitingRequest.requestPromise.reject = reject;
|
||||
sasjsWaitingRequest.config = config;
|
||||
this.sasjsWaitingRequests.push(sasjsWaitingRequest);
|
||||
} else {
|
||||
reject({ MESSAGE: e || "Job execution failed" });
|
||||
}
|
||||
})
|
||||
}
|
||||
);
|
||||
return sasjsWaitingRequest.requestPromise.promise;
|
||||
}
|
||||
@@ -589,9 +613,28 @@ export default class SASjs {
|
||||
}
|
||||
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" })
|
||||
)
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user