Skip to content

Commit 0003cec

Browse files
committed
vmdriver(vz): Wait for Start() to complete on server side
Signed-off-by: Ansuman Sahoo <anshumansahoo500@gmail.com>
1 parent 8b72891 commit 0003cec

File tree

3 files changed

+41
-3
lines changed

3 files changed

+41
-3
lines changed

pkg/driver/external/client/methods.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,22 @@ func (d *DriverClient) Start(ctx context.Context) (chan error, error) {
6767
return nil, err
6868
}
6969

70+
// Blocking to receive an initial response to ensure Start() is initiated
71+
// at the server-side.
72+
for {
73+
initialResp, err := stream.Recv()
74+
if err != nil {
75+
d.logger.Errorf("Error receiving initial response from driver start: %v", err)
76+
return nil, err
77+
}
78+
if initialResp.Success {
79+
break
80+
}
81+
}
82+
7083
errCh := make(chan error, 1)
7184
go func() {
85+
defer stream.CloseSend()
7286
for {
7387
errorStream, err := stream.Recv()
7488
if err != nil {

pkg/driver/external/server/methods.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ func (s *DriverServer) Start(_ *emptypb.Empty, stream pb.Driver_StartServer) err
2929
return status.Errorf(codes.Internal, "failed to start driver: %v", err)
3030
}
3131

32+
// First send a success response upon receiving the errChan to unblock the client
33+
// and start receiving errors (if any).
34+
if err := stream.Send(&pb.StartResponse{Success: true}); err != nil {
35+
s.logger.Errorf("Failed to send success response: %v", err)
36+
return status.Errorf(codes.Internal, "failed to send success response: %v", err)
37+
}
38+
3239
for {
3340
select {
3441
case err, ok := <-errChan:

pkg/driver/vz/vz_driver_darwin.go

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -440,7 +440,24 @@ func (l *LimaVzDriver) ForwardGuestAgent() bool {
440440
return l.vSockPort == 0 && l.virtioPort == ""
441441
}
442442

443-
func (l *LimaVzDriver) AdditionalSetupForSSH(_ context.Context) error {
444-
<-l.waitSSHLocalPortAccessible
445-
return nil
443+
func (l *LimaVzDriver) AdditionalSetupForSSH(ctx context.Context) error {
444+
ticker := time.NewTicker(100 * time.Millisecond)
445+
defer ticker.Stop()
446+
447+
timeout := time.After(60 * time.Second)
448+
449+
for {
450+
if l.waitSSHLocalPortAccessible != nil {
451+
<-l.waitSSHLocalPortAccessible
452+
return nil
453+
}
454+
455+
select {
456+
case <-ctx.Done():
457+
return ctx.Err()
458+
case <-timeout:
459+
return errors.New("timeout waiting for Start() to initialize")
460+
case <-ticker.C:
461+
}
462+
}
446463
}

0 commit comments

Comments
 (0)