Skip to content

[Feature Request]: RequestResponseIO: Unable to configure retry Backoff parameters; defaults to unlimited retries #37198

@jigarkb

Description

@jigarkb

What would you like to happen?

Note: This is only applicable if we fix this: #37176

Problem: The RequestResponseIO transform currently hardcodes the retry backoff strategy to FluentBackoff.DEFAULT. This default strategy does not impose a limit on the number of retries or the total duration, effectively leading to unlimited retries for retryable errors (UserCodeRemoteSystemException, UserCodeTimeoutException).

Limitation: Users currently cannot override this behavior because the method responsible for configuring the backoff strategy is package-private

Impact: In production environments, unlimited retries are dangerous as they can cause pipelines to get stuck indefinitely on persistent errors or create backpressure issues. Users need the ability to define bounds

Location: https://github.com/apache/beam/blob/v2.67.0/sdks/java/io/rrio/src/main/java/org/apache/beam/io/requestresponse/RequestResponseIO.java#L225-L235

Current Code:

RequestResponseIO<RequestT, ResponseT> withBackOffSupplier(SerializableSupplier<BackOff> value) {
    return new RequestResponseIO<>(
        rrioConfiguration, callConfiguration.toBuilder().setBackOffSupplier(value).build());
  }

Suggested Fix:

public RequestResponseIO<RequestT, ResponseT> withBackOffSupplier(SerializableSupplier<BackOff> value) {
        return new RequestResponseIO<>(
                rrioConfiguration, callConfiguration.toBuilder().setBackOffSupplier(value).build());
    }

Issue Priority

Priority: 2 (default / most feature requests should be filed as P2)

Issue Components

  • Component: Python SDK
  • Component: Java SDK
  • Component: Go SDK
  • Component: Typescript SDK
  • Component: IO connector
  • Component: Beam YAML
  • Component: Beam examples
  • Component: Beam playground
  • Component: Beam katas
  • Component: Website
  • Component: Infrastructure
  • Component: Spark Runner
  • Component: Flink Runner
  • Component: Samza Runner
  • Component: Twister2 Runner
  • Component: Hazelcast Jet Runner
  • Component: Google Cloud Dataflow Runner

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions