I have a question. I’ve implemented an Event_UploadPDF handler, and I’m getting this error:
OS-BERT-ELR-61302 - Error executing action. Running this action's custom code has exceeded the timeout limit of 95 seconds.
My understanding is that events in ODC are asynchronous by nature, so the user doesn’t have to wait, and retries should be possible. From what I’ve found, when an event handler times out or fails, ODC automatically retries it using an exponential backoff policy (up to 10 retries by default). In my case it’s also an event, so why isn’t ODC retrying it?
Do we need to implement the retry ourselves? If manual retry is required in this case, could you suggest a pattern for implementing it?
You’re right about how ODC Events behave in general—but the key detail is where and how your handler is being executed.
From the error:
this looks like a server action timeout (synchronous execution), not an asynchronous event handler execution.
Events in ODC are:
Server actions called directly from UI/client actions:
Your error strongly suggests that Event_UploadPDF (or code inside it) is being executed as a normal server action on a synchronous request, not as an asynchronous event handler instance.
Event_UploadPDF
The automatic retry behavior applies only to event handler executions started by the Event queue, not to:
In that case, when the handler (or its custom code) exceeds the timeout, the platform aborts the request and throws the timeout error, without retry, because from the platform’s perspective it’s just a long-running synchronous server call.
So, although the logic is inside an “event handler” module/action, if it’s being invoked like a regular server action as part of a request, the event runtime / event queue is not involved, and therefore no event retries occur. Events in ODC
To leverage event semantics and automatic retries:
Trigger an Event from a short server action:
Move the heavy processing into the Event handler:
Ensure you’re not calling the handler synchronously:
Client/UI flow:
Event handler logic (Event_UploadPDF):
If you structure it this way and still see OS-BERT-ELR-61302, it likely means that:
OS-BERT-ELR-61302
In that case, you may need to further split the processing into smaller units (chunking records, multiple smaller runs) so each handler execution stays within the timeout window.
Summary: ODC will only auto‑retry when your code is executed as an actual event handler instance from the event queue. If the same logic is being run as a normal synchronous server action (which your error indicates), it’s subject to server action timeout limits and won’t be retried. Trigger a lightweight Event from your upload flow and place the heavy PDF processing exclusively in the event handler to get the asynchronous + retry behavior.
The error isn’t the event handler’s own timeout. It’s the 95 seconds limit for external logic (custom code), and that limit is the same inside an event handler. So your handler most likely did run from the event queue.
About the retry: if your handler flow has an exception handler (AllExceptions or similar) that catches this error, the handler finishes normally from the platform’s point of view, so there is nothing to retry. That’s the first thing I would check.
If you want a retry you control, keep a status and an attempt counter per document. When you catch the timeout, increase the counter and trigger the event again, or let a timer pick up the failed ones, until it reaches a max number of attempts. After that, mark it as failed so someone can look at it.