Skip to content

Commit 7d9a447

Browse files
Merge pull request #132 from caozhipan/fix-activeQPS-zero
setDeadLine & retry
2 parents fbfb3ac + d719e31 commit 7d9a447

File tree

1 file changed

+18
-32
lines changed

1 file changed

+18
-32
lines changed

pkg/util/fasthttp_client.go

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -202,23 +202,17 @@ type clientConn struct {
202202

203203
// Do do a http request
204204
func (c *FastHTTPClient) Do(req *fasthttp.Request, addr string, option *HTTPOption) (*fasthttp.Response, error) {
205-
resp, retry, err := c.do(req, addr, option)
206-
if err != nil && retry && isIdempotent(req) {
207-
resp, _, err = c.do(req, addr, option)
208-
}
209-
if err == io.EOF {
210-
err = fasthttp.ErrConnectionClosed
211-
}
205+
resp, err := c.do(req, addr, option)
212206
return resp, err
213207
}
214208

215-
func (c *FastHTTPClient) do(req *fasthttp.Request, addr string, option *HTTPOption) (*fasthttp.Response, bool, error) {
209+
func (c *FastHTTPClient) do(req *fasthttp.Request, addr string, option *HTTPOption) (*fasthttp.Response, error) {
216210
resp := fasthttp.AcquireResponse()
217-
ok, err := c.doNonNilReqResp(req, resp, addr, option)
218-
return resp, ok, err
211+
err := c.doNonNilReqResp(req, resp, addr, option)
212+
return resp, err
219213
}
220214

221-
func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.Response, addr string, option *HTTPOption) (bool, error) {
215+
func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.Response, addr string, option *HTTPOption) error {
222216
if req == nil {
223217
panic("BUG: req cannot be nil")
224218
}
@@ -248,7 +242,7 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
248242

249243
cc, err := hc.acquireConn(addr)
250244
if err != nil {
251-
return false, err
245+
return err
252246
}
253247
conn := cc.c
254248

@@ -258,13 +252,11 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
258252
// of the last write deadline exceeded.
259253
// See https://github.com/golang/go/issues/15133 for details.
260254
currentTime := time.Now()
261-
if currentTime.Sub(cc.lastWriteDeadlineTime) > (opt.WriteTimeout >> 2) {
262-
if err = conn.SetWriteDeadline(currentTime.Add(opt.WriteTimeout)); err != nil {
263-
hc.closeConn(cc)
264-
return true, err
265-
}
266-
cc.lastWriteDeadlineTime = currentTime
255+
if err = conn.SetWriteDeadline(currentTime.Add(opt.WriteTimeout)); err != nil {
256+
hc.closeConn(cc)
257+
return err
267258
}
259+
cc.lastWriteDeadlineTime = currentTime
268260
}
269261

270262
resetConnection := false
@@ -286,7 +278,7 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
286278
if err != nil {
287279
c.releaseWriter(bw)
288280
hc.closeConn(cc)
289-
return true, err
281+
return err
290282
}
291283
c.releaseWriter(bw)
292284

@@ -296,13 +288,11 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
296288
// of the last read deadline exceeded.
297289
// See https://github.com/golang/go/issues/15133 for details.
298290
currentTime := time.Now()
299-
if currentTime.Sub(cc.lastReadDeadlineTime) > (opt.ReadTimeout >> 2) {
300-
if err = conn.SetReadDeadline(currentTime.Add(opt.ReadTimeout)); err != nil {
301-
hc.closeConn(cc)
302-
return true, err
303-
}
304-
cc.lastReadDeadlineTime = currentTime
291+
if err = conn.SetReadDeadline(currentTime.Add(opt.ReadTimeout)); err != nil {
292+
hc.closeConn(cc)
293+
return err
305294
}
295+
cc.lastReadDeadlineTime = currentTime
306296
}
307297

308298
if !req.Header.IsGet() && req.Header.IsHead() {
@@ -314,9 +304,9 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
314304
c.releaseReader(br)
315305
hc.closeConn(cc)
316306
if err == io.EOF {
317-
return true, err
307+
return err
318308
}
319-
return false, err
309+
return err
320310
}
321311
c.releaseReader(br)
322312

@@ -326,7 +316,7 @@ func (c *FastHTTPClient) doNonNilReqResp(req *fasthttp.Request, resp *fasthttp.R
326316
hc.releaseConn(cc)
327317
}
328318

329-
return false, err
319+
return err
330320
}
331321

332322
func dialAddr(addr string) (net.Conn, error) {
@@ -369,10 +359,6 @@ func (c *FastHTTPClient) releaseReader(br *bufio.Reader) {
369359
c.readerPool.Put(br)
370360
}
371361

372-
func isIdempotent(req *fasthttp.Request) bool {
373-
return req.Header.IsGet() || req.Header.IsHead() || req.Header.IsPut()
374-
}
375-
376362
func acquireClientConn(conn net.Conn) *clientConn {
377363
v := clientConnPool.Get()
378364
if v == nil {

0 commit comments

Comments
 (0)