@@ -102,7 +102,7 @@ func (c *remotingClient) InvokeSync(ctx context.Context, addr string, request *R
102102 c .responseTable .Store (resp .Opaque , resp )
103103 defer c .responseTable .Delete (request .Opaque )
104104
105- err = c .sendRequest (conn , request )
105+ err = c .sendRequest (ctx , conn , request )
106106 if err != nil {
107107 return nil , err
108108 }
@@ -120,7 +120,7 @@ func (c *remotingClient) InvokeAsync(ctx context.Context, addr string, request *
120120 resp := NewResponseFuture (ctx , request .Opaque , callback )
121121 c .responseTable .Store (resp .Opaque , resp )
122122
123- err = c .sendRequest (conn , request )
123+ err = c .sendRequest (ctx , conn , request )
124124 if err != nil {
125125 c .responseTable .Delete (request .Opaque )
126126 return err
@@ -146,11 +146,11 @@ func (c *remotingClient) InvokeOneWay(ctx context.Context, addr string, request
146146 if err != nil {
147147 return err
148148 }
149- return c .sendRequest (conn , request )
149+ return c .sendRequest (ctx , conn , request )
150150}
151151
152152func (c * remotingClient ) connect (ctx context.Context , addr string ) (* tcpConnWrapper , error ) {
153- //it needs additional locker.
153+ // it needs additional locker.
154154 c .connectionLocker .Lock ()
155155 defer c .connectionLocker .Unlock ()
156156 conn , ok := c .connectionTable .Load (addr )
@@ -246,7 +246,7 @@ func (c *remotingClient) processCMD(cmd *RemotingCommand, r *tcpConnWrapper) {
246246 if res != nil {
247247 res .Opaque = cmd .Opaque
248248 res .Flag |= 1 << 0
249- err := c .sendRequest (r , res )
249+ err := c .sendRequest (context . Background (), r , res )
250250 if err != nil {
251251 rlog .Warning ("send response to broker error" , map [string ]interface {}{
252252 rlog .LogKeyUnderlayError : err ,
@@ -297,23 +297,27 @@ func (c *remotingClient) createScanner(r io.Reader) *bufio.Scanner {
297297 return scanner
298298}
299299
300- func (c * remotingClient ) sendRequest (conn * tcpConnWrapper , request * RemotingCommand ) error {
300+ func (c * remotingClient ) sendRequest (ctx context. Context , conn * tcpConnWrapper , request * RemotingCommand ) error {
301301 var err error
302302 if c .interceptor != nil {
303- err = c .interceptor (context . Background () , request , nil , func (ctx context.Context , req , reply interface {}) error {
304- return c .doRequest (conn , request )
303+ err = c .interceptor (ctx , request , nil , func (ctx context.Context , req , reply interface {}) error {
304+ return c .doRequest (ctx , conn , request )
305305 })
306306 } else {
307- err = c .doRequest (conn , request )
307+ err = c .doRequest (ctx , conn , request )
308308 }
309309 return err
310310}
311311
312- func (c * remotingClient ) doRequest (conn * tcpConnWrapper , request * RemotingCommand ) error {
312+ func (c * remotingClient ) doRequest (ctx context. Context , conn * tcpConnWrapper , request * RemotingCommand ) error {
313313 conn .Lock ()
314314 defer conn .Unlock ()
315315
316- err := conn .Conn .SetWriteDeadline (time .Now ().Add (c .config .WriteTimeout ))
316+ deadline , ok := ctx .Deadline ()
317+ if ! ok {
318+ deadline = time .Now ().Add (c .config .WriteTimeout )
319+ }
320+ err := conn .Conn .SetWriteDeadline (deadline )
317321 if err != nil {
318322 rlog .Error ("conn error, close connection" , map [string ]interface {}{
319323 rlog .LogKeyUnderlayError : err ,
0 commit comments