linkerd2/controller/api/public/stream_client.go

40 lines
1.1 KiB
Go

package public
import (
"bufio"
"context"
"net/http"
"github.com/linkerd/linkerd2/pkg/protohttp"
log "github.com/sirupsen/logrus"
"google.golang.org/grpc/metadata"
)
type streamClient struct {
ctx context.Context
reader *bufio.Reader
}
// satisfy the ClientStream interface
func (c streamClient) Header() (metadata.MD, error) { return nil, nil }
func (c streamClient) Trailer() metadata.MD { return nil }
func (c streamClient) CloseSend() error { return nil }
func (c streamClient) Context() context.Context { return c.ctx }
func (c streamClient) SendMsg(interface{}) error { return nil }
func (c streamClient) RecvMsg(interface{}) error { return nil }
func getStreamClient(ctx context.Context, httpRsp *http.Response) (streamClient, error) {
if err := protohttp.CheckIfResponseHasError(httpRsp); err != nil {
httpRsp.Body.Close()
return streamClient{}, err
}
go func() {
<-ctx.Done()
log.Debug("Closing response body after context marked as done")
httpRsp.Body.Close()
}()
return streamClient{ctx: ctx, reader: bufio.NewReader(httpRsp.Body)}, nil
}