[
https://issues.apache.org/jira/browse/NIFI-16385?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18120178#comment-18120178
]
Peter Turcsanyi commented on NIFI-16385:
----------------------------------------
Notes on the solution:
* the new "Connection Validation" property must be set to "false" if the SMB
server does not support SMB2 ECHO outside an active session
* an alternative failover mechanism was added to avoid stale connections but
it works only in non-DFS environments (when the NiFi client has direct access
to the single SMB connection in use and can reconnect if it is needed)
* health check of internal DFS connections could be implemented in the smbj
library itself (see also https://github.com/hierynomus/smbj/issues/796)
> SMB processors fail if SMB2 ECHO is not supported by the server
> ---------------------------------------------------------------
>
> Key: NIFI-16385
> URL: https://issues.apache.org/jira/browse/NIFI-16385
> Project: Apache NiFi
> Issue Type: Bug
> Reporter: Peter Turcsanyi
> Assignee: Peter Turcsanyi
> Priority: Major
> Fix For: 2.13.0
>
> Time Spent: 20m
> Remaining Estimate: 0h
>
> NIFI-12837 introduced connection health check because the underlying smbj
> library can return stale connections from its pool. The NiFi side code can
> handle the failed connection (reopen on exception) but it is more problematic
> when DFS is used and the smbj client opens sessions to the linked servers
> internally (not visible to our code) and it does not check if the cached
> connection is alive or not.
> To solve the stale connection issue, the NiFi code intercepts the
> "getConnection" call, validates the connection, and opens a new one if
> necessary. The [health
> check|https://github.com/apache/nifi/blob/751efb02f0360f89266d625cbda8e7c3a00465ee/nifi-extension-bundles/nifi-smb-bundle/nifi-smb-smbj-common/src/main/java/org/apache/nifi/smb/common/SmbClient.java#L80]
> is performed via an SMB2 ECHO call. This approach properly works on Windows
> Server and Linux/Samba but other servers (like Dell PowerScale) may reject
> the ECHO. Actually, these servers strictly follow the SMB specification which
> says about the [SMB2
> ECHO|https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-smb2/fa23e613-2768-49e5-aa68-97c4bba72379]
> request: _“If Connection.SessionTable is empty, the server SHOULD<405>
> disconnect the connection.”_
> Result on the client side:
> {code:java}
> 2026-09-24 22:32:52,172 INFO [Packet Reader for 10.17.189.79, Original Thread
> name: Timer-Driven Process Thread-2] c.h.s.t.tcp.direct.DirectTcpPacketReader
> PacketReader e
> rror, got exception.
> com.hierynomus.protocol.transport.TransportException: java.io.EOFException:
> EOF while reading packet
> at
> com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readFully(DirectTcpPacketReader.java:72)
> at
> com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.readTcpHeader(DirectTcpPacketReader.java:59)
> at
> com.hierynomus.smbj.transport.tcp.direct.DirectTcpPacketReader.doRead(DirectTcpPacketReader.java:48)
> 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) {code}
> As the health check is critical for DFS only, it can be made optional for
> environments where the server does not support it (and no DFS is in use).
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)