[
https://issues.apache.org/jira/browse/CAMEL-21474?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17901963#comment-17901963
]
Claus Ibsen edited comment on CAMEL-21474 at 11/29/24 5:25 PM:
---------------------------------------------------------------
Adding a new disconnect=true|false option you can configure.
We have a plan to refactor this component and let it be based on camel-file
like ftp/jsch etc that gives it more power. And when this happens then we will
be able to adjust this component better for good ux
was (Author: davsclaus):
Adding a new disconnect=true|false option you can configure.
We have a plan to refactor this component and let it be based on camel-file
like ftp/jsch etc that gives it more power.
> 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
> Assignee: Claus Ibsen
> 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)