product-ei
product-ei copied to clipboard
VFS proxy using SMB2 stops polling after network issue or an idle time
Description: This issue occurs when using a VFS proxy with SMB2 to consume files from a Windows file system. The proxy starts to polling the files when the server is restarted. After a network failure, the file polling is getting stopped and never restarts polling even after the network is restored. The same behavior is observed after an idle timeout.
Affected Product Version: WSO2 EI 6.5.0
Steps to reproduce:
- Get an EI 6.5.0 updated pack.
- Deploy a VFS proxy to consume files from a Windows file system.
sample proxy
<?xml version="1.0" encoding="UTF-8"?>
<proxy name="test" startOnLoad="true" transports="vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<log level="full"/>
<drop/>
</inSequence>
<outSequence/>
<faultSequence/>
</target>
<parameter name="serviceType">proxy</parameter>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">smb2://username:pwd@IP/Shareroot/IN</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.vfs.MoveAfterFailure">smb2://username:pwd@IP/Shareroot/OUT</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.prn</parameter>
<parameter name="transport.vfs.Locking">disable</parameter>
<parameter name="transport.vfs.MoveAfterProcess">smb2://username:pwd@IP/Shareroot/FOUT</parameter>
</proxy>
- After deploying the proxy you will see that the EI is polling the files. But after a network failure the EI stops polling you will see the below error logs.
[2021-06-14 19:02:06,160] [EI-Core] ERROR - Session Caught exception while closing TreeConnect with id: 1 com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Broken pipe (Write failed) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:78) at com.hierynomus.smbj.connection.Connection.send(Connection.java:297) at com.hierynomus.smbj.session.Session.send(Session.java:292) at com.hierynomus.smbj.share.TreeConnect.close(TreeConnect.java:66) at com.hierynomus.smbj.share.Share.close(Share.java:115) at com.hierynomus.smbj.session.Session.logoff(Session.java:233) at com.hierynomus.smbj.session.Session.close(Session.java:274) at com.hierynomus.smbj.connection.Connection.close(Connection.java:153) at com.hierynomus.smbj.connection.Connection.close(Connection.java:128) at com.hierynomus.smbj.connection.Connection.handleError(Connection.java:467) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:54) at java.lang.Thread.run(Thread.java:748) Caused by: java.net.SocketException: Broken pipe (Write failed) at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:111) at java.net.SocketOutputStream.write(SocketOutputStream.java:155) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpTransport.write(DirectTcpTransport.java:75) ... 11 more [2021-06-14 19:02:06,160] [EI-Core] ERROR - Promise << 1935 >> woke to: {} com.hierynomus.smbj.common.SMBRuntimeException: com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Operation timed out (Read failed) at com.hierynomus.smbj.common.SMBRuntimeException$1.wrap(SMBRuntimeException.java:27) at com.hierynomus.smbj.common.SMBRuntimeException$1.wrap(SMBRuntimeException.java:21) at com.hierynomus.protocol.commons.concurrent.Promise.deliverError(Promise.java:95) at com.hierynomus.smbj.connection.OutstandingRequests.handleError(OutstandingRequests.java:88) at com.hierynomus.smbj.connection.Connection.handleError(Connection.java:465) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:54) at java.lang.Thread.run(Thread.java:748) Caused by: com.hierynomus.protocol.transport.TransportException: java.net.SocketException: Operation timed out (Read failed) at com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:53) at com.hierynomus.smbj.transport.PacketReader.readPacket(PacketReader.java:70) at com.hierynomus.smbj.transport.PacketReader.run(PacketReader.java:48) ... 1 more Caused by: java.net.SocketException: Operation timed out (Read failed) at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.socketRead(SocketInputStream.java:116) at java.net.SocketInputStream.read(SocketInputStream.java:171) at java.net.SocketInputStream.read(SocketInputStream.java:141) 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 more
- Also will happen after a idle time.