Fix some comments

This commit is contained in:
iamqizhao
2015-02-13 16:43:51 -08:00
parent a205ce5f65
commit fe60321708
3 changed files with 22 additions and 41 deletions

View File

@ -96,7 +96,7 @@ type options struct {
maxConcurrentStreams uint32 maxConcurrentStreams uint32
} }
// ServerOption sets options. // A ServerOption sets options.
type ServerOption func(*options) type ServerOption func(*options)
// MaxConcurrentStreams returns an Option that will apply a limit on the number // MaxConcurrentStreams returns an Option that will apply a limit on the number
@ -312,7 +312,7 @@ func (s *Server) handleStream(t transport.ServerTransport, stream *transport.Str
t.WriteStatus(stream, codes.Unimplemented, fmt.Sprintf("unknown method %v", method)) t.WriteStatus(stream, codes.Unimplemented, fmt.Sprintf("unknown method %v", method))
} }
// Stop stops the gRPC server. Once it returns, the server stops accepting // Stop stops the gRPC server. Once Stop returns, the server stops accepting
// connection requests and closes all the connected connections. // connection requests and closes all the connected connections.
func (s *Server) Stop() { func (s *Server) Stop() {
s.mu.Lock() s.mu.Lock()
@ -329,9 +329,9 @@ func (s *Server) Stop() {
} }
} }
// CloseConns closes all exiting transports but keeps s.lis accepting new // TestingCloseConns closes all exiting transports but keeps s.lis accepting new
// connections. This is for test only now. // connections. This is for test only now.
func (s *Server) CloseConns() { func (s *Server) TestingCloseConns() {
s.mu.Lock() s.mu.Lock()
for c := range s.conns { for c := range s.conns {
c.Close() c.Close()

View File

@ -47,12 +47,17 @@ import (
type Stream interface { type Stream interface {
// Context returns the context for this stream. // Context returns the context for this stream.
Context() context.Context Context() context.Context
// SendProto blocks until it sends a proto message out or some // SendProto blocks until it sends m, the stream is done or the stream
// error happens. // breaks.
SendProto(proto.Message) error // On error, it aborts the stream and returns an RPC status on client
// RecvProto blocks until either a proto message is received or some // side. On server side, it simply returns the error to the caller.
// error happens. // SendProto is called by generated code.
RecvProto(proto.Message) error SendProto(m proto.Message) error
// RecvProto blocks until it receives a proto message or the stream is
// done. On client side, it returns io.EOF when the stream is done. On
// any other error, it aborts the streama nd returns an RPC status. On
// server side, it simply returns the error to the caller.
RecvProto(m proto.Message) error
} }
// ClientStream defines the interface a client stream has to satify. // ClientStream defines the interface a client stream has to satify.
@ -64,9 +69,11 @@ type ClientStream interface {
// after stream.Recv() returns non-nil error (including io.EOF) for // after stream.Recv() returns non-nil error (including io.EOF) for
// bi-directional streaming and server streaming or stream.CloseAndRecv() // bi-directional streaming and server streaming or stream.CloseAndRecv()
// returns for client streaming in order to receive trailer metadata if // returns for client streaming in order to receive trailer metadata if
// present. // present. Otherwise, it could returns an empty MD even though trailer
// is present.
Trailer() metadata.MD Trailer() metadata.MD
// CloseSend closes the send direction of the stream. // CloseSend closes the send direction of the stream. It closes the stream
// when non-nil error is met.
CloseSend() error CloseSend() error
Stream Stream
} }
@ -101,29 +108,18 @@ type clientStream struct {
p *parser p *parser
} }
// Context returns the clientStream's associated context.
func (cs *clientStream) Context() context.Context { func (cs *clientStream) Context() context.Context {
return cs.s.Context() return cs.s.Context()
} }
// Header returns the header metedata received from the server if there
// is any. Empty metadata.MD is returned if there is no header metadata.
// It blocks if the metadata is not ready to read.
func (cs *clientStream) Header() (md metadata.MD, err error) { func (cs *clientStream) Header() (md metadata.MD, err error) {
return cs.s.Header() return cs.s.Header()
} }
// Trailer returns the trailer metadata from the server. It must be called
// after stream.Recv() returns non-nil error (including io.EOF) for
// bi-directional streaming and server streaming or stream.CloseAndRecv()
// returns for client streaming in order to receive trailer metadata if
// present.
func (cs *clientStream) Trailer() metadata.MD { func (cs *clientStream) Trailer() metadata.MD {
return cs.s.Trailer() return cs.s.Trailer()
} }
// SendProto blocks until m is sent out or an error happens. It closes the
// stream when a non-nil error is met. This is called by generated code.
func (cs *clientStream) SendProto(m proto.Message) (err error) { func (cs *clientStream) SendProto(m proto.Message) (err error) {
defer func() { defer func() {
if err == nil || err == io.EOF { if err == nil || err == io.EOF {
@ -141,10 +137,6 @@ func (cs *clientStream) SendProto(m proto.Message) (err error) {
return cs.t.Write(cs.s, out, &transport.Options{Last: false}) return cs.t.Write(cs.s, out, &transport.Options{Last: false})
} }
// RecvProto blocks until it receives a proto message or an error happens.
// When an non-nil error (including EOF which indicates the success of an
// RPC) is met, it also closes the stream and returns the RPC status to
// the caller. This is called by generated code.
func (cs *clientStream) RecvProto(m proto.Message) (err error) { func (cs *clientStream) RecvProto(m proto.Message) (err error) {
err = recvProto(cs.p, m) err = recvProto(cs.p, m)
if err == nil { if err == nil {
@ -163,8 +155,6 @@ func (cs *clientStream) RecvProto(m proto.Message) (err error) {
return toRPCErr(err) return toRPCErr(err)
} }
// CloseSend closes the send direction of the stream. It closes the stream
// when non-nil error is met.
func (cs *clientStream) CloseSend() (err error) { func (cs *clientStream) CloseSend() (err error) {
err = cs.t.Write(cs.s, nil, &transport.Options{Last: true}) err = cs.t.Write(cs.s, nil, &transport.Options{Last: true})
if err == nil || err == io.EOF { if err == nil || err == io.EOF {
@ -180,7 +170,8 @@ func (cs *clientStream) CloseSend() (err error) {
// ServerStream defines the interface a server stream has to satisfy. // ServerStream defines the interface a server stream has to satisfy.
type ServerStream interface { type ServerStream interface {
// SendHeader sends the header metadata. It should not be called // SendHeader sends the header metadata. It should not be called
// after SendProto. // after SendProto. It fails if called multiple times or if
// called after SendProto.
SendHeader(metadata.MD) error SendHeader(metadata.MD) error
// SetTrailer sets the trailer metadata which will be sent with the // SetTrailer sets the trailer metadata which will be sent with the
// RPC status. // RPC status.
@ -197,20 +188,14 @@ type serverStream struct {
statusDesc string statusDesc string
} }
// Context returns the associated context so that server applications can
// manipulate it.
func (ss *serverStream) Context() context.Context { func (ss *serverStream) Context() context.Context {
return ss.s.Context() return ss.s.Context()
} }
// SendHeader sends header metadata. It fails if called multiple times or if
// called after SendProto.
func (ss *serverStream) SendHeader(md metadata.MD) error { func (ss *serverStream) SendHeader(md metadata.MD) error {
return ss.t.WriteHeader(ss.s, md) return ss.t.WriteHeader(ss.s, md)
} }
// SetTrailer sends trailer metadata. The metadata will be sent with the final
// RPC status.
func (ss *serverStream) SetTrailer(md metadata.MD) { func (ss *serverStream) SetTrailer(md metadata.MD) {
if md.Len() == 0 { if md.Len() == 0 {
return return
@ -219,8 +204,6 @@ func (ss *serverStream) SetTrailer(md metadata.MD) {
return return
} }
// SendProto blocks until m is sent out or an error is met. This is called by
// generated code.
func (ss *serverStream) SendProto(m proto.Message) error { func (ss *serverStream) SendProto(m proto.Message) error {
out, err := encode(m, compressionNone) out, err := encode(m, compressionNone)
if err != nil { if err != nil {
@ -230,8 +213,6 @@ func (ss *serverStream) SendProto(m proto.Message) error {
return ss.t.Write(ss.s, out, &transport.Options{Last: false}) return ss.t.Write(ss.s, out, &transport.Options{Last: false})
} }
// RecvProto blocks until it receives a message or an error is met. This is
// called by generated code.
func (ss *serverStream) RecvProto(m proto.Message) error { func (ss *serverStream) RecvProto(m proto.Message) error {
return recvProto(ss.p, m) return recvProto(ss.p, m)
} }

View File

@ -318,7 +318,7 @@ func TestRetry(t *testing.T) {
// The server shuts down the network connection to make a // The server shuts down the network connection to make a
// transport error which will be detected by the client side // transport error which will be detected by the client side
// code. // code.
s.CloseConns() s.TestingCloseConns()
wg.Done() wg.Done()
}() }()
// All these RPCs should succeed eventually. // All these RPCs should succeed eventually.