Product Information
Retry Handling in SuccessFactors OData V2 Adapter for SAP Cloud Integration
SAP Cloud Integration’s SuccessFactors OData V2 adapter (version 1.8 onwards) provides you a feature to handle network issues in case of outbound connections. In the adapter specific settings, there is a checkbox, Retry on Failure, that you can enable to use this feature. When you enable this feature, the adapter inherently retries connecting to the SuccessFactors service in case of specific HTTP errors. This process is executed every three minutes, for a maximum of five times. If the connection fails even after five retries, the integration flow message processing status will display Failed.
The Retry on Failure option is available only in case of data fetch operations, i.e. Query (GET) for SuccessFactors OData V2 adapter. |
You can check the component version for any component in SAP Cloud Integration by selecting the component and choosing the ‘i’ (info) icon.
Retry Handling Explained
The SuccessFactors OData V2 adapter tries to establish a HTTP connection to the SuccessFactors system. If you have selected the Retry on Failure checkbox in the adapter specific settings, the adapter will retry to establish a failed connection in case of the following HTTP errors:
- HTTP 502 (Bad Gateway)
- HTTP 503 (Service Unavailable)
- HTTP 504 (Gateway Timeout)
Please note that the retry option is applicable only for establishing the outbound connectivity from the adapter and not for the complete message processing.
Example Scenario
Consider the following scenario where we are trying to fetch data from a SuccessFactors OData service.
In the Adapter Specific setting, the Retry on Failure option is enabled to ensure that the adapter will retry establishing outbound connectivity in case it encounters one of the three HTTP error codes mentioned above. Please note that the retry option is displayed only if you select the Query(GET) operation in Operation Details.
After successfully deploying the integration flow, if the service has network issues, the adapter will try to reestablish the outbound connection to the SuccessFactors system every three minutes for a maximum of five times.
Let us assume that the service is returning the HTTP status 502 (Bad Gateway). Here’s an excerpt of the message processing log (MPL). The URI parameter has been masked in this excerpt for security reasons.
Message Processing Log:
StartTime = Mon Jan 22 05:27:48.917 UTC 2018
StopTime = Mon Jan 22 05:42:49.405 UTC 2018
OverallStatus = FAILED
ChildCount = 0
ChildrenCounter = 42
ContextName = Retry_Blog
CorrelationId = AFpldlRnkK5PDu-Rbrqd4wQXwj1_
IntermediateError = true
..
...
....
.....
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:27:49.261 UTC 2018
ChildCount = 15
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516598869261
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:27:49.265 UTC 2018
ChildCount = 16
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 1 of 5 will be triggered in 3 minutes. Current time: Mon Jan 22 05:27:49 UTC 2018
StepId = to353#1516598869265
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:27:49.265 UTC 2018
ChildCount = 17
ModelStepId = ServiceTask_4
Retry Status = Thread waiting for next retry..........
StepId = to353#1516598869265
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:30:49.266 UTC 2018
ChildCount = 18
ModelStepId = ServiceTask_4
Retry Status = Thread resumed for retry.
StepId = to353#1516599049266
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:30:49.266 UTC 2018
ChildCount = 19
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 1 triggered at Mon Jan 22 05:30:49 UTC 2018
StepId = to353#1516599049266
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:30:49.301 UTC 2018
ChildCount = 20
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516599049301
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:30:49.301 UTC 2018
ChildCount = 21
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 2 of 5 will be triggered in 3 minutes. Current time: Mon Jan 22 05:30:49 UTC 2018
StepId = to353#1516599049302
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:30:49.302 UTC 2018
ChildCount = 22
ModelStepId = ServiceTask_4
Retry Status = Thread waiting for next retry..........
StepId = to353#1516599049302
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:33:49.302 UTC 2018
ChildCount = 23
ModelStepId = ServiceTask_4
Retry Status = Thread resumed for retry.
StepId = to353#1516599229302
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:33:49.302 UTC 2018
ChildCount = 24
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 2 triggered at Mon Jan 22 05:33:49 UTC 2018
StepId = to353#1516599229302
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:33:49.325 UTC 2018
ChildCount = 25
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516599229325
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:33:49.326 UTC 2018
ChildCount = 26
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 3 of 5 will be triggered in 3 minutes. Current time: Mon Jan 22 05:33:49 UTC 2018
StepId = to353#1516599229326
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:33:49.326 UTC 2018
ChildCount = 27
ModelStepId = ServiceTask_4
Retry Status = Thread waiting for next retry..........
StepId = to353#1516599229326
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:36:49.326 UTC 2018
ChildCount = 28
ModelStepId = ServiceTask_4
Retry Status = Thread resumed for retry.
StepId = to353#1516599409326
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:36:49.326 UTC 2018
ChildCount = 29
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 3 triggered at Mon Jan 22 05:36:49 UTC 2018
StepId = to353#1516599409326
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:36:49.349 UTC 2018
ChildCount = 30
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516599409349
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:36:49.350 UTC 2018
ChildCount = 31
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 4 of 5 will be triggered in 3 minutes. Current time: Mon Jan 22 05:36:49 UTC 2018
StepId = to353#1516599409350
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:36:49.350 UTC 2018
ChildCount = 32
ModelStepId = ServiceTask_4
Retry Status = Thread waiting for next retry..........
StepId = to353#1516599409350
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:39:49.350 UTC 2018
ChildCount = 33
ModelStepId = ServiceTask_4
Retry Status = Thread resumed for retry.
StepId = to353#1516599589350
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:39:49.350 UTC 2018
ChildCount = 34
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 4 triggered at Mon Jan 22 05:39:49 UTC 2018
StepId = to353#1516599589350
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:39:49.374 UTC 2018
ChildCount = 35
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516599589374
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:39:49.374 UTC 2018
ChildCount = 36
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 5 of 5 will be triggered in 3 minutes. Current time: Mon Jan 22 05:39:49 UTC 2018
StepId = to353#1516599589375
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:39:49.375 UTC 2018
ChildCount = 37
ModelStepId = ServiceTask_4
Retry Status = Thread waiting for next retry..........
StepId = to353#1516599589375
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:42:49.375 UTC 2018
ChildCount = 38
ModelStepId = ServiceTask_4
Retry Status = Thread resumed for retry.
StepId = to353#1516599769375
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:42:49.375 UTC 2018
ChildCount = 39
ModelStepId = ServiceTask_4
Retry Status = Retry attempt 5 triggered at Mon Jan 22 05:42:49 UTC 2018
StepId = to353#1516599769375
SuccessFactors OData V2 Adapter Retry:
StartTime = Mon Jan 22 05:42:49.393 UTC 2018
ChildCount = 40
ModelStepId = ServiceTask_4
Response Status = Response Status for URI XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX is HTTP/1.1 502 Bad Gateway
StepId = to353#1516599769393
Exchange ID-vsa3644936-51618-1516596501297-93-2 failed:
StartTime = Mon Jan 22 05:42:49.399 UTC 2018
Status = FAILED
ChildCount = 41
ModelStepId = TimerEventDefinition_53201
The MPL indicates that the first retry is initiated by the Retry Status that states “Retry attempt 1 of 5 will be triggered in 3 minutes.” This process is repeated 5 times (you can see the message in Retry Status tag reflecting the retry number and time of retry). In this scenario, even after five retry attempts, the adapter is unable to reestablish the outbound connection. Consequently, the ‘Status’ in the last MPL entry indicates ‘FAILED’.
Summary
The Retry on Failure feature is provided to handle network issues that might occur in case of outbound connections. This feature is available in SuccessFactors OData V2 adapter version 1.8 onwards.
The similar feature is also available in SuccessFactors SOAP adapter.
Well studied blog is presented here; it carries explained information that helps the readers with every detail about the subject.
Hi Deepak,
Thanks for nice blog.
I checked SAP updates regarding this "Retry on Failure" feature for SuccessFactor adapter.
I would like to mention that this feature is available for SuccessFactor OData V2 adapter and as well for SuccessFactor SOAP adapter.
Regards,
Deva
Hi Deva,
Yes, it is available for SuccessFactors SOAP adapter. I have updated the Summary section of the blog.
Thanks for the input
Thanks,
Deepak
The checkbox for 'Retry on Failure' is no longer available in CPI WebUI.
Hi Arnab,
In the updated version of SAP Cloud Platform Integration, the retry checkbox has been moved to Processing tab as show in the below screenshot.
Thanks
Deepak
Hi, Deepak,
Would you please read the following notes ? For normal odata adapter, there is no parameter retry on failure . But it seems CPI will retry after time out failure . Is there any document about how many time CPI will try after time out failure ?
https://launchpad.support.sap.com/#/notes/2931385
Best regards!
Jacky Liu
Hi Jacky Liu,
I am checking with SAP S/4HANA team and I will get back to you and share the updates.
Thanks
Deepak
Hi Jacky Liu,
The SAP Note https://launchpad.support.sap.com/#/notes/2931385 has been corrected. The CPI generic/normal OData adapter doesn't retry.
Thanks
Deepak
Hi, Deepak,
Thank for your investigating ! CPI will not retry to call odata api again if the odata api call exceed time out limit automatically . Only when customer generate another odata call in iflow after odata api call exceed time out limit , the s4hc system will create duplicate SO . So it is not a system bug, it is customer's wrong practice . As my understanding .
Best regards!
Jacky Liu
Hi Deepak G Deshpande
You mentioned that the generic OData adapter does not retry. Though it implements it, I suppose.
If I download a bundle using Success Factors adapter, it uses a <camel:to uri="odata:... in its blueprint. The same is true for generic OData except that we cannot enable retryOnFailure.
Is there a special reason to hide this functionality?
When we send OData to the Marketing Cloud reusing the HTTP session over several calls to not fetch an CSRF token all the time, we get 403 if the token is expired.
From my point of view this is an adapter concern and we should not be forced to handle that within the integration flow.
Standard I-flows btw. report those 403 responses back to the caller.
Edit: In MPL I have seen it already fetches a new token on 403 but it seems the validation uses the session cookie rather than CSRF token. I suspect the session cookie should also be cleared if CSRF token becomes invalid.
Regards!
Uwe
Hi Uwe,
The SuccessFactors connector is built as application connector where we have a defined technical agreements between SuccessFactors connector and SuccessFactors system, with which, we decided on handling the retry on agreed HTTP response codes.
But, for generic OData adapter, which can be used with any OData service, it would be difficult to handle the retry at a back-end odata system. Hence, this functionality is not available in the generic odata receiver adapter.
-Thanks
Deepak
Do you know how the retry on failure works with error 429 ?
i m trying to figure out if it can be a solution for api limit :
https://help.sap.com/doc/62fddbd651204629b46bbccbabf886ba/cloud/en-US/df1b16f4a61e4423a85d3ce6c598be88.html
or it will also be impacted in case of high query frequency
Hi Phillippe,
Retry handling for SuccessFactors HTTP code 429 has been enabled in SAP Cloud Integration SuccessFactors OData v2 adapter from the March 2022 release. SuccessFactors OData v2 adapter will internally trigger the retry, for interval of every 3 minutes, for max 5 iterations/attempts of retry.
Hope this information helps.
Thanks
Deepak