Skip to content

Commit 80bc1ef

Browse files
xibzIRCody
authored andcommitted
Adding default vsock connection timeout
Prior to this commit, io would be proxied from the VM to the host, but no timeout is provided to the proxy. So if vsock has an issue, the io would forever try to connect to the vsock leading to an extraneous amount of errors. This commit adds a simple default timeout, 5 second, which will eliminate the extraneous amount of logs Signed-off-by: xibz <impactbchang@gmail.com>
1 parent 056fce3 commit 80bc1ef

File tree

2 files changed

+11
-8
lines changed

2 files changed

+11
-8
lines changed

internal/vm/vsock.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,16 @@ func (l vsockListener) Addr() net.Addr {
127127

128128
// VSockDialConnector returns an IOConnector for establishing vsock connections
129129
// that are dialed from the host to a guest listener.
130-
func VSockDialConnector(udsPath string, port uint32) IOConnector {
130+
func VSockDialConnector(timeout time.Duration, udsPath string, port uint32) IOConnector {
131131
return func(procCtx context.Context, logger *logrus.Entry) <-chan IOConnectorResult {
132132
returnCh := make(chan IOConnectorResult)
133133

134134
go func() {
135135
defer close(returnCh)
136+
timeoutCtx, cancel := context.WithTimeout(procCtx, timeout)
137+
defer cancel()
136138

137-
conn, err := VSockDial(procCtx, logger, udsPath, port)
139+
conn, err := VSockDial(timeoutCtx, logger, udsPath, port)
138140
returnCh <- IOConnectorResult{
139141
ReadWriteCloser: conn,
140142
Err: err,

runtime/service.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,10 @@ const (
7676
// Firecracker's API server. The channel is closed once the VM starts.
7777
vmReadyTimeout = 5 * time.Second
7878

79-
defaultCreateVMTimeout = 20 * time.Second
80-
defaultStopVMTimeout = 5 * time.Second
81-
defaultShutdownTimeout = 5 * time.Second
79+
defaultCreateVMTimeout = 20 * time.Second
80+
defaultStopVMTimeout = 5 * time.Second
81+
defaultShutdownTimeout = 5 * time.Second
82+
defaultVSockConnectTimeout = 5 * time.Second
8283

8384
jailerStopTimeout = 3 * time.Second
8485

@@ -859,22 +860,22 @@ func (s *service) newIOProxy(logger *logrus.Entry, stdin, stdout, stderr string,
859860
if stdin != "" {
860861
stdinConnectorPair = &vm.IOConnectorPair{
861862
ReadConnector: vm.ReadFIFOConnector(stdin),
862-
WriteConnector: vm.VSockDialConnector(relVSockPath, extraData.StdinPort),
863+
WriteConnector: vm.VSockDialConnector(defaultVSockConnectTimeout, relVSockPath, extraData.StdinPort),
863864
}
864865
}
865866

866867
var stdoutConnectorPair *vm.IOConnectorPair
867868
if stdout != "" {
868869
stdoutConnectorPair = &vm.IOConnectorPair{
869-
ReadConnector: vm.VSockDialConnector(relVSockPath, extraData.StdoutPort),
870+
ReadConnector: vm.VSockDialConnector(defaultVSockConnectTimeout, relVSockPath, extraData.StdoutPort),
870871
WriteConnector: vm.WriteFIFOConnector(stdout),
871872
}
872873
}
873874

874875
var stderrConnectorPair *vm.IOConnectorPair
875876
if stderr != "" {
876877
stderrConnectorPair = &vm.IOConnectorPair{
877-
ReadConnector: vm.VSockDialConnector(relVSockPath, extraData.StderrPort),
878+
ReadConnector: vm.VSockDialConnector(defaultVSockConnectTimeout, relVSockPath, extraData.StderrPort),
878879
WriteConnector: vm.WriteFIFOConnector(stderr),
879880
}
880881
}

0 commit comments

Comments
 (0)