Skip to content

[shimV2] bind GCS/host hvsock listeners before starting the UVM#2723

Merged
rawahars merged 3 commits intomicrosoft:mainfrom
rawahars:fix_lcow_v2_shim
May 7, 2026
Merged

[shimV2] bind GCS/host hvsock listeners before starting the UVM#2723
rawahars merged 3 commits intomicrosoft:mainfrom
rawahars:fix_lcow_v2_shim

Conversation

@rawahars
Copy link
Copy Markdown
Contributor

@rawahars rawahars commented May 6, 2026

Summary

Refactors VM startup and GCS connection setup to eliminate races between host listener creation and in-VM guest dials.
Changes

  • Two-phase GCS connection: Split setup into PrepareConnection (binds host hvsock listener before VM start) and CreateConnection (accepts the dial after VM start). Guarantees the host is listening when the guest connects. Both calls are idempotent for the same service ID.
  • Synchronous listener setup: setupEntropyListener and setupLoggingListener (LCOW + WCOW) are now synchronous and return errors, so listener failures are caught before VM boot instead of in background goroutines.
  • Resource cleanup: vsock listeners are reliably closed on both success and error paths to prevent leaks. CloseConnection tears down both the active connection and any pending listener.
  • AcceptConnection hardening: Uses a buffered result channel and closes the listener on context cancellation to avoid goroutine leaks.

Why

Previously, listeners were set up asynchronously and the GCS handshake could race the guest's dial, leading to flaky startup failures. The new flow makes ordering explicit and errors fail fast.

Testing

Existing LCOW/WCOW startup paths exercised; no behavior change on the happy path.

@rawahars rawahars requested a review from a team as a code owner May 6, 2026 20:11
- Split guestmanager.Guest.CreateConnection into PrepareConnection
  (binds the GCS hvsock listener) + CreateConnection (accepts and runs
  the handshake) so the host is listening before the guest dials.
- Controller.StartVM now calls PrepareConnection and the entropy/logging
  listener setup before uvm.Start, and propagates their errors.
- LCOW/WCOW setupEntropyListener/setupLoggingListener now bind the
  hvsock listener synchronously and only Accept inside the goroutine;
  return error instead of swallowing/logging it.
- CloseConnection also closes a prepared-but-unaccepted listener.
- vmmanager.AcceptConnection: buffer the result channel to avoid a
  goroutine leak and close the listener on context cancellation.

Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
@rawahars rawahars force-pushed the fix_lcow_v2_shim branch from 9087a0b to 0152253 Compare May 6, 2026 20:19
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
Comment thread internal/controller/vm/vm_wcow.go
Signed-off-by: Harsh Rawat <harshrawat@microsoft.com>
@rawahars rawahars merged commit fa5c029 into microsoft:main May 7, 2026
32 of 33 checks passed
@rawahars rawahars deleted the fix_lcow_v2_shim branch May 7, 2026 18:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants