Skip to content

SendUtils onDiscard handler class cast exception #1077

@Svenskunganka

Description

@Svenskunganka

I'm using RSocket Java with Spring Webflux and RSocket JS in the front-end, using REQUEST_STREAM with an infinite Kafka source. The returned Flux receives quite a lot of small messages and does quite a bit of filtering and buffering. The relevant code in SendUtils does an unchecked cast of each discarded object to a ReferenceCounted which seems to throw a class cast exception that is caught and ignored.
The problem is that due to the sheer amount of objects being discarded (due to filtering and discarded buffers on disconnect), this uses up a substantial amount of CPU resources looking at the profiler.

profiler

The returned Fluxes are scheduled on Schedulers.boundedElastic(), and for some reason entire threads are started up just for this exception:
flamegraph

Expected Behavior

Not use up so much CPU resources

Actual Behavior

Uses a lot of CPU resources

Steps to Reproduce

Possible Solution

Not exactly sure, but perhaps an instanceof check:

if (data instanceof ReferenceCounted) ((ReferenceCounted) data).release();

Your Environment

  • RSocket version(s) used: rsocket-core:1.1.3, rsocket-transport-netty:1.1.3
  • Other relevant libraries versions (eg. netty, ...): Spring Webflux 5.3.23
  • Platform (eg. JVM version (javar -version) or Node version (node --version)): 17
  • OS and version (eg uname -a): Happens on all tested platforms (Debian, Mac)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions