[ 
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.8.2

> 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.8.2, 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)

Reply via email to