Skip to content

Commit a839566

Browse files
authored
Fix error handling in filterProfiles (#3338)
1 parent e55d2de commit a839566

File tree

1 file changed

+20
-18
lines changed

1 file changed

+20
-18
lines changed

pkg/phlaredb/filter_profiles_bidi.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,13 @@ type filterResponse interface {
5757
*ingestv1.MergeSpanProfileResponse
5858
}
5959

60+
func rewriteEOFError(err error) error {
61+
if errors.Is(err, io.EOF) {
62+
return connect.NewError(connect.CodeCanceled, errors.New("client closed stream"))
63+
}
64+
return err
65+
}
66+
6067
// filterProfiles merges and dedupe profiles from different iterators and allow filtering via a bidi stream.
6168
func filterProfiles[B BidiServerMerge[Res, Req], Res filterResponse, Req filterRequest](
6269
ctx context.Context, profiles []iter.Iterator[Profile], batchProfileSize int, stream B,
@@ -130,10 +137,7 @@ func filterProfiles[B BidiServerMerge[Res, Req], Res filterResponse, Req filterR
130137
// read a batch of profiles and sends it.
131138

132139
if err != nil {
133-
if errors.Is(err, io.EOF) {
134-
return connect.NewError(connect.CodeCanceled, errors.New("client closed stream"))
135-
}
136-
return err
140+
return rewriteEOFError(err)
137141
}
138142
sp.LogFields(otlog.String("msg", "batch sent to client"))
139143

@@ -144,30 +148,28 @@ func filterProfiles[B BidiServerMerge[Res, Req], Res filterResponse, Req filterR
144148
switch s := BidiServerMerge[Res, Req](stream).(type) {
145149
case BidiServerMerge[*ingestv1.MergeProfilesStacktracesResponse, *ingestv1.MergeProfilesStacktracesRequest]:
146150
selectionResponse, err := s.Receive()
147-
if err == nil {
148-
selected = selectionResponse.Profiles
151+
if err != nil {
152+
return rewriteEOFError(err)
149153
}
154+
selected = selectionResponse.Profiles
150155
case BidiServerMerge[*ingestv1.MergeProfilesLabelsResponse, *ingestv1.MergeProfilesLabelsRequest]:
151156
selectionResponse, err := s.Receive()
152-
if err == nil {
153-
selected = selectionResponse.Profiles
157+
if err != nil {
158+
return rewriteEOFError(err)
154159
}
160+
selected = selectionResponse.Profiles
155161
case BidiServerMerge[*ingestv1.MergeProfilesPprofResponse, *ingestv1.MergeProfilesPprofRequest]:
156162
selectionResponse, err := s.Receive()
157-
if err == nil {
158-
selected = selectionResponse.Profiles
163+
if err != nil {
164+
return rewriteEOFError(err)
159165
}
166+
selected = selectionResponse.Profiles
160167
case BidiServerMerge[*ingestv1.MergeSpanProfileResponse, *ingestv1.MergeSpanProfileRequest]:
161168
selectionResponse, err := s.Receive()
162-
if err == nil {
163-
selected = selectionResponse.Profiles
164-
}
165-
}
166-
if err != nil {
167-
if errors.Is(err, io.EOF) {
168-
return connect.NewError(connect.CodeCanceled, errors.New("client closed stream"))
169+
if err != nil {
170+
return rewriteEOFError(err)
169171
}
170-
return err
172+
selected = selectionResponse.Profiles
171173
}
172174
sp.LogFields(otlog.String("msg", "selection received"))
173175
for i, k := range selected {

0 commit comments

Comments
 (0)