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:
103
src/SASjs.ts
103
src/SASjs.ts
@@ -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" })
|
||||||
)
|
})
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user