Skip to content

Commit e3776b9

Browse files
kuangmi-bitsg-architect
authored andcommitted
fix(a2agrpc): check error returns in pool (errcheck lint)
1 parent 53d5763 commit e3776b9

2 files changed

Lines changed: 51 additions & 72 deletions

File tree

a2agrpc/v1/pool.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (p *DefaultGRPCConnectionPool) Close() error {
105105
defer p.mu.Unlock()
106106

107107
for url, pc := range p.conns {
108-
pc.conn.Close()
108+
_ = pc.conn.Close()
109109
delete(p.conns, url)
110110
}
111111
return nil
@@ -125,7 +125,7 @@ func (p *DefaultGRPCConnectionPool) evictExpired() {
125125
now := time.Now()
126126
for url, pc := range p.conns {
127127
if now.Sub(pc.lastUsed) > p.ttl {
128-
pc.conn.Close()
128+
_ = pc.conn.Close()
129129
delete(p.conns, url)
130130
}
131131
}

a2agrpc/v1/pool_test.go

Lines changed: 49 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,35 @@ import (
2525
"google.golang.org/grpc/test/bufconn"
2626
)
2727

28-
func TestDefaultPool_AcquireCreatesConnection(t *testing.T) {
29-
pool := NewDefaultGRPCConnectionPool(1 * time.Minute)
30-
defer pool.Close()
31-
32-
// Start a local gRPC server
28+
func newBufconnServer(t *testing.T) (*grpc.Server, *bufconn.Listener, func()) {
29+
t.Helper()
3330
lis := bufconn.Listen(1024 * 1024)
3431
srv := grpc.NewServer()
35-
go srv.Serve(lis)
36-
defer srv.Stop()
32+
go func() { _ = srv.Serve(lis) }()
33+
return srv, lis, func() { srv.Stop() }
34+
}
3735

38-
dialer := func(context.Context, string) (net.Conn, error) {
36+
func bufconnDialer(lis *bufconn.Listener) func(context.Context, string) (net.Conn, error) {
37+
return func(context.Context, string) (net.Conn, error) {
3938
return lis.Dial()
4039
}
40+
}
41+
42+
func bufconnOpts(lis *bufconn.Listener) []grpc.DialOption {
43+
return []grpc.DialOption{
44+
grpc.WithContextDialer(bufconnDialer(lis)),
45+
grpc.WithTransportCredentials(insecure.NewCredentials()),
46+
}
47+
}
48+
49+
func TestDefaultPool_AcquireCreatesConnection(t *testing.T) {
50+
pool := NewDefaultGRPCConnectionPool(1 * time.Minute)
51+
defer func() { _ = pool.Close() }()
52+
53+
_, lis, stop := newBufconnServer(t)
54+
defer stop()
4155

42-
conn, err := pool.Acquire(context.Background(), "bufnet", grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials()))
56+
conn, err := pool.Acquire(context.Background(), "bufnet", bufconnOpts(lis)...)
4357
if err != nil {
4458
t.Fatalf("Acquire failed: %v", err)
4559
}
@@ -54,30 +68,22 @@ func TestDefaultPool_AcquireCreatesConnection(t *testing.T) {
5468

5569
func TestDefaultPool_ReusesConnection(t *testing.T) {
5670
pool := NewDefaultGRPCConnectionPool(1 * time.Minute)
57-
defer pool.Close()
58-
59-
lis := bufconn.Listen(1024 * 1024)
60-
srv := grpc.NewServer()
61-
go srv.Serve(lis)
62-
defer srv.Stop()
71+
defer func() { _ = pool.Close() }()
6372

64-
dialer := func(context.Context, string) (net.Conn, error) {
65-
return lis.Dial()
66-
}
67-
opts := []grpc.DialOption{grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials())}
73+
_, lis, stop := newBufconnServer(t)
74+
defer stop()
6875

69-
conn1, err := pool.Acquire(context.Background(), "bufnet", opts...)
76+
conn1, err := pool.Acquire(context.Background(), "bufnet", bufconnOpts(lis)...)
7077
if err != nil {
7178
t.Fatalf("Acquire 1 failed: %v", err)
7279
}
73-
pool.Release(conn1)
80+
_ = pool.Release(conn1)
7481

75-
conn2, err := pool.Acquire(context.Background(), "bufnet", opts...)
82+
conn2, err := pool.Acquire(context.Background(), "bufnet", bufconnOpts(lis)...)
7683
if err != nil {
7784
t.Fatalf("Acquire 2 failed: %v", err)
7885
}
7986

80-
// Same underlying connection should be reused
8187
if conn1 != conn2 {
8288
t.Fatal("expected same connection to be reused")
8389
}
@@ -89,29 +95,23 @@ func TestDefaultPool_ReusesConnection(t *testing.T) {
8995

9096
func TestDefaultPool_DifferentURLs(t *testing.T) {
9197
pool := NewDefaultGRPCConnectionPool(1 * time.Minute)
92-
defer pool.Close()
98+
defer func() { _ = pool.Close() }()
9399

94-
lis := bufconn.Listen(1024 * 1024)
95-
srv := grpc.NewServer()
96-
go srv.Serve(lis)
97-
defer srv.Stop()
98-
99-
dialer := func(context.Context, string) (net.Conn, error) {
100-
return lis.Dial()
101-
}
102-
opts := []grpc.DialOption{grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials())}
100+
_, lis, stop := newBufconnServer(t)
101+
defer stop()
102+
opts := bufconnOpts(lis)
103103

104104
conn1, err := pool.Acquire(context.Background(), "agent-a", opts...)
105105
if err != nil {
106106
t.Fatalf("Acquire agent-a failed: %v", err)
107107
}
108-
defer pool.Release(conn1)
108+
defer func() { _ = pool.Release(conn1) }()
109109

110110
conn2, err := pool.Acquire(context.Background(), "agent-b", opts...)
111111
if err != nil {
112112
t.Fatalf("Acquire agent-b failed: %v", err)
113113
}
114-
defer pool.Release(conn2)
114+
defer func() { _ = pool.Release(conn2) }()
115115

116116
if conn1 == conn2 {
117117
t.Fatal("different URLs should not reuse the same connection")
@@ -124,31 +124,24 @@ func TestDefaultPool_DifferentURLs(t *testing.T) {
124124

125125
func TestDefaultPool_TTLEviction(t *testing.T) {
126126
pool := NewDefaultGRPCConnectionPool(50 * time.Millisecond)
127-
defer pool.Close()
128-
129-
lis := bufconn.Listen(1024 * 1024)
130-
srv := grpc.NewServer()
131-
go srv.Serve(lis)
132-
defer srv.Stop()
127+
defer func() { _ = pool.Close() }()
133128

134-
dialer := func(context.Context, string) (net.Conn, error) {
135-
return lis.Dial()
136-
}
137-
opts := []grpc.DialOption{grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials())}
129+
_, lis, stop := newBufconnServer(t)
130+
defer stop()
131+
opts := bufconnOpts(lis)
138132

139133
conn1, err := pool.Acquire(context.Background(), "bufnet", opts...)
140134
if err != nil {
141135
t.Fatalf("Acquire failed: %v", err)
142136
}
143-
pool.Release(conn1)
137+
_ = pool.Release(conn1)
144138

145139
if n := pool.Len(); n != 1 {
146140
t.Fatalf("expected 1 pooled connection before TTL, got %d", n)
147141
}
148142

149143
time.Sleep(100 * time.Millisecond)
150144

151-
// Next Acquire should evict the expired connection and create a new one
152145
conn2, err := pool.Acquire(context.Background(), "bufnet", opts...)
153146
if err != nil {
154147
t.Fatalf("Acquire after TTL failed: %v", err)
@@ -165,23 +158,17 @@ func TestDefaultPool_TTLEviction(t *testing.T) {
165158

166159
func TestDefaultPool_ZeroTTLNeverEvicts(t *testing.T) {
167160
pool := NewDefaultGRPCConnectionPool(0)
168-
defer pool.Close()
161+
defer func() { _ = pool.Close() }()
169162

170-
lis := bufconn.Listen(1024 * 1024)
171-
srv := grpc.NewServer()
172-
go srv.Serve(lis)
173-
defer srv.Stop()
174-
175-
dialer := func(context.Context, string) (net.Conn, error) {
176-
return lis.Dial()
177-
}
178-
opts := []grpc.DialOption{grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials())}
163+
_, lis, stop := newBufconnServer(t)
164+
defer stop()
165+
opts := bufconnOpts(lis)
179166

180167
conn1, err := pool.Acquire(context.Background(), "bufnet", opts...)
181168
if err != nil {
182169
t.Fatalf("Acquire failed: %v", err)
183170
}
184-
pool.Release(conn1)
171+
_ = pool.Release(conn1)
185172

186173
time.Sleep(50 * time.Millisecond)
187174

@@ -197,24 +184,16 @@ func TestDefaultPool_ZeroTTLNeverEvicts(t *testing.T) {
197184

198185
func TestDefaultPool_Release(t *testing.T) {
199186
pool := NewDefaultGRPCConnectionPool(1 * time.Minute)
200-
defer pool.Close()
187+
defer func() { _ = pool.Close() }()
201188

202-
lis := bufconn.Listen(1024 * 1024)
203-
srv := grpc.NewServer()
204-
go srv.Serve(lis)
205-
defer srv.Stop()
206-
207-
dialer := func(context.Context, string) (net.Conn, error) {
208-
return lis.Dial()
209-
}
210-
opts := []grpc.DialOption{grpc.WithContextDialer(dialer), grpc.WithTransportCredentials(insecure.NewCredentials())}
189+
_, lis, stop := newBufconnServer(t)
190+
defer stop()
211191

212-
conn, err := pool.Acquire(context.Background(), "bufnet", opts...)
192+
conn, err := pool.Acquire(context.Background(), "bufnet", bufconnOpts(lis)...)
213193
if err != nil {
214194
t.Fatalf("Acquire failed: %v", err)
215195
}
216196

217-
// Release should succeed even for a connection not in the map (e.g., externally provided)
218197
if err := pool.Release(conn); err != nil {
219198
t.Fatalf("Release failed: %v", err)
220199
}

0 commit comments

Comments
 (0)