什么是 Fpolicy EAGAIN 错误以及何时发生?
适用场景
ONTAP 9
问题解答
当分配给 LIF 和 fpolicy 服务器之间特定 TCP 会话的发送或接收缓冲区已满,不再有可用空间来发送请求或接收响应时,就会发生 EAGAIN 错误。当 ONTAP 响应请求或将响应从缓冲区中拉出时,缓冲区会清空。发生 EAGAIN 时,会触发该 SVM 到该 fpolicy 服务器的倒带行为,根据 ONTAP 版本的不同,此倒带/延迟行为可能会有所不同。
- 未修复错误 1372994 的版本:
- ONTAP 将暂停该 TCP 会话上的 fpolicy 请求 2 秒,然后在恢复时开始发送排队的请求。
- 修复了错误 1372994 的版本:
- 首次尝试时,ONTAP 将在 1 毫秒后重试请求。如果同一请求再次发生 EAGAIN 错误,ONTAP 将继续每 100 毫秒重试一次,最多重试 2 秒;如果在超时之前无法将请求添加到缓冲区,则关闭套接字。如果在断开连接之前可以将请求添加到缓冲区,则该过程将恢复到 1 毫秒延迟计时器,以应对下一次 EAGAIN 错误。
错误示例:
- EMS 或
event log show
:
[filer1: fpolicy: fpolicy.eagain.on.write:notice]: Write returned EAGAIN while sending notification to the FPolicy server "1.2.3.4" for vserver ID 3.
fpolicy-mlogs:
Fpolicy.log reports errors pertaining to EAGAIN errors similar to the following:
[kern_fpolicy:error:1552] Write returned EAGAIN[35] [0x0x80c408d00] src/fsm/fsm_external_engine.cc:864
针对错误 1479704的修复版本已将行为扩展至上述流程。
- 如果整个流程完成并且发生断开连接,则会启动 2 分钟计时器。
- 如果在 2 分钟计时器内由于 EAGAIN 发生 4 次断开连接,则 FPolicy 服务器将永久断开连接并触发 EMS 事件。
EMS 详细信息: fpolicy.eagain 事件