fix(server): retry eye capture discovery

This commit is contained in:
Brad Stein 2026-04-25 06:18:27 -03:00
parent 97abb938c5
commit 5c79f20c49
6 changed files with 25 additions and 8 deletions

6
Cargo.lock generated
View File

@ -1642,7 +1642,7 @@ checksum = "09edd9e8b54e49e587e4f6295a7d29c3ea94d469cb40ab8ca70b288248a81db2"
[[package]]
name = "lesavka_client"
version = "0.13.16"
version = "0.13.17"
dependencies = [
"anyhow",
"async-stream",
@ -1676,7 +1676,7 @@ dependencies = [
[[package]]
name = "lesavka_common"
version = "0.13.16"
version = "0.13.17"
dependencies = [
"anyhow",
"base64",
@ -1688,7 +1688,7 @@ dependencies = [
[[package]]
name = "lesavka_server"
version = "0.13.16"
version = "0.13.17"
dependencies = [
"anyhow",
"base64",

View File

@ -4,7 +4,7 @@ path = "src/main.rs"
[package]
name = "lesavka_client"
version = "0.13.16"
version = "0.13.17"
edition = "2024"
[dependencies]

View File

@ -1,6 +1,6 @@
[package]
name = "lesavka_common"
version = "0.13.16"
version = "0.13.17"
edition = "2024"
build = "build.rs"

View File

@ -320,7 +320,7 @@ if systemctl list-unit-files | grep -q '^relay.service'; then
sleep 2
fi
mapfile -t GC_CAPTURE_PAIRS < <(
discover_gc_capture_pairs() {
for dev in /dev/video*; do
props=$(sudo udevadm info -q property -n "$dev" 2>/dev/null || true)
index=$(cat "/sys/class/video4linux/$(basename "$dev")/index" 2>/dev/null || true)
@ -333,7 +333,16 @@ mapfile -t GC_CAPTURE_PAIRS < <(
fi
fi
done | sort -u
)
}
mapfile -t GC_CAPTURE_PAIRS < <(discover_gc_capture_pairs)
if [ "${#GC_CAPTURE_PAIRS[@]}" -ne 2 ]; then
for _ in {1..20}; do
sleep 0.5
mapfile -t GC_CAPTURE_PAIRS < <(discover_gc_capture_pairs)
[ "${#GC_CAPTURE_PAIRS[@]}" -eq 2 ] && break
done
fi
if [ "${#GC_CAPTURE_PAIRS[@]}" -ne 2 ]; then
echo "⚠️ GC311 capture cards not fully present; skipping udev eye-link refresh." >&2

View File

@ -10,7 +10,7 @@ bench = false
[package]
name = "lesavka_server"
version = "0.13.16"
version = "0.13.17"
edition = "2024"
autobins = false

View File

@ -66,6 +66,14 @@ fn server_install_builds_eye_links_from_capture_nodes_only() {
SERVER_INSTALL.contains("GC_CAPTURE_PAIRS"),
"install script should assemble eye-link candidates from udev-tagged capture devices"
);
assert!(
SERVER_INSTALL.contains("discover_gc_capture_pairs"),
"install script should retry capture-node discovery instead of trusting a single early snapshot"
);
assert!(
SERVER_INSTALL.contains("for _ in {1..20}; do"),
"install script should wait briefly for both GC311 capture nodes to finish enumerating"
);
assert!(
SERVER_INSTALL.contains("[ \"$LEFT_TAG\" = \"$RIGHT_TAG\" ]"),
"install script should refuse duplicated path tags instead of assigning both eyes to one card"