Xen Orchestra web UI becomes unresponsive when an NFS backup remote goes offline
-
This looks like the same thing @acebmxer ran into in July (https://xcp-ng.org/forum/topic/12339), and your libuv reading matches what the XO devs wrote in https://github.com/vatesfr/xen-orchestra/pull/10587.
As I read their write-up, with a hard mount every background operation on the dead remote (listing backups, retries) holds one of xo-server's file-access threads until the NAS comes back, and once they're all taken the web UI can't be served either.
Olivier's advice back then (https://xcp-ng.org/forum/post/106632) was to disable the remote while the NAS is still up and only then power it off, and acebmxer scripted that on the Synology so the remote gets disabled at shutdown and enabled again at startup through the XO API.
If XO is already stuck, XO 6.10.0 added
xo-server-db disable-remote <id>, which you run while xo-server is stopped so the remote isn't mounted again on the next start; your November 1 build should have it if I read the dates right, but I haven't tried it myself.About
UV_THREADPOOL_SIZEI'm only guessing, but since a hung NFS call never gives its thread back I'd expect a bigger pool to just take longer to fill, and the PR says they tried capping the threads one remote can use and dropped the idea for now. @Team-XO-Backend will know better than me whether more is planned. -
Thank you very much for the answer.
This is my idea for now, but i'll look into better ways to do this.
*/5 * * * * /opt/scripts/enabledisableremote.sh#!/bin/bash export PATH="/usr/local/bin:/usr/bin:/bin:$HOME/.npm-global/bin:$PATH" REMOTE="9fc232df-4d0c-4a15-93b5-c0585c1dd9c9" NAS="10.0.0.28" # Stato attuale del Remote CURRENT=$(/usr/local/bin/xo-cli remote.getAll --json | jq -r --arg id "$REMOTE" '.[] | select(.id == $id) | .enabled') # Stato desiderato in base alla raggiungibilità del NAS if ping -c 1 -W 2 "$NAS" > /dev/null 2>&1; then DESIRED=true else DESIRED=false fi # Cambia stato solo se necessario if [[ "$CURRENT" == "true" || "$CURRENT" == "false" ]]; then if [[ "$CURRENT" != "$DESIRED" ]]; then /usr/local/bin/xo-cli remote.set id="$REMOTE" enabled="$DESIRED" fi fi -
Yes if I recall (I may not have stated on the forum) that I still ended up with issues and just abounded the idea. Not sure on the time line when they attempted a patch to when i stopped disabling the remote.
-
@acebmxer So what are you doing now? Given the manual, NFS is the way, but i can't have the remote available h24 and also i would like to have a functioning XO

-
Just leaving it on 24/7
winter is here now or so we thought (its 75f outside today) . If there is any update on this i would try again. but as it seems you are having the same issue i did then, it does not appear to be fixed. -
P poddingue marked this topic as a question
-
If you have the time, an issue on https://github.com/vatesfr/xen-orchestra/issues with your build date and that
ps -Toutput would make the case better than I can. -
@poddingue Taking the time to do this it's the bare minium! Here you go: https://github.com/vatesfr/xen-orchestra/issues/10741
-
when a NFS munt in hard mount mode fails, it is quite tricky to handle on user land, and falling back to a soft mount means we accept to loose data without knowing
To unstuck a XO with a brken NFS , we added a cli tool that allow you to disable a remote here https://github.com/vatesfr/xen-orchestra/pull/10587
-
I performed another test to reproduce the issue and evaluate the recovery mechanism introduced in PR #10587.
Unfortunately, I encountered a limitation that may prevent the new
disable-remotecommand from being used in the exact failure scenario it is intended to address.1. Reproducing the issue
With the NFS remote enabled, I shut down the NAS.
Initially, Xen Orchestra remained accessible, but one libuv worker became blocked in
rpc_wait_bit_killable.After some time, all four libuv workers were blocked:
TID STAT WCHAN COMMAND 863 Dsl rpc_wait_bit_killable libuv-worker 864 Dsl rpc_wait_bit_killable libuv-worker 865 Dsl rpc_wait_bit_killable libuv-worker 866 Dsl rpc_wait_bit_killable libuv-workerThe
xo-serverprocess was still running, but the libuv worker pool was completely blocked.I also observed multiple
df -kPprocesses attempting to access the unavailable NFS mount.2. Attempting to stop xo-server
I then executed:
systemctl stop xo-serverHowever, systemd was unable to terminate the service, even after sending SIGKILL.
The final status was:
Active: failed (Result: timeout) Main PID: 738 Processes still around after SIGKILL. Ignoring. State 'final-sigterm' timed out. Killing. Killing process 738 (MainThread) with signal SIGKILL. Processes still around after final SIGKILL. Entering failed mode. Unit process 738 (MainThread) remains running after unit stopped.Checking the remaining process:
ps -p 738 -o pid,ppid,stat,wchan:32,commReturned:
PID PPID STAT WCHAN COMMAND 738 1 Ds rpc_wait_bit_killable MainThreadAll other Node.js threads had disappeared, but the main thread remained stuck in an uninterruptible kernel wait.
3. Attempting a lazy unmount
I then tried:
umount -l /run/xo-server/mounts/9fc232df-4d0c-4a15-93b5-c0585c1dd9c9The command completed successfully, and
findmnt -t nfs,nfs4no longer showed the NFS mount.However, the Node.js process remained blocked:
PID STAT WCHAN COMMAND 738 Ds rpc_wait_bit_killable MainThreadTherefore, detaching the NFS mount did not release the already pending kernel operation.
4. Implications for PR #10587
As I understand it, the new
xo-server-db disable-remote <id>command is intended to be executed whilexo-serveris stopped.However, this test shows that when an NFS
hardremote becomes unavailable:- All four libuv workers can become blocked.
xo-serverbecomes unresponsive.systemctl stop xo-servercan fail, even after SIGKILL.- The Node.js process can remain stuck in an uninterruptible kernel wait.
- Even
umount -ldoes not necessarily release the blocked process.
5. Question about the intended recovery procedure
If
xo-servercannot be fully stopped because its process remains stuck in stateD, how is the newdisable-remotecommand expected to be used safely?Is the intended procedure to execute the database command while the old Node.js process is still present but systemd reports the service as failed?
Or is a VM reboot / restoration of NFS connectivity still required before the recovery command can be used?
I have not executed
disable-remotein this condition yet, because the original Node.js process is still present and I wanted to avoid modifying the database while it might still be in use.My concern is that the new CLI provides a way to prevent the problematic remote from being accessed on the next startup, but does not necessarily provide a complete recovery path when the existing
xo-serverprocess cannot terminate.I would appreciate clarification on the intended recovery procedure for this specific scenario.
-
I really do not want to look like i'm not appreciating the platform. I am a sysadmin currently evaluating XCP-ng and Xen Orchestra as a replacement for VMware, and I have to say this issue is making me a bit concerned. Of course for now it's my homelab, but it is already a show stopper for me.
I understand that NFS hard mounts can block when the server goes offline, but I really wouldn't expect an unavailable backup repository to make the entire XO Web UI unresponsive, especially when no backup jobs are running.
To me, this feels like vCenter becoming unusable just because one of the backup repositories is down. That's a pretty big deal in a production environment. Also, i have not yet tested what happens to vms running on local SR and management plane of a host when the main NFS SR may become unavailable.
What worries me even more is that, as my tests showed, once XO gets stuck, even SIGKILL can't terminate the process, so recovering isn't straightforward either.
Am I missing something here? Is there something wrong with my setup, or is this actually expected behavior?
I really like XCP-ng and XO so far, but I'm trying to understand how companies handle this kind of situation in production. Surely a failed backup destination shouldn't take down the whole management interface?
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login