Skip to content

Commit 7517ecf

Browse files
author
rsora
committed
Implement copyStream
1 parent e5d844c commit 7517ecf

File tree

1 file changed

+20
-11
lines changed

1 file changed

+20
-11
lines changed

commands/daemon/debug.go

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,23 +43,32 @@ func (s *DebugService) Debug(stream dbg.Debug_DebugServer) error {
4343
return fmt.Errorf("first message must contain debug request, not data")
4444
}
4545

46+
// launch debug recipe attaching stdin and out to grpc streaming
47+
resp, err := cmd.Debug(stream.Context(), req,
48+
copyStream(func() ([]byte, error) {
49+
command, err := stream.Recv()
50+
return command.GetData(), err
51+
}),
52+
feedStream(func(data []byte) {
53+
stream.Send(&dbg.DebugResp{Data: data})
54+
}))
55+
if err != nil {
56+
return (err)
57+
}
58+
return stream.Send(resp)
59+
}
60+
61+
func copyStream(streamIn func() ([]byte, error)) io.Reader {
62+
4663
r, w := io.Pipe()
4764
go func() {
4865
for {
49-
if command, err := stream.Recv(); err != nil {
66+
if data, err := streamIn(); err != nil {
5067
return
51-
} else if _, err := w.Write(command.GetData()); err != nil {
68+
} else if _, err := w.Write(data); err != nil {
5269
return
5370
}
5471
}
5572
}()
56-
57-
// launch debug recipe attaching stdin and out to grpc streaming
58-
resp, err := cmd.Debug(stream.Context(), req, r, feedStream(func(data []byte) {
59-
stream.Send(&dbg.DebugResp{Data: data})
60-
}))
61-
if err != nil {
62-
return (err)
63-
}
64-
return stream.Send(resp)
73+
return r
6574
}

0 commit comments

Comments
 (0)