XC_VM — Release Notes
Overview
This beta release fixes installing a load balancer on a panel in API mode (the default for new panels since 2.6.2) and a fresh install whose nginx refused to start. It also adds the segment gateway, off by default: on a load balancer with fanout delivering, xc_fanout answers HLS segment, key and playlist requests instead of PHP-FPM, after a shadow period in which its answers are compared with PHP's. Modules are no longer installed by the panel on its own, and backup migration keeps the tables that belong to modules.
✨ New Features
Segment Gateway (load balancers)
- Settings → Cluster → Segment Gateway (
gateway_mode, per node through the replica), off by default:- shadow: PHP keeps serving. The gateway judges a copy of each segment, key and playlist request, and the two answers are compared.
- segments: the gateway serves live segments, catch-up minutes and keys.
- segments+playlist: it also serves a known viewer's playlist refresh, on nodes whose viewers are held by their agent. A viewer's first request stays with PHP.
- Whatever the gateway is not sure of, it hands back to PHP. PHP also answers while the gateway is down.
- Cluster Nodes has a Segment Gateway column (mode, counts, comparison) and
/metricsthe matching counters. A node is marked Ready to serve after 7 days and 100 compared requests since its last disagreement. - Measured on a one-vCPU load balancer: p50 2.4 ms / p99 5.1 ms per request through the gateway, against 8.3 ms / 23 ms through PHP.
- Rollback: set the mode back to off. Within a minute, nginx goes back to PHP for every request.
Modules
- With xcvm_core 2.4.0, the module store lists modules and installs free ones without an API key. The Store tab searches, sorts and pages.
🚀 Improvements
- No module installs by itself: Watch and Plex are no longer downloaded at every start, and a deleted module stays deleted. Modules already installed stay as they are.
- The Modules page drops Uninstall: Delete removes a module and its data, and Disable switches it off and keeps everything.
- Migrating a backup hands module tables (such as Watch's watch folders) to their modules, which copy them when they are installed. Before, those rows were lost without the module.
- The TMDb refresh queue now belongs to the core: TMDb refreshes and category or profile deletion work without the Watch module.
- Invalid stream ids, and credentials that match no line, are logged as client refusals. Scraping and credential guessing can then be counted per address across every server.
- The verification banner's button copies the HWID and opens the page to get a key.
🛠️ Bug Fixes
- Load balancer install in API mode: the install no longer stops at "No xc_agent on the node" with "MySQL: Cannot connect to database". The node starts its services once its enrolment has brought the replica.
- Fresh install: nginx no longer refuses the access-code configuration (an unfilled alias and rate-limit zone), which had left every page unreachable.
- Catch-up: a segment refused for the viewer's address no longer keeps that viewer's session alive.
- Backup migration no longer takes tables created by core migrations for module tables.
📌 Important Notes
- Beta: this is a pre-release.
- Segment gateway: off by default. Serving needs an
xc_fanoutrelease that includes the gateway (the next one after 0.14.7). Until a node runs one, the setting changes nothing there and PHP keeps serving. Start each node in shadow and switch it to serving once Cluster Nodes marks it ready. - Key-free module store: needs xcvm_core 2.4.0. With an older extension the store asks for the Modules API key as before.
- Update order: update MAIN first; load balancers follow.