question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Operator called default onErrorDropped on rsocket dispose

See original GitHub issue

After introduce RSocket Java SDK from 1.1.0 to 1.1.1, a simple server will throw exception after client disconnected.

public class RSocketResponderApp {
    public static void main(String[] args) throws Exception {
        CloseableChannel closeableChannel = RSocketServer.create()
                .acceptor((setup, sendingSocket) -> {
                    return Mono.just(new RSocket() {
                        @Override
                        public Mono<Payload> requestResponse(Payload payload) {
                            return Mono.just(payload);
                        }
                    });
                })
                .bind(TcpServerTransport.create("0.0.0.0", 42252))
                .block();
        System.out.println("RSocket responder is listening on 42252!");
        closeableChannel.onClose().block();
    }
}

Exception on server side by rsc --request --route=xxxx --data=Foo --debug tcp://localhost:42252

15:42:58.383 [ERROR] r.c.p.Operators - Operator called default onErrorDropped
java.util.concurrent.CancellationException: Disposed
	at io.rsocket.internal.UnboundedProcessor.dispose(UnboundedProcessor.java:550)
	at io.rsocket.transport.netty.TcpDuplexConnection.doOnClose(TcpDuplexConnection.java:67)
	at io.rsocket.internal.BaseDuplexConnection.lambda$new$0(BaseDuplexConnection.java:30)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.runFinally(FluxDoFinally.java:163)
	at reactor.core.publisher.FluxDoFinally$DoFinallySubscriber.onComplete(FluxDoFinally.java:146)
	at reactor.core.publisher.SinkEmptyMulticast$VoidInner.onComplete(SinkEmptyMulticast.java:227)
	at reactor.core.publisher.SinkEmptyMulticast.tryEmitEmpty(SinkEmptyMulticast.java:70)
	at reactor.core.publisher.SinkEmptySerialized.tryEmitEmpty(SinkEmptySerialized.java:43)
	at io.rsocket.internal.BaseDuplexConnection.dispose(BaseDuplexConnection.java:51)
	at io.rsocket.transport.netty.TcpDuplexConnection.lambda$new$0(TcpDuplexConnection.java:49)
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571)
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550)
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491)
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616)
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605)
	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84)
	at io.netty.channel.AbstractChannel$CloseFuture.setClosed(AbstractChannel.java:1186)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.doClose0(AbstractChannel.java:773)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:749)
	at io.netty.channel.AbstractChannel$AbstractUnsafe.close(AbstractChannel.java:620)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.closeOnRead(AbstractNioByteChannel.java:105)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:174)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.lang.Thread.run(Thread.java:748)
Wrapped by: reactor.core.Exceptions$ErrorCallbackNotImplemented: java.util.concurrent.CancellationException: Disposed

On the requester’s side, after rsocket.dispose() and above exception will be thrown.

Issue Analytics

  • State:closed
  • Created 2 years ago
  • Reactions:12
  • Comments:11 (7 by maintainers)

github_iconTop GitHub Comments

11reactions
linux-chinacommented, Jun 10, 2021

I think it’s some noisy. If a new guy wants to try the demo, and he will think the exception as error. Even we have the document about Hooks.onErrorDropped(() -> {}) and I think he will not try to check the document.

6reactions
OlegDokukacommented, Feb 20, 2022

it is fixed with 1.1.2 wich is not yet released

Read more comments on GitHub >

github_iconTop Results From Across the Web

"Operator called default onErrorDropped" on Mono timeout
Question: Why does this error happen? Answer: When the duration given to the timeout() operator has passed, it throws a TimeoutException.
Read more >
Developers - RSocket Java SDK 1.1.1: Operator called default ...
After introduce RSocket Java SDK from 1.1.0 to 1.1.1, a simple server will throw exception after client disconnected.
Read more >
reactor/reactor-netty - Gitter
Hi Guys. I am using spring-cloud-gateway (Greenwich.RELEASE) and reactor-netty (version 0.8.6). I need to add extra fields to "netty access logs" like ...
Read more >
Rsocket Over Websocket Reactor.Core.Exceptions ... - ADocLib
Operators Operator called default onErrorDropped reactor.core.ExceptionsErrorCallbackNotImplemented: java.util.concurrent.CancellationException: Disposed.
Read more >
Operator called default onErrorDropped when document not ...
Hi there, I'm migrating SDK 2 in my project to Java SDK 3. (3.0.3) My code looks like this: collection.getAndTouch(k, Duration.
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found