[#322] node: Fix tree svc panic

If a connection has not been established earlier, it stores `nil` in LRU
cache. Cache eviction tries to close every connection (even a `nil` one) and
panics but not crash the app because we are using pools.
That ugly bug also leads to a deadlock where `Unlock` is not called via
`defer` func (and that is the way I found it).

Signed-off-by: Pavel Karpy <p.karpy@yadro.com>
This commit is contained in:
Pavel Karpy 2023-05-04 19:44:49 +03:00
parent 2f6757c828
commit 479c5a65e1
2 changed files with 4 additions and 1 deletions

View file

@ -12,6 +12,7 @@ Changelog for FrostFS Node
- Take network settings into account during netmap contract update (#100) - Take network settings into account during netmap contract update (#100)
- Read config files from dir even if config file not provided via `--config` for node (#238) - Read config files from dir even if config file not provided via `--config` for node (#238)
- Notary requests parsing according to `neo-go`'s updates (#268) - Notary requests parsing according to `neo-go`'s updates (#268)
- Tree service panic in its internal client cache (#322)
### Removed ### Removed
### Updated ### Updated

View file

@ -36,7 +36,9 @@ var errRecentlyFailed = errors.New("client has recently failed")
func (c *clientCache) init() { func (c *clientCache) init() {
l, _ := simplelru.NewLRU[string, cacheItem](defaultClientCacheSize, func(_ string, value cacheItem) { l, _ := simplelru.NewLRU[string, cacheItem](defaultClientCacheSize, func(_ string, value cacheItem) {
_ = value.cc.Close() if conn := value.cc; conn != nil {
_ = conn.Close()
}
}) })
c.LRU = *l c.LRU = *l
} }