This is an automated email from the ASF dual-hosted git repository.
dockerzhang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git
The following commit(s) were added to refs/heads/master by this push:
new c07316253e [INLONG-10292][SDK] Fix panic in connpool.UpdateEndpoints()
of Golang SDK (#10295)
c07316253e is described below
commit c07316253e06a17d2dda20e26cc487d5691e58e2
Author: gunli <[email protected]>
AuthorDate: Wed May 29 16:23:43 2024 +0800
[INLONG-10292][SDK] Fix panic in connpool.UpdateEndpoints() of Golang SDK
(#10295)
Co-authored-by: gunli <[email protected]>
---
.../dataproxy-sdk-golang/connpool/connpool.go | 24 +++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git
a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/connpool/connpool.go
b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/connpool/connpool.go
index ff3faa033e..259159af27 100755
--- a/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/connpool/connpool.go
+++ b/inlong-sdk/dataproxy-sdk-twins/dataproxy-sdk-golang/connpool/connpool.go
@@ -20,6 +20,7 @@ import (
"context"
"errors"
"math"
+ "runtime/debug"
"sync"
"time"
@@ -181,7 +182,7 @@ func (p *connPool) Put(conn gnet.Conn, err error) {
return
case <-time.After(1 * time.Second):
// connChan is full, close the new conn
- newConn.Close()
+ _ = newConn.Close()
return
}
}
@@ -195,6 +196,13 @@ func (p *connPool) Put(conn gnet.Conn, err error) {
}
func (p *connPool) UpdateEndpoints(all, add, del []string) {
+ defer func() {
+ if rec := recover(); rec != nil {
+ p.log.Errorf("panic when update endpoints:", rec)
+ p.log.Error(string(debug.Stack()))
+ }
+ }()
+
if len(all) == 0 {
return
}
@@ -226,7 +234,7 @@ func (p *connPool) UpdateEndpoints(all, add, del []string) {
continue
case <-time.After(1 * time.Second):
// connChan is full, close the new conn
- conn.Close()
+ _ = conn.Close()
continue
}
}
@@ -251,6 +259,12 @@ func (p *connPool) UpdateEndpoints(all, add, del []string)
{
break
}
+ remoteAddr := conn.RemoteAddr()
+ if remoteAddr == nil {
+ CloseConn(conn, 0)
+ continue
+ }
+
addr := conn.RemoteAddr().String()
_, ok = delEndpoints[addr]
if ok {
@@ -269,7 +283,7 @@ func (p *connPool) NumPooled() int {
// CloseConn closes a connection after a duration of time
func CloseConn(conn gnet.Conn, after time.Duration) {
if after <= 0 {
- conn.Close()
+ _ = conn.Close()
return
}
@@ -277,10 +291,10 @@ func CloseConn(conn gnet.Conn, after time.Duration) {
go func() {
select {
case <-time.After(after):
- conn.Close()
+ _ = conn.Close()
return
case <-ctx.Done():
- conn.Close()
+ _ = conn.Close()
return
}
}()