Skip to content

Commit bc88414

Browse files
committed
[FAB-9152] fix data race in TestManagerImpl
Introduce a RWMutex to the memory backed ledger to enable concurrent use by tests. Change-Id: I964ee2d6ff0fe6e8369702477631e7c0e0251cbc Signed-off-by: Matthew Sykes <sykesmat@us.ibm.com>
1 parent c6d8edd commit bc88414

File tree

1 file changed

+10
-0
lines changed
  • common/ledger/blockledger/ram

1 file changed

+10
-0
lines changed

common/ledger/blockledger/ram/impl.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package ramledger
1919
import (
2020
"bytes"
2121
"fmt"
22+
"sync"
2223

2324
"github.com/hyperledger/fabric/common/flogging"
2425
"github.com/hyperledger/fabric/common/ledger/blockledger"
@@ -46,6 +47,7 @@ type simpleList struct {
4647
}
4748

4849
type ramLedger struct {
50+
lock sync.RWMutex
4951
maxSize int
5052
size int
5153
oldest *simpleList
@@ -76,6 +78,9 @@ func (cu *cursor) Close() {}
7678
// Iterator returns an Iterator, as specified by a ab.SeekInfo message, and its
7779
// starting block number
7880
func (rl *ramLedger) Iterator(startPosition *ab.SeekPosition) (blockledger.Iterator, uint64) {
81+
rl.lock.RLock()
82+
defer rl.lock.RUnlock()
83+
7984
var list *simpleList
8085
switch start := startPosition.Type.(type) {
8186
case *ab.SeekPosition_Oldest:
@@ -138,11 +143,16 @@ func (rl *ramLedger) Iterator(startPosition *ab.SeekPosition) (blockledger.Itera
138143

139144
// Height returns the number of blocks on the ledger
140145
func (rl *ramLedger) Height() uint64 {
146+
rl.lock.RLock()
147+
defer rl.lock.RUnlock()
141148
return rl.newest.block.Header.Number + 1
142149
}
143150

144151
// Append appends a new block to the ledger
145152
func (rl *ramLedger) Append(block *cb.Block) error {
153+
rl.lock.Lock()
154+
defer rl.lock.Unlock()
155+
146156
if block.Header.Number != rl.newest.block.Header.Number+1 {
147157
return fmt.Errorf("Block number should have been %d but was %d",
148158
rl.newest.block.Header.Number+1, block.Header.Number)

0 commit comments

Comments
 (0)