Skip to content

3.x: Change the behavior of Flowable.groupBy to signal MBE if no main requests #6641

Closed
@akarnokd

Description

@akarnokd

Currently, the Flowable.groupBy queues up groups until the downstream requests more groups. Unfortunately, this can lead to hangs because if there are more groups than requested, active groups may starve out as they don't trigger replenishments or those replenishments result in more groups to be created. Example:

Flowable.range(1, 1000)
.groupBy(v -> v)
.flatMap(v -> v, 16)
.test()
.assertValueCount(1000)
.assertComplete();

This case works if flatMap's concurrency level is greater or equal to the expected group count.

I propose changing the Flowable.groupBy operator to signal MissingBackpressureException if the direct downstream is not ready to receive more groups.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions