aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorОлег <150132506+iddqdex@users.noreply.github.com>2025-03-13 15:31:55 +0300
committerGitHub <noreply@github.com>2025-03-13 15:31:55 +0300
commit61f9619e63c85ecdb13d7a035e3e36186f503b2f (patch)
tree2b106f8533ebab6c10305cb4b04894d209ab9e80
parent09df6b372526a6d2fc5d7a1fe52c28402ea931c9 (diff)
downloadydb-61f9619e63c85ecdb13d7a035e3e36186f503b2f.tar.gz
Add retries to copy operation between nodes in ydbd_slice (#15645)
-rw-r--r--ydb/tools/ydbd_slice/nodes.py14
1 files changed, 11 insertions, 3 deletions
diff --git a/ydb/tools/ydbd_slice/nodes.py b/ydb/tools/ydbd_slice/nodes.py
index dfad7b6d3d..d30462f574 100644
--- a/ydb/tools/ydbd_slice/nodes.py
+++ b/ydb/tools/ydbd_slice/nodes.py
@@ -36,12 +36,14 @@ class Nodes(object):
return command
- def _check_async_execution(self, running_jobs, check_retcode=True, results=None):
+ def _check_async_execution(self, running_jobs, check_retcode=True, results=None, retry_attemps=0):
if self._dry_run:
return
assert results is None or isinstance(results, dict)
+ new_jobs = []
+
for cmd, process, host in running_jobs:
out, err = process.communicate()
@@ -73,7 +75,10 @@ class Nodes(object):
)
)
if check_retcode:
- sys.exit(status_line)
+ if retry_attemps > 0:
+ new_jobs.append((cmd, subprocess.Popen(cmd), host))
+ else:
+ sys.exit(status_line)
if results is not None:
results[host] = {
'retcode': retcode,
@@ -81,6 +86,9 @@ class Nodes(object):
'stderr': err
}
+ if len(new_jobs) > 0:
+ self._check_async_execution(new_jobs, check_retcode, results, retry_attemps - 1)
+
def execute_async_ret(self, cmd, check_retcode=True, nodes=None, results=None):
running_jobs = []
for host in (nodes if nodes is not None else self._nodes):
@@ -157,7 +165,7 @@ class Nodes(object):
process = subprocess.Popen(cmd)
running_jobs.append((cmd, process, dst))
- self._check_async_execution(running_jobs)
+ self._check_async_execution(running_jobs, retry_attemps=2)
def copy(self, local_path, remote_path, directory=False, compressed_path=None):
"""