Skip to content

Add mechanism for exporters to signal backpressure to callers #8831

Description

@jack-berg

Right now, our processors (BSP, BLRP, PMR) call exporters (SpanExporter, LogRecordExporter, MetricExporter) and wait for resulting CompletableResultCode to complete before calling again. This is meant to be protective of exporters: There's no guarantee that an exporter is written in such a way that it can handle the load of many concurrent calls to export. A well written exporter would respond immediately with CompletableResultCodes so long as it has extra concurrent processing capacity, and block calls to export when its capacity is full.

Since we can't ensure all exporters are written with this in mind, we take the conservative approach and do not call them concurrently.

But this limits the throughput of exporters that are written to be able to handle concurrent export calls while signalling backpressure to callers.

Let's adjust our exporter contracts so that they can signal to callers what types of concurrent / backpressure capabilities they have, such that BSP, BLRP, PMR can call export concurrently on exporters that advertise that capability.

This is related to #7099, #4264, but a specific implementation recommendation based improving exporters to be able to opt into concurrent invocation by BSP, BLRP, PMR.

cc @trask

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Feature RequestSuggest an idea for this project

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions