Skip to content

Add smart Rate Limiter #1101

@seratch

Description

@seratch

Now that we have a built-in retry handler for rate limited errors in v3.9, retrying a request after getting rate-limited is much easier than before.

However, getting rate-limited results in a much longer execution time as the whole operation. As a solution for this pain point, we will add a built-in traffic control layer like we do in the Java SDK: https://slack.dev/java-slack-sdk/guides/web-api-basics#rate-limits

A few points to consider for implementing this feature:

  • The module manages the amount of requests in the last minute and calculate the interval before the next API call
  • Metrics data can be in memory in most use cases but the part should be extensible to switch to other data storage (e.g., Redis)
  • As we do in the Java SDK, running the same script/app in multiple hosts should be supported.
  • For backward-compatibility, we don't turn the feature on by default. Users can enable it only when they want it.
  • Both sync and async API clients should be supported in a proper way (= don't use time.sleep in asyncio apps)
  • All API clients (Web API, Audit Logs, SCIM, Webhook) should have the functionality.

Category (place an x in each of the [ ])

  • slack_sdk.web.WebClient (sync/async) (Web API client)
  • slack_sdk.webhook.WebhookClient (sync/async) (Incoming Webhook, response_url sender)
  • slack_sdk.models (UI component builders)
  • slack_sdk.oauth (OAuth Flow Utilities)
  • slack_sdk.socket_mode (Socket Mode client)
  • slack_sdk.audit_logs (Audit Logs API client)
  • slack_sdk.scim (SCIM API client)
  • slack_sdk.rtm (RTM client)
  • slack_sdk.signature (Request Signature Verifier)

Requirements

Please read the Contributing guidelines and Code of Conduct before creating this issue or pull request. By submitting, you are agreeing to those rules.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions