Hi, an another suggestion is to give a try to the pooled drive manager instead of the simple dirve manager, here you could fine some more info: https://plc4x.apache.org/users/tools/connection-pool.html
Regards, Stefano On 16/09/2020 16:30, Stefano Bossi wrote: > Hi Vlad, > > this seems similar to a bug fixed some time ago, I am not really sure > but it worth to try to use the 0.8.0 version where this fix is present. > > You should try to build the version and here you could fine some help: > https://plc4x.apache.org/developers/index.html > > Regards, > Stefano > > On 16/09/2020 14:32, Vladyslav Milutin wrote: >> Hello guys, >> >> I'm writing to you with a hope that you can help me with exception >> handling. >> Currently after a long time connection can be reset by peer. See stacktrace >> below. >> >> I've tried to add a custom ChannelHandler which Overrides exceptionCaught() >> and add it in Driver#initializePipeline() see code below. Also has tried to >> add a channel that can be obtained from DefaultNettyPlcConnection. And none >> of them actualy was added to the pipeline where this exception was thrown. >> >> plc4x version: 0.7.0 >> >> StatckTrace: >> 2020-09-16 13:50:03.340 WARN [nioEventLoopGroup-58-1] >> [io.netty.channel.DefaultChannelPipeline] onUnhandledInboundException - An >> exceptionCaught() event was fired, and it reached at the tail of the >> pipeline. It usually means the last handler in the pipeline did not handle >> the exception. >> java.io.IOException: Connection reset by peer >> at java.base/sun.nio.ch.FileDispatcherImpl.read0(Native Method) >> at java.base/sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) >> at java.base/sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:276) >> at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:233) >> at java.base/sun.nio.ch.IOUtil.read(IOUtil.java:223) >> at java.base/sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:358) >> at io.netty.buffer.PooledByteBuf.setBytes(PooledByteBuf.java:253) >> at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133) >> at >> io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) >> at >> io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) >> at >> io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) >> at >> io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) >> at >> io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) >> 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.base/java.lang.Thread.run(Thread.java:834) >> >> Driver#initializePipeline: >> try { >> final Channel channel = >> channelFactory.createChannel(this.handler); >> channelFactory.initializePipeline(channel.pipeline()); >> >> } catch (PlcConnectionException e) { >> log.error("Failed to create channel"); >> } >> >> ChannelHandler: >> @Override >> public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) >> { >> log.warn("ExceptionCaught in worker: ctx = [{}], cause = [{}, {}], >> workerName = [{}]", >> ctx, cause.getClass(), cause.getMessage(), workerName); >> if (cause instanceof ConnectTimeoutException) { >> log.warn("ConnectionTimeout caught: workerName = [{}]", >> workerName); >> } >> if ((cause instanceof IOException) && >> cause.getMessage().contains("Connection reset by peer")) { >> log.warn("Connection reset by peer caught: workerName = [{}]", >> workerName); >> } else { >> log.info("Unexpected exception caught: workerName = [{}]", >> workerName); >> } >> >> this.callback.accept(cause); >> } >> >> DefaultNettyPlcConnection#channel: >> log.info("Trying to get connection channel: worker name = [{}]", >> this.workerName); >> final Channel channel = ((DefaultNettyPlcConnection) >> this.connection).getChannel(); >> log.info("Channel obtained successfully. Adding custom >> channelHandler to it: channel = [{}], workerName = [{}]", channel, >> this.workerName); >> channel.pipeline().addLast(this.channelHandler); >> log.info("ChannelHandler added: channel = [{}], channelHandler = >> [{}], workerName = [{}]", channel, this.channelHandler, this.workerName); >> >> Kind regards, >> Vlad >> >
signature.asc
Description: OpenPGP digital signature