client: Modify some interfaces to be exportable (#1936)

* client: Client {} supports custom Transport

* client: Modify some interfaces to be exportable
This commit is contained in:
zhangyongding
2025-01-15 11:37:04 +08:00
committed by GitHub
parent 321b998f31
commit 86fa5635ec
2 changed files with 29 additions and 29 deletions
+28 -28
View File
@@ -1519,7 +1519,7 @@ func (c *HostClient) SetMaxConns(newMaxConns int) {
c.connsLock.Unlock()
}
func (c *HostClient) acquireConn(reqTimeout time.Duration, connectionClose bool) (cc *clientConn, err error) {
func (c *HostClient) AcquireConn(reqTimeout time.Duration, connectionClose bool) (cc *clientConn, err error) {
createConn := false
startCleaner := false
@@ -1642,7 +1642,7 @@ func (c *HostClient) dialConnFor(w *wantConn) {
cc := acquireClientConn(conn)
if !w.tryDeliver(cc, nil) {
// not delivered, return idle connection
c.releaseConn(cc)
c.ReleaseConn(cc)
}
}
@@ -1660,7 +1660,7 @@ func (c *HostClient) CloseIdleConnections() {
c.connsLock.Unlock()
for _, cc := range scratch {
c.closeConn(cc)
c.CloseConn(cc)
}
}
@@ -1701,7 +1701,7 @@ func (c *HostClient) connsCleaner() {
// Close idle connections.
for i, cc := range scratch {
c.closeConn(cc)
c.CloseConn(cc)
scratch[i] = nil
}
@@ -1720,7 +1720,7 @@ func (c *HostClient) connsCleaner() {
}
}
func (c *HostClient) closeConn(cc *clientConn) {
func (c *HostClient) CloseConn(cc *clientConn) {
c.decConnsCount()
cc.c.Close()
releaseClientConn(cc)
@@ -1780,7 +1780,7 @@ func releaseClientConn(cc *clientConn) {
var clientConnPool sync.Pool
func (c *HostClient) releaseConn(cc *clientConn) {
func (c *HostClient) ReleaseConn(cc *clientConn) {
cc.lastUseTime = time.Now()
if c.MaxConnWaitTimeout <= 0 {
c.connsLock.Lock()
@@ -1818,7 +1818,7 @@ func (c *HostClient) releaseConn(cc *clientConn) {
}
}
func (c *HostClient) acquireWriter(conn net.Conn) *bufio.Writer {
func (c *HostClient) AcquireWriter(conn net.Conn) *bufio.Writer {
var v any
if c.clientWriterPool != nil {
v = c.clientWriterPool.Get()
@@ -1845,7 +1845,7 @@ func (c *HostClient) acquireWriter(conn net.Conn) *bufio.Writer {
return bw
}
func (c *HostClient) releaseWriter(bw *bufio.Writer) {
func (c *HostClient) ReleaseWriter(bw *bufio.Writer) {
if c.clientWriterPool != nil {
c.clientWriterPool.Put(bw)
} else {
@@ -1853,7 +1853,7 @@ func (c *HostClient) releaseWriter(bw *bufio.Writer) {
}
}
func (c *HostClient) acquireReader(conn net.Conn) *bufio.Reader {
func (c *HostClient) AcquireReader(conn net.Conn) *bufio.Reader {
var v any
if c.clientReaderPool != nil {
v = c.clientReaderPool.Get()
@@ -1880,7 +1880,7 @@ func (c *HostClient) acquireReader(conn net.Conn) *bufio.Reader {
return br
}
func (c *HostClient) releaseReader(br *bufio.Reader) {
func (c *HostClient) ReleaseReader(br *bufio.Reader) {
if c.clientReaderPool != nil {
c.clientReaderPool.Put(br)
} else {
@@ -2145,7 +2145,7 @@ func (w *wantConn) cancel(c *HostClient, err error) {
w.mu.Unlock()
if conn != nil {
c.releaseConn(conn)
c.ReleaseConn(conn)
}
}
@@ -2826,7 +2826,7 @@ func (c *pipelineConnClient) writer(conn net.Conn, stopCh <-chan struct{}) error
continue
}
w.resp.parseNetConn(conn)
w.resp.ParseNetConn(conn)
if writeTimeout > 0 {
// Set Deadline every time, since golang has fixed the performance issue
@@ -2973,13 +2973,13 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
deadline = time.Now().Add(req.timeout)
}
cc, err := hc.acquireConn(req.timeout, req.ConnectionClose())
cc, err := hc.AcquireConn(req.timeout, req.ConnectionClose())
if err != nil {
return false, err
}
conn := cc.c
resp.parseNetConn(conn)
resp.ParseNetConn(conn)
writeDeadline := deadline
if hc.WriteTimeout > 0 {
@@ -2990,7 +2990,7 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
}
if err = conn.SetWriteDeadline(writeDeadline); err != nil {
hc.closeConn(cc)
hc.CloseConn(cc)
return true, err
}
@@ -3000,7 +3000,7 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
resetConnection = true
}
bw := hc.acquireWriter(conn)
bw := hc.AcquireWriter(conn)
err = req.Write(bw)
if resetConnection {
@@ -3010,7 +3010,7 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
if err == nil {
err = bw.Flush()
}
hc.releaseWriter(bw)
hc.ReleaseWriter(bw)
// Return ErrTimeout on any timeout.
if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() {
@@ -3018,7 +3018,7 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
}
if err != nil {
hc.closeConn(cc)
hc.CloseConn(cc)
return true, err
}
@@ -3031,7 +3031,7 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
}
if err = conn.SetReadDeadline(readDeadline); err != nil {
hc.closeConn(cc)
hc.CloseConn(cc)
return true, err
}
@@ -3042,11 +3042,11 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
resp.Header.DisableNormalizing()
}
br := hc.acquireReader(conn)
br := hc.AcquireReader(conn)
err = resp.ReadLimitBody(br, hc.MaxResponseBodySize)
if err != nil {
hc.releaseReader(br)
hc.closeConn(cc)
hc.ReleaseReader(br)
hc.CloseConn(cc)
// Don't retry in case of ErrBodyTooLarge since we will just get the same again.
needRetry := err != ErrBodyTooLarge
return needRetry, err
@@ -3056,25 +3056,25 @@ func (t *transport) RoundTrip(hc *HostClient, req *Request, resp *Response) (ret
if customStreamBody && resp.bodyStream != nil {
rbs := resp.bodyStream
resp.bodyStream = newCloseReaderWithError(rbs, func(wErr error) error {
hc.releaseReader(br)
hc.ReleaseReader(br)
if r, ok := rbs.(*requestStream); ok {
releaseRequestStream(r)
}
if closeConn || resp.ConnectionClose() || wErr != nil {
hc.closeConn(cc)
hc.CloseConn(cc)
} else {
hc.releaseConn(cc)
hc.ReleaseConn(cc)
}
return nil
})
return false, nil
}
hc.releaseReader(br)
hc.ReleaseReader(br)
if closeConn {
hc.closeConn(cc)
hc.CloseConn(cc)
} else {
hc.releaseConn(cc)
hc.ReleaseConn(cc)
}
return false, nil
}
+1 -1
View File
@@ -386,7 +386,7 @@ func (w *requestBodyWriter) Write(p []byte) (int, error) {
return len(p), nil
}
func (resp *Response) parseNetConn(conn net.Conn) {
func (resp *Response) ParseNetConn(conn net.Conn) {
resp.raddr = conn.RemoteAddr()
resp.laddr = conn.LocalAddr()
}