Filestore] add SIGUSR1 retries to FUSE loop thread shutdown to mitigate single lost SIGUSR1 wakeup#6426
Conversation
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-release-tsan have completed. Tip Planned checks for linux-x86_64-release-tsan.
🔴 linux-x86_64-release-tsan target: cloud/filestore/ (test time: 5275s): some tests FAILED for commit f3036c7.
|
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-relwithdebinfo have completed. Tip Planned checks for linux-x86_64-relwithdebinfo. 🟢 linux-x86_64-relwithdebinfo target: cloud/filestore/ (test time: 6792s): all tests PASSED for commit f3036c7.
|
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-release-ubsan have completed. Tip Planned checks for linux-x86_64-release-ubsan.
🟢 linux-x86_64-release-ubsan target: cloud/filestore/ (test time: 4561s): all tests PASSED for commit f3036c7.
|
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-release-ubsan have completed. Tip Planned checks for linux-x86_64-release-ubsan.
🟢 linux-x86_64-release-ubsan target: cloud/filestore/ (test time: 4711s): all tests PASSED for commit 4063480.
|
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-release-tsan have completed. Tip Planned checks for linux-x86_64-release-tsan.
🔴 linux-x86_64-release-tsan target: cloud/filestore/ (test time: 5129s): some tests FAILED for commit 4063480.
|
|
Note This is an automated comment that will be appended during run. Note All workloads for linux-x86_64-relwithdebinfo have completed. Tip Planned checks for linux-x86_64-relwithdebinfo. 🔴 linux-x86_64-relwithdebinfo target: cloud/filestore/ (test time: 6609s): some tests FAILED for commit 4063480.
🟢 linux-x86_64-relwithdebinfo target: cloud/filestore/ (test time: 65s): all tests PASSED for commit 4063480.
|
Problem
https://github.com/ydb-platform/nbs/actions/runs/27998974260/job/82867193543
Notes
TFuseLoopThread::Stop() sends one pthread_kill(SIGUSR1), then joins. The loop thread runs while(!fuse_session_exited(se)) read(/dev/fuse). A signal only breaks read() with EINTR if the thread is already sleeping inside it. There is a short window between the exit-flag check and the start of read(). If the signal arrives in that window, the no-op handler eats it. The thread then enters read() with nothing pending and blocks forever. No more FUSE requests come. No more signals are sent. The unmount that would break read() with ENODEV runs only after the join, and the join is already stuck on this thread. This window widens under host load. The bug predates the multi-queue refactor (#4045).