Hi Stefano, I'm curious about the 0.8.0 version, where I can find it? Since maven repo contains the latest version 0.7.0.
Kind regards, Vlad ср, 16 сент. 2020 г. в 17:30, Stefano Bossi <stefano.bo...@gmail.com>: > 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 > > > >