3.x: Change the behavior of Flowable.groupBy to signal MBE if no main requests · Issue #6641 · ReactiveX/RxJava (original) (raw)

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.