You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Version: 2.5.5, with external chaincode, levelDB, using custom Go chaincode.
We're seeing this fairly frequently in a busy network.
It seems to only happen when a transaction has exceeded the execution timeout duration, but is in the midst of a range query on the fabric peer.
From what I can tell, the corresponding lines in levelDB is:
func (i *indexedIterator) dataErr() bool {
if err := i.data.Error(); err != nil {
if i.errf != nil {
i.errf(err)
}
if i.strict || !errors.IsCorrupted(err) {
i.err = err
return true
}
}
return false
}
where
if err := i.data.Error(); err != nil {
is triggering the panic.
I suspect the peer has a read lock on level db, but in the middle of ranging, the peer hits an execution timeout, and the interruption logic it’s not correctly waiting for the iterator to close before releasing the lock. In other words, Close() is called on the iterator before it’s finished the range query.
Description
Version:
2.5.5
, with external chaincode, levelDB, using custom Go chaincode.We're seeing this fairly frequently in a busy network.
It seems to only happen when a transaction has exceeded the execution timeout duration, but is in the midst of a range query on the fabric peer.
From what I can tell, the corresponding lines in levelDB is:
where
is triggering the panic.
I suspect the peer has a read lock on level db, but in the middle of ranging, the peer hits an execution timeout, and the interruption logic it’s not correctly waiting for the iterator to close before releasing the lock. In other words,
Close()
is called on the iterator before it’s finished the range query.Possibly relates to: #5001
Stack traces:
Steps to reproduce
No response
The text was updated successfully, but these errors were encountered: