Skip to content

Commit d058ab9

Browse files
committed
driver(external): implement bidirectional streaming for GuestAgentConn()
Signed-off-by: Ansuman Sahoo <[email protected]>
1 parent b97d7a9 commit d058ab9

File tree

6 files changed

+47
-44
lines changed

6 files changed

+47
-44
lines changed

pkg/driver/external/client/methods.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ func (d *DriverClient) ForwardGuestAgent() bool {
253253
func (d *DriverClient) GuestAgentConn(ctx context.Context) (net.Conn, error) {
254254
d.logger.Debug("Getting guest agent connection")
255255

256-
connStream, err := d.DriverSvc.GuestAgentConn(ctx, &emptypb.Empty{})
256+
connStream, err := d.DriverSvc.GuestAgentConn(ctx)
257257
if err != nil {
258258
d.logger.Errorf("Failed to get guest agent connection: %v", err)
259259
return nil, err

pkg/driver/external/driver.pb.go

Lines changed: 17 additions & 17 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/driver/external/driver.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ service Driver {
2424
rpc Unregister(google.protobuf.Empty) returns (google.protobuf.Empty);
2525

2626
rpc ForwardGuestAgent(google.protobuf.Empty) returns (ForwardGuestAgentResponse);
27-
rpc GuestAgentConn(google.protobuf.Empty) returns (stream GuestAgentConnResponse);
27+
rpc GuestAgentConn(stream GuestAgentConnStream) returns (stream GuestAgentConnStream);
2828

2929
rpc SetConfig(SetConfigRequest) returns (google.protobuf.Empty);
3030

@@ -73,6 +73,6 @@ message ForwardGuestAgentResponse {
7373
bool should_forward = 1;
7474
}
7575

76-
message GuestAgentConnResponse {
76+
message GuestAgentConnStream {
7777
bytes net_conn = 1;
7878
}

pkg/driver/external/driver_grpc.pb.go

Lines changed: 9 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/driver/external/server/methods.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,31 @@ func (s *DriverServer) SetConfig(ctx context.Context, req *pb.SetConfigRequest)
6464
return &emptypb.Empty{}, nil
6565
}
6666

67-
// NOTE: If this doesn't work, try with bidirectional streaming(like in buildkit) and see if that helps.
68-
func (s *DriverServer) GuestAgentConn(empty *emptypb.Empty, stream pb.Driver_GuestAgentConnServer) error {
67+
func (s *DriverServer) GuestAgentConn(stream pb.Driver_GuestAgentConnServer) error {
6968
s.logger.Debug("Received GuestAgentConn request")
7069
conn, err := s.driver.GuestAgentConn(stream.Context())
7170
if err != nil {
7271
s.logger.Errorf("GuestAgentConn failed: %v", err)
7372
return err
7473
}
7574

76-
defer conn.Close()
75+
go func() {
76+
for {
77+
msg, err := stream.Recv()
78+
if err != nil {
79+
return
80+
}
81+
if len(msg.NetConn) > 0 {
82+
_, err = conn.Write(msg.NetConn)
83+
if err != nil {
84+
s.logger.Errorf("Error writing to connection: %v", err)
85+
return
86+
}
87+
}
88+
}
89+
}()
7790

7891
buf := make([]byte, 32*1<<10)
79-
8092
for {
8193
n, err := conn.Read(buf)
8294
if err != nil {
@@ -86,7 +98,7 @@ func (s *DriverServer) GuestAgentConn(empty *emptypb.Empty, stream pb.Driver_Gue
8698
return status.Errorf(codes.Internal, "error reading: %v", err)
8799
}
88100

89-
msg := &pb.GuestAgentConnResponse{NetConn: buf[:n]}
101+
msg := &pb.GuestAgentConnStream{NetConn: buf[:n]}
90102
if err := stream.Send(msg); err != nil {
91103
return err
92104
}

pkg/store/filenames/filenames.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ const (
5959
HostAgentSock = "ha.sock"
6060
HostAgentStdoutLog = "ha.stdout.log"
6161
HostAgentStderrLog = "ha.stderr.log"
62-
ExternalDriverStderrLog = "ed.stderr.log"
62+
ExternalDriverStderrLog = "driver.stderr.log"
6363
VzIdentifier = "vz-identifier"
6464
VzEfi = "vz-efi" // efi variable store
6565
QemuEfiCodeFD = "qemu-efi-code.fd" // efi code; not always created

0 commit comments

Comments
 (0)