To avoid connection leak, call `close()` immediately after connection
is established. In regular tree pool, unhealthy connections are handled
by background goroutine which calls `redialIfNecessary()` to reestablish
connection. Here it is not viable so connection must be close.
Signed-off-by: Alex Vanin <a.vanin@yadro.com>
Two concurrent 'deleteClientFromMap' calls for
the same client may produce panic and deadlock.
First goroutine acquires lock, removes element
from the map, releases lock.
Second goroutine acquires lock, and throws panic
while trying to call 'close()' on empty struct.
Lock is never released and it causes deadlock for
other goroutines.
Signed-off-by: Alex Vanin <a.vanin@yadro.com>
New version of tree/pool selects tree service connection to make request based on the current net map and container placement policy
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
Implemented context timeout for all tree service operations except those that return a GRPC stream
Signed-off-by: Nikita Zinkevich <n.zinkevich@yadro.com>
Since Go 1.22 a `for` statement with a `range` clause is able
to iterate through integer values from zero to an upper limit.
gopatch script:
@@
var i, e expression
@@
-for i := 0; i <= e - 1; i++ {
+for i := range e {
...
}
@@
var i, e expression
@@
-for i := 0; i <= e; i++ {
+for i := range e + 1 {
...
}
@@
var i, e expression
@@
-for i := 0; i < e; i++ {
+for i := range e {
...
}
Signed-off-by: Ekaterina Lebedeva <ekaterina.lebedeva@yadro.com>
Update tree service to fix split tree problem.
Tree intermediate nodes can be duplicated so we must handle this.
Signed-off-by: Denis Kirillov <d.kirillov@yadro.com>
When retry happens, use priority map to decide
which error to return. Consider network errors
less desirable than business logic errors.
Signed-off-by: Alex Vanin <a.vanin@yadro.com>
1. Try its best by looking for nodes during 'GetNodeByPath'
2. Retry on 'tree not found' and other not found errors
Signed-off-by: Alex Vanin <a.vanin@yadro.com>