7
7
"reflect"
8
8
"strings"
9
9
"sync"
10
+ "sync/atomic"
10
11
"testing"
11
12
"time"
12
13
@@ -235,9 +236,8 @@ func TestClose(t *testing.T) {
235
236
}
236
237
237
238
type testHandler struct {
238
- discovered , deactivated int
239
+ discovered , deactivated uint32
239
240
errs []error
240
- mutex sync.Mutex
241
241
}
242
242
243
243
func (h * testHandler ) addErr (err error ) {
@@ -246,10 +246,7 @@ func (h *testHandler) addErr(err error) {
246
246
247
247
func (h * testHandler ) Discovered (conn * tarantool.Connection ,
248
248
role connection_pool.Role ) error {
249
- h .mutex .Lock ()
250
- defer h .mutex .Unlock ()
251
-
252
- h .discovered ++
249
+ discovered := atomic .AddUint32 (& h .discovered , 1 )
253
250
254
251
if conn == nil {
255
252
h .addErr (fmt .Errorf ("discovered conn == nil" ))
@@ -260,14 +257,14 @@ func (h *testHandler) Discovered(conn *tarantool.Connection,
260
257
// discovered >= 3 - update a connection after a role update
261
258
addr := conn .Addr ()
262
259
if addr == servers [0 ] {
263
- if h . discovered < 3 && role != connection_pool .MasterRole {
260
+ if discovered < 3 && role != connection_pool .MasterRole {
264
261
h .addErr (fmt .Errorf ("unexpected init role %d for addr %s" , role , addr ))
265
262
}
266
- if h . discovered >= 3 && role != connection_pool .ReplicaRole {
263
+ if discovered >= 3 && role != connection_pool .ReplicaRole {
267
264
h .addErr (fmt .Errorf ("unexpected updated role %d for addr %s" , role , addr ))
268
265
}
269
266
} else if addr == servers [1 ] {
270
- if h . discovered >= 3 {
267
+ if discovered >= 3 {
271
268
h .addErr (fmt .Errorf ("unexpected discovery for addr %s" , addr ))
272
269
}
273
270
if role != connection_pool .ReplicaRole {
@@ -282,18 +279,15 @@ func (h *testHandler) Discovered(conn *tarantool.Connection,
282
279
283
280
func (h * testHandler ) Deactivated (conn * tarantool.Connection ,
284
281
role connection_pool.Role ) error {
285
- h .mutex .Lock ()
286
- defer h .mutex .Unlock ()
287
-
288
- h .deactivated ++
282
+ deactivated := atomic .AddUint32 (& h .deactivated , 1 )
289
283
290
284
if conn == nil {
291
285
h .addErr (fmt .Errorf ("removed conn == nil" ))
292
286
return nil
293
287
}
294
288
295
289
addr := conn .Addr ()
296
- if h . deactivated == 1 && addr == servers [0 ] {
290
+ if deactivated == 1 && addr == servers [0 ] {
297
291
// A first close is a role update.
298
292
if role != connection_pool .MasterRole {
299
293
h .addErr (fmt .Errorf ("unexpected removed role %d for addr %s" , role , addr ))
@@ -337,19 +331,24 @@ func TestConnectionHandlerOpenUpdateClose(t *testing.T) {
337
331
for i := 0 ; i < 100 ; i ++ {
338
332
// Wait for read_only update, it should report about close connection
339
333
// with old role.
340
- if h .discovered >= 3 {
334
+ if atomic . LoadUint32 ( & h .discovered ) >= 3 {
341
335
break
342
336
}
343
337
time .Sleep (poolOpts .CheckTimeout )
344
338
}
345
- require .Equalf (t , h .deactivated , 1 , "updated not reported as deactivated" )
346
- require .Equalf (t , h .discovered , 3 , "updated not reported as discovered" )
339
+
340
+ discovered := atomic .LoadUint32 (& h .discovered )
341
+ deactivated := atomic .LoadUint32 (& h .deactivated )
342
+ require .Equalf (t , uint32 (3 ), discovered ,
343
+ "updated not reported as discovered" )
344
+ require .Equalf (t , uint32 (1 ), deactivated ,
345
+ "updated not reported as deactivated" )
347
346
348
347
pool .Close ()
349
348
350
349
for i := 0 ; i < 100 ; i ++ {
351
350
// Wait for close of all connections.
352
- if h .deactivated >= 3 {
351
+ if atomic . LoadUint32 ( & h .deactivated ) >= 3 {
353
352
break
354
353
}
355
354
time .Sleep (poolOpts .CheckTimeout )
@@ -361,8 +360,13 @@ func TestConnectionHandlerOpenUpdateClose(t *testing.T) {
361
360
connected , err := pool .ConnectedNow (connection_pool .ANY )
362
361
require .Nilf (t , err , "failed to get connected state" )
363
362
require .Falsef (t , connected , "connection pool still be connected" )
364
- require .Equalf (t , len (poolServers )+ 1 , h .discovered , "unexpected discovered count" )
365
- require .Equalf (t , len (poolServers )+ 1 , h .deactivated , "unexpected deactivated count" )
363
+
364
+ discovered = atomic .LoadUint32 (& h .discovered )
365
+ deactivated = atomic .LoadUint32 (& h .deactivated )
366
+ require .Equalf (t , uint32 (len (poolServers )+ 1 ), discovered ,
367
+ "unexpected discovered count" )
368
+ require .Equalf (t , uint32 (len (poolServers )+ 1 ), deactivated ,
369
+ "unexpected deactivated count" )
366
370
}
367
371
368
372
type testAddErrorHandler struct {
0 commit comments