Skip to content

Commit ff89f3e

Browse files
committed
[FAB-9143] fix data race in TestOrderingService...
...StreamFailure In the tests, client.Start() and client.Close() are called from different go routines without serialization. Both methods modify a connection counter. Looking closer, the connection counter is unnecessary as all references to it are in assertions that follow connWG.Wait() calls that already ensure outstanding connections have closed. Fixing by removing the unnecessary connNumber state. Change-Id: I112dcc59ff99ec7aacb29671ea6547748b03c2bf Signed-off-by: Matthew Sykes <sykesmat@us.ibm.com>
1 parent 7e1d5b4 commit ff89f3e

File tree

2 files changed

+4
-19
lines changed

2 files changed

+4
-19
lines changed

core/deliverservice/client_test.go

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,24 +27,20 @@ import (
2727
)
2828

2929
var (
30-
connNumber = 0
31-
connWG sync.WaitGroup
30+
connWG sync.WaitGroup
3231
)
3332

3433
func newConnection() *grpc.ClientConn {
3534
// The balancer is in order to check connection leaks.
3635
// When grpc.ClientConn.Close() is called, it calls the balancer's Close()
37-
// method which decrements the connNumber
3836
cc, _ := grpc.Dial("", grpc.WithInsecure(), grpc.WithBalancer(&balancer{}))
3937
return cc
4038
}
4139

42-
type balancer struct {
43-
}
40+
type balancer struct{}
4441

4542
func (*balancer) Start(target string, config grpc.BalancerConfig) error {
4643
connWG.Add(1)
47-
connNumber++
4844
return nil
4945
}
5046

@@ -61,7 +57,6 @@ func (*balancer) Notify() <-chan []grpc.Address {
6157
}
6258

6359
func (*balancer) Close() error {
64-
connNumber--
6560
connWG.Done()
6661
return nil
6762
}
@@ -160,7 +155,6 @@ func TestOrderingServiceConnFailure(t *testing.T) {
160155
testOrderingServiceConnFailure(t, blockDelivererConsumerWithRecv)
161156
testOrderingServiceConnFailure(t, blockDelivererConsumerWithSend)
162157
connWG.Wait()
163-
assert.Equal(t, 0, connNumber)
164158
}
165159

