Allinea slate Cloud a AAC 48k mono e preferisce home in allocate.

Senza questo il telefono (mono 48k) veniva rifiutato sui nodi Hetzner e lo warm spare rubava le sessioni a home.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-11 18:27:13 +02:00
co-authored by Cursor
parent 8bf12e7721
commit 4c5af99efa
3 changed files with 54 additions and 10 deletions
@@ -1,7 +1,8 @@
# frozen_string_literal: true
module Streams
# Assegna un StreamNode a una nuova sessione (least-loaded tra i ready).
# Assegna un StreamNode a una nuova sessione.
# Preferisce home finché ha slot; poi least-loaded tra i nodi overflow ready.
# Garantisce il nodo "home" derivato dagli ENV MediaMTX attuali.
class NodeRegistry
class NoCapacityError < StandardError; end
@@ -33,10 +34,16 @@ module Streams
def allocate!
ensure_home_from_env!
# Overflow: riempi prima home; i nodi cloud/lab sono solo quando home è pieno
# (altrimenti lo warm spare ruberebbe tutte le sessioni).
home = StreamNode.find_by(slug: HOME_SLUG)
return home if home&.allocatable?
node = StreamNode.ready
.where.not(slug: HOME_SLUG)
.to_a
.select(&:allocatable?)
.min_by { |n| [n.active_publishers, n.role == "home" ? 1 : 0, n.slug] }
.min_by { |n| [n.active_publishers, n.slug] }
raise NoCapacityError, "Nessun nodo streaming con slot liberi" if node.nil?