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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user