Fix daemon socket ready race condition (bd-151)

Add WaitReady() channel to RPC server that signals when the socket is
listening and ready to accept connections. Previously daemon startup
waited a fixed 2 seconds which could fail if the server took longer.

Changes:
- Add readyChan to Server struct
- Signal ready after listener bind completes
- Update daemon startup to wait on WaitReady() channel
- Increase timeout to 5s with proper signaling

This fixes multi-repo daemon routing test failures where daemon would
start but not be ready to handle requests within the timeout window.

Amp-Thread-ID: https://ampcode.com/threads/T-675a2db5-b1b3-480d-a108-b003d8139d08
Co-authored-by: Amp <amp@ampcode.com>
This commit is contained in:
Steve Yegge
2025-10-19 20:43:22 -07:00
parent 0c888d13bb
commit 84a5ef7bf8
3 changed files with 39 additions and 8 deletions

View File

@@ -816,13 +816,15 @@ func runDaemonLoop(interval time.Duration, autoCommit, autoPush bool, logPath, p
}
}()
// Wait for server to start or fail
// Wait for server to be ready or fail
select {
case err := <-serverErrChan:
log("RPC server failed to start: %v", err)
os.Exit(1)
case <-time.After(2 * time.Second):
log("Global RPC server started")
case <-server.WaitReady():
log("Global RPC server ready (socket listening)")
case <-time.After(5 * time.Second):
log("WARNING: Server didn't signal ready after 5 seconds (may still be starting)")
}
// Wait for shutdown signal
@@ -883,14 +885,15 @@ func runDaemonLoop(interval time.Duration, autoCommit, autoPush bool, logPath, p
}
}()
// Wait for server to start or fail
// Wait for server to be ready or fail
select {
case err := <-serverErrChan:
log("RPC server failed to start: %v", err)
os.Exit(1)
case <-time.After(2 * time.Second):
// If no error after 2 seconds, assume success
log("RPC server started")
case <-server.WaitReady():
log("RPC server ready (socket listening)")
case <-time.After(5 * time.Second):
log("WARNING: Server didn't signal ready after 5 seconds (may still be starting)")
}
sigChan := make(chan os.Signal, 1)