Custom Error Handling for 429 Errors in Low-Code Connector

Summary

User is experiencing issues with 429 Errors in a low-code connector, where the default backoff strategy is insufficient and custom error handling does not override the default behavior.


Question

Hello! Trying to create a low-code connector but hitting some limits.

On a specific stream, I am getting 429 Errors (Too Many Requests), and the default Backoff Strategy (Exponential, up to 5 times) is not suitable. However, if I set up a custom error handling for 429 Errors, it does not override the default.



This topic has been created from a Slack thread to give it more visibility.
It will be on Read-Only mode here. Click here if you want
to access the original thread.

Join the conversation on Slack

['low-code-connector', '429-errors', 'custom-error-handling', 'backoff-strategy']

Don’t know if it helps - the API is this: https://apidocs.awardforce.com/|AwardForce

Hello Natik! I was able to solve the problem in the meantime. The key takeaway is that if you build Error Handlers for specific streams using the UI builder, these won’t override the default behaviours (e.g. on 429)

The workaround is to act on the YAML itself with a custom block. In this case, the block sits inside each stream and looks like this:

            response_filters:
              - action: RETRY
                http_codes:
                  - 429
                  - 500
                  - 502
                  - 504
            backoff_strategies:
              - type: ConstantBackoffStrategy
                backoff_time_in_seconds: 60```
If you compare it with the block that is created when you build the error handler using the UI, it is different and does not override the default! It looks like this:
```error_handler:
            type: CompositeErrorHandler
            error_handlers:
              - type: DefaultErrorHandler
                max_retries: 5
                response_filters:
                  - type: HttpResponseFilter
                    action: RETRY
                    http_codes:
                      - 429
                      - 500
                      - 502
                      - 504
                backoff_strategies:
                  - type: ConstantBackoffStrategy
                    backoff_time_in_seconds: 60```

And I think this is more of a bug than a feature :smile:

Don’t know if it helps - the API is this: https://apidocs.awardforce.com/|AwardForce

Hey Miguel!

The problem with error handlers in Builder is that Builder does not do retries. It will run error handlers, but if your action in the handler is exponential backoff, the Builder will not actually do it. It’s because test reads are designed to be fast, and we did not want to keep the user waiting for potentially long time while you’re backing off on rate limit (could be hours).

We will absolutely consider changing this, especially if we make Builder stream records in responses instead of waiting for all of them and presenting them together.

But for now, for you to test backoff, the easiest way is to publish the connector to your workspace and run a test sync and look at the logs. When you publish it, then at sync time backoff will be respected.

Hello Natik! I was able to solve the problem in the meantime. The key takeaway is that if you build Error Handlers for specific streams using the UI builder, these won’t override the default behaviours (e.g. on 429)

The workaround is to act on the YAML itself with a custom block. In this case, the block sits inside each stream and looks like this:

            response_filters:
              - action: RETRY
                http_codes:
                  - 429
                  - 500
                  - 502
                  - 504
            backoff_strategies:
              - type: ConstantBackoffStrategy
                backoff_time_in_seconds: 60```
If you compare it with the block that is created when you build the error handler using the UI, it is different and does not override the default! It looks like this:
```error_handler:
            type: CompositeErrorHandler
            error_handlers:
              - type: DefaultErrorHandler
                max_retries: 5
                response_filters:
                  - type: HttpResponseFilter
                    action: RETRY
                    http_codes:
                      - 429
                      - 500
                      - 502
                      - 504
                backoff_strategies:
                  - type: ConstantBackoffStrategy
                    backoff_time_in_seconds: 60```

And I think this is more of a bug than a feature :smile: