@@ -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.
6168func 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