Seat Management
Seat management covers the full lifecycle of a game seat: updates, software deployment, pre/post session scripts, and rollback.
WARNING
Transitional state observed.SeatUpdater\\pre_session_software_updater.bat still calls net start nvgridsvc, but the newer service package includes GS2 (services\\gs2) and does not include a services\\NvGridSvc directory. Keep this flow as legacy compatibility behavior.
SeatUpdater Service
SeatUpdater handles package management for seat software.
install_seat_packages.py
Downloads and installs seat packages from the update server:
- Reads update server from userdata
LoggingServerAddresses- Falls back to
10.0.21.4if not set
- Falls back to
- Downloads package ZIP files
- Extracts to temp directory
- Executes
deploy/install.pyin each package
Exit codes:
| Code | Meaning |
|---|---|
0 | Success, no reboot needed |
212 | Success, reboot required |
500 | Cannot download packages |
600 | Production zone failure (non-fatal) |
pre_session_software_updater.bat
Runs before each session:
python install_seat_packages.py SeatPackage-Startup
net start nvgridsvcHandles exit codes 0, 2 (service start), 212, 500, 600.
post_session_backuplog.bat
Runs after each session:
python GamestreamLogsMerger.py
python AnalyzeGameStreamMergedLog.pyNvRollbackWrapper
Manages driver rollback when upgrades fail:
- Monitors driver installation success
- Rolls back to previous driver version on failure
- Maintains rollback state in Redis
Seat States
From SeatStateDef protobuf:
The seat goes through these states:
IDLE → INITIALIZING → READY → ALLOCATED → SESSION_STARTING
→ IN_SESSION → SESSION_ENDING → CLEANING_UP → IDLEError states can branch to FAILED or MAINTENANCE.
Content Volume Setup
{
"volume_setup": {
"fastInstallImageSizeGB": 250,
"imageBufferMB": 1024,
"systemDriveReservedSpaceMB": 4096
}
}The fast install scratch disk is 250GB, with 4GB reserved on the system drive.
Seat Pool
The rig's pool assignment (GS-gl40g_1.br25_2xlarge) determines:
- Which sessions get allocated to this rig
- Available resolutions and features
- Queue priority
Seat Heartbeat
The rig sends periodic heartbeats to the GSG:
{
"enableSeatHeartbeat": true,
"heartbeatPeriodMs": 60000,
"heartbeatJitterFactor": 0.1
}Heartbeat jitter (±10%) prevents thundering herd from many seats syncing simultaneously.
GameSeat2 Transition Notes
The newer service package now includes:
services\gs2\gs2-agent.exeservices\gs2\mb-repeater.exeservices\gs2\dummy-svc.exe
String analysis also exposes:
initToLegacyinitFromLegacyIsLegacyRequiredMessageBusIp/MessageBusPort
This indicates a migration period where GS2 is present while compatibility stubs for legacy seat flows remain compiled in.
Scheduler API
NGS uses v2 API for session and seat messages:
{
"SchedulerServices": {
"maxBackChannelResponsesStored": 8,
"useV2ApiForSessionMessages": true,
"useV2ApiForSeatMessages": true
}
}