[ https://issues.apache.org/jira/browse/CAMEL-21474?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-21474: -------------------------------- Fix Version/s: 4.9.0 > Camel-SMBProducer is never disconnecting > ---------------------------------------- > > Key: CAMEL-21474 > URL: https://issues.apache.org/jira/browse/CAMEL-21474 > Project: Camel > Issue Type: Improvement > Components: camel-smb > Affects Versions: 4.7.0, 4.8.0, 4.8.1 > Reporter: Kevin Gretener > Priority: Minor > Fix For: 4.9.0 > > > I'm using the SMB component as a producer, which was introduced in camel > 4.7.0. > When I'm running my example route for more than 15 minutes, I noticed some > exceptions in the log like this one: > {code:java} > from("scheduler://period20min?delay=1200000&repeatCount=12") // > .setBody(constant("Lorem ipsum")) // > .setHeader("CamelFileName", simple("Testfile${date:now:HH_mm_ss}.txt")) // > .to("smb:localhost:445/Test?username=test&password=test"); {code} > > {code:java} > com.hierynomus.protocol.transport.TransportException: > java.net.SocketException: Connection reset > at > com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:53) > at > com.hierynomus.smbj.transport.PacketReader.readPacket(PacketReader.java:75) > at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:53) > at java.base/java.lang.Thread.run(Thread.java:1583) > Caused by: java.net.SocketException: Connection reset > at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:318) > at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:346) > at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:796) > at java.base/java.net.Socket$SocketInputStream.read(Socket.java:1099) > at > java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:291) > at > java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:347) > at > java.base/java.io.BufferedInputStream.implRead(BufferedInputStream.java:420) > at > java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:399) > at > com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readFully(DirectTcpPacketReader.java:70) > at > com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readTcpHeader(DirectTcpPacketReader.java:59) > at > com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:48) > ... 3 common frames omitted > {code} > I found out this is related to this > [issue|https://github.com/hierynomus/smbj/issues/365] in the SMBJ project. > But at the same time I challenged why the connection is keeped open despite > i'm currently not writing to the smb-fileshare. So I realized the > disconnect-method on smbProducer is never called. I think it should be called > from doStop(), otherwise the separated Thread of DirectTcpPacketReader.class > never gets stopped. > > *Workarounds* > First option: Call the disconnect-method manually and decrease the > Logging-Level > {code:java} > .process(exchange -> { > try (Producer producer = getCamelContext() > .getEndpoint("smb:localhost:445/Test?username=test&password=test") > .createProducer()) { > producer.start(); > producer.process(exchange); > producer.stop(); > if (producer instanceof SmbProducer smbProducer) { > smbProducer.disconnect(); // Should be called from SmbProducer.doStop() > } else { > log.warn("Producer is not an instance of SmbProducer instead:{}", > producer.getClass().getName()); > } > }}) {code} > Second Option: Use the camel-jcifs component of the camel-extra project. > *Expected Behaviour* > After writing a file with the smbProducer the connection should be closed and > no Warning/Info logs about timeouts or unclosed sessions are written. > > *Additional Information* > SmbConsumers SessionHandling was updated by CAMEL-21263, probably a similar > solution would work for the producer. > Other improvements are planned with CAMEL-21352. -- This message was sent by Atlassian Jira (v8.20.10#820010)