166160
func testOrderingServiceConnFailure(t *testing.T, bdc blocksDelivererConsumer) {
@@ -198,7 +192,6 @@ func TestOrderingServiceStreamFailure(t *testing.T) {
198192
testOrderingServiceStreamFailure(t, blockDelivererConsumerWithRecv)
199193
testOrderingServiceStreamFailure(t, blockDelivererConsumerWithSend)
200194
connWG.Wait()
201-
assert.Equal(t, 0, connNumber)
202195
}
203196

204197
func testOrderingServiceStreamFailure(t *testing.T, bdc blocksDelivererConsumer) {
@@ -235,7 +228,6 @@ func TestOrderingServiceSetupFailure(t *testing.T) {
235228
testOrderingServiceSetupFailure(t, blockDelivererConsumerWithRecv)
236229
testOrderingServiceSetupFailure(t, blockDelivererConsumerWithSend)
237230
connWG.Wait()
238-
assert.Equal(t, 0, connNumber)
239231
}
240232

241233
func testOrderingServiceSetupFailure(t *testing.T, bdc blocksDelivererConsumer) {
@@ -270,7 +262,6 @@ func TestOrderingServiceFirstOperationFailure(t *testing.T) {
270262
testOrderingServiceFirstOperationFailure(t, blockDelivererConsumerWithRecv)
271263
testOrderingServiceFirstOperationFailure(t, blockDelivererConsumerWithSend)
272264
connWG.Wait()
273-
assert.Equal(t, 0, connNumber)
274265
}
275266

276267
func testOrderingServiceFirstOperationFailure(t *testing.T, bdc blocksDelivererConsumer) {
@@ -308,7 +299,6 @@ func TestOrderingServiceCrashAndRecover(t *testing.T) {
308299
testOrderingServiceCrashAndRecover(t, blockDelivererConsumerWithRecv)
309300
testOrderingServiceCrashAndRecover(t, blockDelivererConsumerWithSend)
310301
connWG.Wait()
311-
assert.Equal(t, 0, connNumber)
312302
}
313303

314304
func testOrderingServiceCrashAndRecover(t *testing.T, bdc blocksDelivererConsumer) {
@@ -350,7 +340,6 @@ func TestOrderingServicePermanentCrash(t *testing.T) {
350340
testOrderingServicePermanentCrash(t, blockDelivererConsumerWithRecv)
351341
testOrderingServicePermanentCrash(t, blockDelivererConsumerWithSend)
352342
connWG.Wait()
353-
assert.Equal(t, 0, connNumber)
354343
}
355344

356345
func testOrderingServicePermanentCrash(t *testing.T, bdc blocksDelivererConsumer) {
@@ -389,7 +378,6 @@ func TestLimitedConnAttempts(t *testing.T) {
389378
testLimitedConnAttempts(t, blockDelivererConsumerWithRecv)
390379
testLimitedConnAttempts(t, blockDelivererConsumerWithSend)
391380
connWG.Wait()
392-
assert.Equal(t, 0, connNumber)
393381
}
394382

395383
func testLimitedConnAttempts(t *testing.T, bdc blocksDelivererConsumer) {
@@ -418,13 +406,11 @@ func testLimitedConnAttempts(t *testing.T, bdc blocksDelivererConsumer) {
418406
func TestLimitedTotalConnTimeRcv(t *testing.T) {
419407
testLimitedTotalConnTime(t, blockDelivererConsumerWithRecv)
420408
connWG.Wait()
421-
assert.Equal(t, 0, connNumber)
422409
}
423410

424411
func TestLimitedTotalConnTimeSnd(t *testing.T) {
425412
testLimitedTotalConnTime(t, blockDelivererConsumerWithSend)
426413
connWG.Wait()
427-
assert.Equal(t, 0, connNumber)
428414
}
429415

430416
func testLimitedTotalConnTime(t *testing.T, bdc blocksDelivererConsumer) {
@@ -456,7 +442,6 @@ func TestGreenPath(t *testing.T) {
456442
testGreenPath(t, blockDelivererConsumerWithRecv)
457443
testGreenPath(t, blockDelivererConsumerWithSend)
458444
connWG.Wait()
459-
assert.Equal(t, 0, connNumber)
460445
}
461446

462447
func testGreenPath(t *testing.T, bdc blocksDelivererConsumer) {
@@ -523,7 +508,6 @@ func TestCloseWhileSleep(t *testing.T) {
523508
testCloseWhileSleep(t, blockDelivererConsumerWithRecv)
524509
testCloseWhileSleep(t, blockDelivererConsumerWithSend)
525510
connWG.Wait()
526-
assert.Equal(t, 0, connNumber)
527511
}
528512

529513
func testCloseWhileSleep(t *testing.T, bdc blocksDelivererConsumer) {

core/deliverservice/deliveryclient_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,8 @@ func TestNewDeliverService(t *testing.T) {
124124
// Make sure to stop all blocks providers
125125
service.Stop()
126126
time.Sleep(time.Duration(500) * time.Millisecond)
127-
assert.Equal(t, 0, connNumber)
127+
connWG.Wait()
128+
128129
assertBlockDissemination(0, gossipServiceAdapter.GossipBlockDisseminations, t)
129130
assert.Equal(t, atomic.LoadInt32(&blocksDeliverer.RecvCnt), atomic.LoadInt32(&gossipServiceAdapter.AddPayloadsCnt))
130131
assert.Error(t, service.StartDeliverForChannel("TEST_CHAINID", &mocks.MockLedgerInfo{0}, func() {}), "Delivery service is stopping")

0 commit comments

Comments
 (0)