XCP-ng
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Register
    • Login
    1. Home
    2. Popular
    Log in to post
    • All Time
    • Day
    • Week
    • Month
    • All Topics
    • New Topics
    • Watched Topics
    • Unreplied Topics

    • All categories
    • G

      GPU Passthrough

      Watching Ignoring Scheduled Pinned Locked Moved Management
      29
      3
      0 Votes
      29 Posts
      7k Views
      tjkreidlT
      @coolsport00 Sorry about the VMW need for the Cisco product. SOunds like you have a number of constraints, finances being I'm sure one of them! At least you have time on your hands and the means to experiment. You may, als, end up with a number of different platforms to meet your needs. We ran both Sun Microsystems and Red Hat Linux and Microsoft WIndows servers, each taking on specific duties. It's far from ideal and probably not very cost-effective, but you do what you have to to get stuff to work.
    • samuelolavoS

      Laravel Xen Orchestra v1.0.0 — Open-source PHP/Laravel client for the XO REST API

      Watching Ignoring Scheduled Pinned Locked Moved REST API
      4
      2 Votes
      4 Posts
      79 Views
      poddingueP
      Pretty cool, @samuelolavo, thanks for clarifying!
    • johnnezeroJ

      Tag-Based Automation Plugin: Tag-Based VM Performance & Permission Management via assigned tag(s)

      Watching Ignoring Scheduled Pinned Locked Moved Management
      10
      1
      0 Votes
      10 Posts
      2k Views
      fohdeeshaF
      @johnnezero Hi! Thank you for your contribution to the vates / XCP ecosystem! It's certainly appreciated. However there seems to be a few "vibe-code-isms" in the plugin source that has caused us some support tickets on Vates side - the main issue is that you're doing two synchronous NFS operations (fs.existsSync & fs.appendFileSync) for every single log entry with no buffering, batching. Being syncrhonous, the entire node event loop locks up dead until the NFS call completes. So your plugin writing ~500 log lines whenever it runs at the top of the hour (or whenever else) is doing 2000+ NFS sync calls, locking up the node event loop for nearly 60 full seconds - meaning XOA loses the ability to contact hosts, perform operations, etc. This is made exponentially worse by the logger writing to XOA backup mounts, as when an XOA backup is running, the NFS share is typically quite loaded with backup traffic, making the logging sync operations take many times longer. We've seen a couple customers whose backups started failing due to this which was interesting to track down - it appears as just the XOA appliance losing network connectivity to the pool, when in fact it's because xo-server is completely locked up waiting on logging activity from this plugin while the backup run is trying to call XAPI on the customer pool. there's some other stuff like the enforcePerformance performing four writes over xapi on every single VM unconditionally every single call, instead of checking if the value is already set correctly and doesn't need a write. Stuff like vm.VCPUs_params and vm.other_config which XOA already intelligently maintains a cache of, so 99% of these routine calls should theoretically require zero xapi writes, or even reads. Here's a full analysis from Claude (I am not a dev, and our current XO devs are swamped so I didn't want to bother them with this ) The hourly enforcement cycle blocks the Node.js event loop for tens of seconds. xo-server runs every pool connection in that same single threaded process, so the block starves xen-api's event watcher. Its event.from long poll has a 60.1 second client side deadline, the timer cannot fire on time, and when it does xen-api treats the connection as dead and reconnects. Reconnecting flushes the XO object cache. Backup jobs starting in that window fail with no such object <pool-uuid>. The block is synchronous NFS I/O, one call per log line, inside loops over hundreds of rows. Evidence Four _watchEvents TimeoutError events fired within the same second, one second after the cycle's preload phase ended: call deadline actual 1 60.1 s 99.4 s 2 60.1 s 67.1 s 3 60.1 s 66.4 s 4 60.1 s 66.2 s Timers with deadlines spread across 33 seconds do not batch like that unless the loop was starved and then released. The pool master logged no XAPI errors during the window, and its session.login_with_password from the XOA address matches the reconnect exactly. Over a longer window, 18 timeout events since 1 August, 9 of them within 90 seconds of the top of an hour. Findings 1. Synchronous NFS I/O in the logging path (critical) writeLog (line 279) makes two blocking filesystem calls per log line, both against the NFS mount: if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true }); // stat RPC fs.appendFileSync(logPath, message + "\n", "utf8"); // open+write+close logInfo (290) and logWarn (298) both call it, twice when summary is set. About 270 log lines per cycle at roughly four round trips each is about 1100 blocking calls. Measured block was 39 seconds, implying about 35 ms per call, consistent with the share being under backup write load at the time. Other synchronous calls on the same mount: rotateLogs (231, 234, 244, 245, 258, 261), readLogTail (310, 311) which reads up to 10 MB, CSV reads (587, 619, 662, 750), and full CSV writes (645, 849). console.log is not a contributor. Node writes to a pipe asynchronously. 2. Unconditional XAPI writes on every VM, every hour enforcePerformance, lines 450 to 453: await xapi.call("VM.remove_from_VCPUs_params", vm._xapiRef, "weight"); await xapi.call("VM.add_to_VCPUs_params", vm._xapiRef, "weight", String(matched.weight)); await xapi.call("VM.remove_from_other_config", vm._xapiRef, "sched-pri"); await xapi.call("VM.add_to_other_config", vm._xapiRef, "sched-pri", String(matched.ioPri)); No check for whether the value is already correct, though the cache already holds vm.VCPUs_params and vm.other_config. Four writes per tagged VM per hour, each journaled by XAPI and broadcast through event.from to every client, including the process that is currently frozen. The plugin generates the event storm it then cannot drain. The remove-then-add pair is also non-atomic. Between the calls the VM has neither weight nor sched-pri. Same pattern for tags at 688 and 794, where VM.add_tags is called blind and a duplicate key error is caught afterwards. The cached vm.tags already answers that. 3. xo.getAllGroups() inside per-VM and per-tag loops Line 501 in enforcePermissions, line 552 in applyPermissionTag. The latter is called inline from runCsvSync (696) and processPreloadVms (831), multiplying the cost. 4. xo.getXapi(vm) unguarded Lines 681 and 786. It throws no connection found for object <uuid> when the pool is disconnected, which is the state the plugin creates for itself. Neither is wrapped, so one disconnected pool aborts the whole cycle through runEnforcementCycle (891, which rethrows). enforcePerformance handles this correctly at 446; the other two do not. 5. The preload queue never drains processPreloadVms (742) removes a row only on a successful match (839). A row naming a VM that does not exist, was decommissioned, lives on an unconnected pool, or was mistyped is retried forever. The observed instance held 216 such rows, producing 216 synchronous NFS writes per hour to report that nothing happened. That is roughly 80 percent of the plugin's blocking I/O. The message "not found or filtered" also conflates a missing VM with one rejected by isRealVm, and the lookup at 774 searches across every connected pool, taking whichever the index returns first on a name collision. 6. Repeated full object scans and quadratic lookups Object.values(xo.getObjects({ type: "VM" })) is rebuilt at 430, 487, 583, 653, 749, 860, 996, and 1018, several in the same cycle. VM resolution is a linear Array.find at 601, 678, and 774. The CSV is regenerated from the VM list, so row count tracks VM count and runCsvSync is quadratic in pool size. 7. No guard against concurrent cycles runEnforcementCycle is reachable from the cron job (905, 941), the test action (1000), and xo-server-tag-automation.runSync (1005). None check whether a cycle is running. A manual "Run Now" during the hourly tick doubles everything. 8. Scheduling getCron (182) maps hourly to 0 * * * *, and createSchedule (905, 914, 941, 950) is called with no timezone, so it fires on the hour in appliance local time. That collides with every other scheduled job, including backups. 9. Dead code in isRealVm Lines 346 to 349. All three exact matches contain the substring tested on 346, so the last three branches are unreachable. 10. Unverified object model location code issue 337, 338 vm.$type and vm.type both tested only one exists 404 to 413 four property fallback chain for notes only one is the real field 601, 678 (v.uuid \|\| v.id) both exist, with defined meanings vm._xapiRef (450 to 453, 688, 720, 794, 813) is an internal field that can go stale after a reconnect, and nothing revalidates it. 11. Minor rotateLogs (229) rotates only FILE_LOG; summary and daily logs grow without bound. writeRefreshedCsv (640) never quotes fields while parseCsvLine (194) handles quotes, so a value containing a double quote round trips incorrectly. The CSV is read twice per cycle (619, 662), three times with autopilot enabled (587). configure() (925) reassigns _config, but a cycle already in flight holds the old reference.
    • A

      Backup remote repository structure

      Watching Ignoring Scheduled Pinned Locked Moved Backup
      1
      0 Votes
      1 Posts
      14 Views
      No one has replied
    • J

      VIDs are showing up as snapshot, but they are not.

      Watching Ignoring Scheduled Pinned Locked Moved Unsolved XOSTOR
      7
      1
      0 Votes
      7 Posts
      411 Views
      K
      @olivierlambert I'm seeing a recurrence of the snapshot_of / hidden-disks issue after patching to xapi-26.1.16-1.2 (both hosts, rebooted). Unusual element this time: snapshot-fixer.py dry-run flags ~260 VDIs across the SR that all cite a single OpaqueRef which resolves to no VDI (xe vdi-list | grep <ref> returns nothing). Holding off on rewrite until I understand whether that single-dangling-ref pattern is safe, given the set appears to include base VDIs of legitimate snapshots. Full technical detail and questions posted on GitHub: https://github.com/xcp-ng/xcp/issues/844.
    • A

      XenOrchestra not showing VM Disks on Pool (on single Server working) - XCP-ng Center is showing them

      Watching Ignoring Scheduled Pinned Locked Moved Unsolved Xen Orchestra
      28
      2
      0 Votes
      28 Posts
      4k Views
      K
      @poddingue I'm seeing a recurrence of the snapshot_of / hidden-disks issue after patching to xapi-26.1.16-1.2 (both hosts, rebooted). Unusual element this time: snapshot-fixer.py dry-run flags ~260 VDIs across the SR that all cite a single OpaqueRef which resolves to no VDI (xe vdi-list | grep <ref> returns nothing). Holding off on rewrite until I understand whether that single-dangling-ref pattern is safe, given the set appears to include base VDIs of legitimate snapshots. Full technical detail and questions posted on GitHub: https://github.com/xcp-ng/xcp/issues/844.
    • msupportM

      Veeam 13.1 Rocky9 Linux Appliance: Potential Data Loss with CBT and Workers with Expired Tokens

      Watching Ignoring Scheduled Pinned Locked Moved Unsolved Backup
      15
      2 Votes
      15 Posts
      1k Views
      acebmxerA
      I have received a very long update back from Veeam on my backup issues.... There appears to be another user with similar setup / issue not sure if that user is the OP this post specifically... Hello, Thank you for your patience. The QA team has finished the analysis, and I am going to outline the details as below: 1. CBT Inconsistency Issue Whenever you see the Warning about CBT showing: 2026-08-16 17:37:27.459 00079 ERROR | [XenRpcClient]: Failed ListChangedBlocks. Error: [Task 291af3d7-28c1-15a9-7f13-c6a1a12283e9 (Async.VDI.list_changed_blocks) failed: . SR_BACKEND_FAILURE_460. . Failed to calculate changed blocks for given VDIs. [opterr=Source and target VDI are unrelated]. We can go to the previous run and see that we get reports that the CBT of the previous snapshot is inconsistent and thus removed by XCP: 2026-08-16 09:54:34.120 00004 ERROR | [XenBackupManager]: Failed to retain the data for the snapshot 5a17fb31-2616-4e72-a85c-e235883c8c91 Veeam.Vbf.Common.Exceptions.ExceptionWithDetail: [Task 39c0f25f-e811-ee45-1b0b-e4a9ca9839ae (Async.VDI.data_destroy) failed: . VDI_NO_CBT_METADATA. OpaqueRef:a005d328-6da0-b8b7-34ef-0607ed44c2ed The team has been reviewing and testing, and this is what they see. We send the request for the snapshot to be created, and it is sent to the coordinator: xcp-ng-vyadytkn Aug 16 09:50:08 xcp-ng-vyadytkn SM: [1555017][MainThread] vdi_clone: introduced VDI: OpaqueRef:a005d328-6da0-b8b7-34ef-0607ed44c2ed (5a17fb31-2616-4e72-a85c-e235883c8c91) CBT shows as open and reading fine: Aug 16 09:50:08 xcp-ng-vyadytkn SM: [1555017][MainThread] ['/usr/sbin/cbt-util', 'set', '-n', '/var/run/sr-mount/7911c9c5-5f20-01e1-8b8d-39c6a98a2704/5a17fb31-2616-4e72-a85c-e235883c8c91.cbtlog', '-f', '1'] Aug 16 09:50:08 xcp-ng-vyadytkn SM: [1555017][MainThread] pread SUCCESS But look at how on xcp-ng-host2 the CBT gets marked as inconsistent by XCP, even though it's open and reading: Aug 16 09:51:05 xcp-ng-host2 SM: [1683689][MainThread] Changed Block Tracking metadata is inconsistent for disk 5a17fb31-2616-4e72-a85c-e235883c8c91. The Breakdown: xcp-ng-vyadytkn was the coordinator—the one we talk to, who then passes everything around to the hosts. xcp-ng-host2 was the host that the VM resided on at that time. xcp-ng-host2 is marking the CBT as inconsistent and deleting the snapshot CBT log, which means we cannot reference it on the next run. We do not see anything else interacting with the CBT besides that host. This matches exactly what we see with another client running the same setup. The team successfully replicated the environment, which is configured as follows: VM storage is NFS. The VM is running on a host that is not the coordinator. They have been able to reproduce this behavior occasionally, and the working theory is that the VM host keeps its own tracking separate from the coordinator. Part of the backup process requires the VM host to issue a pause/resume via a process called tapdisk. When it resumes, it pushes a data cache (likely inside the NFS cache), overwriting the CBT reference held by the coordinator server. It acts as a race condition—whoever pushes the CBT data last wins. If the VM host pushes last, it breaks what the coordinator is sending. Next Steps for CBT: The team is working to raise this issue directly with Vates so they can address the race condition. We ask that you also open a Vates ticket if possible to help draw more attention to the bug. We are trying to find ways to code around this race condition in the future, but there are currently no ETAs or guarantees. 2. Synthetic Full Failures (Delilah_ArcFS01) In addition to the CBT bug, the team discovered a separate issue. Recently, the synthetic fulls for Delilah_ArcFS01 have been failing. This appears to be related to the NFS repository: [30.08.2026 00:43:22.856] <24> [0007] Error (1) Failed to execute full transform task [30.08.2026 00:43:22.856] <24> [0007] Error (1) Agent: Failed to process method {Transform.CompileFIB}: NfsFileEx was already stopped. File: [Host:, Mount: [/volume1/veeam], Disk: [Delilah ArcFS01 Backup/Delilah ArcFS01 Backup_2026-08-29T232336.vib], Type: [nfs3 (1)]] (Veeam.Backup.Common.CCppComponentException) [30.08.2026 00:43:22.856] <24> [0007] Error (1) in c++: Failed to execute command Command: READ, Offset: 2523136, Data size: 659456, Chunk size: 131072 [30.08.2026 00:43:22.856] <24> [0007] Error (1) in c++: Failed to read file: Offset: 2523136, Block size: 659456, File: Path: [Host:, Mount: [/volume1/veeam], Disk: [Delilah ArcFS01 Backup/Delilah ArcFS01 Backup_2026-08-29T232336.vib], Type: [nfs3 (1)]], Handle: [01000702080061030000000007fffd5f65840fb20000000000000000150061038a2f7c0b0400610379207c0b], Read chunk size: 131072, Write chunk size: 131072, Read only: true Because it continuously fails during the synthetic full, it eventually causes the snapshot to be lost when retries fail. The team will change this logic in a future update. Action Items for the NFS Issue: To help prevent these snapshot loss failures, could you please provide the logs from the repository NFS (192.168.20.91)? Export the logs from the Veeam server and select the repository host. Provide the results of running this command directly on the Repository host: journalctl --since "30 days ago" > journal_repo.log Temporary Workaround: If you can, please temporarily switch to active fulls instead of synthetic fulls to help stabilize the job. Please let me know if you have any questions, and if you are able to raise that ticket with Vates. They also just responded back with this statment... Regarding the second part of the last email with the noticed Synthetic full issue, I actually would like you to also make this registry entry on the Veeam server and keep synthetic fulls enabled to see if it helps with that issue: Path: HKEY_LOCAL_MACHINE\SOFTWARE\Veeam\Veeam Backup and Replication Name: Nfs3CommandWaitTimeoutSec Type: DWORD Value (In Decimal): 86400
    • olivierlambertO

      🛰️ XO 6: dedicated thread for all your feedback!

      Watching Ignoring Scheduled Pinned Locked Moved Xen Orchestra
      265
      7 Votes
      265 Posts
      121k Views
      acebmxerA
      SDN controller documentation link - page not found... XO from sources latest commit - 280c0 [image: 1789054561550-screenshot-2026-09-10-113453.png] [image: 1789054584537-screenshot-2026-09-10-113617.png]