Skip to content

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

Closed

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.

Activity

  1. added this to the 3.0 milestone on Aug 29, 2019
  2. changed the title [-]3.x: Change the behavior Flowable.groupBy to signal MBE if no main requests[/-] [+]3.x: Change the behavior of Flowable.groupBy to signal MBE if no main requests[/+] on Aug 29, 2019
  3. akarnokd commented on Oct 20, 2019

    @akarnokd
    MemberAuthor

    This is a tough one. Many tests break because of the non-consumed groups or hang because of request management issues. I'll have to rework the tests and come up with the correct request management logic.

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions