Reading the go and python docs seem to indicate that the implied contract 
for response streaming is that the termination of the data stream is the 
sole responsibility of the server.

Given that, if a client decides it has consumed enough and wants to move 
on, it doesn't imply that the stream has been fully consumed, just that a 
client wants to move on.

This makes me think that the call level (on the context) and not the stream 
level is the appropriate place to terminate from a client. Is it possible 
that CloseSend() exists for implementation purposes and not to close the 
stream from the client side?

On Monday, February 6, 2017 at 9:37:15 AM UTC-6, Josh Humphries wrote:
>
> On the client, the CloseSend method is "half-closing" the stream. So it 
> closes the request/upload half of the stream. The stream remains open until 
> the server closes the other half: the response/download part of the stream. 
> Cancelling the stream also closes it (as would the channel being 
> disconnected or the call timing out).
>
>
>
> ----
>
> Josh Humphries
>
> FullStory <https://www.fullstory.com/>  |  Atlanta, GA
>
> Software Engineer
>
> [email protected] <javascript:>
>
> On Mon, Feb 6, 2017 at 10:29 AM, Michael Bond <[email protected] 
> <javascript:>> wrote:
>
>> Hey, trying to make sure I'm doing this correctly.
>>
>> Right now I'm having issues with closing streams started with a context 
>> that is passed around and exists for quite awhile.
>>
>> In this example "ctx" is passed around to many go routines, I want to 
>> keep "ctx" around but passing it to "grpcStream" seems to keep the stream 
>> from actually closing. What I did below fixed the issue but I wanted to 
>> know if it is needed to pass a child context and cancel it for the stream 
>> to actually close. Is CloseSend() not sufficient if the context is still 
>> alive?
>>
>> log.Println("stream starting")
>> streamCtx, cancel := context.WithCancel(ctx)
>> defer cancel()
>> stream, err := grpcStream(streamCtx, otherArgs)
>> if err != nil {
>>     errCh <- err
>>     return
>> }
>> defer stream.CloseSend()
>> defer log.Println("closing stream")
>>
>> Thanks!
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> Visit this group at https://groups.google.com/group/grpc-io.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/grpc-io/85470940-69e3-4f4c-aed2-31a3242841a3%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/grpc-io/85470940-69e3-4f4c-aed2-31a3242841a3%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/grpc-io.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/60b48841-af68-4f00-be5b-bf473b64ba4e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to