Skip to content

Commit 815a8c2

Browse files
luxiaoyongthiell
andauthored
Tree: fix rcopy handling when remote node closes (#545)
Fix defect in TreeWorker._on_remote_node_close() for rcopy. When a remote node closes, just finish extracting locally without impacting other nodes. Closes #545. --------- Co-authored-by: Stephane Thiell <[email protected]>
1 parent 2d951cb commit 815a8c2

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

lib/ClusterShell/Worker/Tree.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -435,26 +435,28 @@ def _on_remote_node_close(self, node, rc, gateway):
435435

436436
# finalize rcopy: extract tar data
437437
if self.source and self.reverse:
438-
for bnode, buf in self._rcopy_bufs.items():
439-
tarfileobj = self._rcopy_tars[bnode]
438+
if node in self._rcopy_bufs:
439+
buf = self._rcopy_bufs[node]
440+
tarfileobj = self._rcopy_tars[node]
440441
if len(buf) > 0:
441-
self.logger.debug("flushing node %s buf %d bytes", bnode,
442+
self.logger.debug("flushing node %s buf %d bytes", node,
442443
len(buf))
443444
tarfileobj.write(buf)
444445
tarfileobj.flush()
445446
tarfileobj.seek(0)
446447
tmptar = tarfile.open(fileobj=tarfileobj)
447448
try:
448449
self.logger.debug("%s extracting %d members in dest %s",
449-
bnode, len(tmptar.getmembers()),
450-
self.dest)
450+
node, len(tmptar.getmembers()), self.dest)
451451
tmptar.extractall(path=self.dest)
452452
except IOError as ex:
453-
self._on_remote_node_msgline(bnode, ex, 'stderr', gateway)
453+
self._on_remote_node_msgline(node, ex, 'stderr', gateway)
454454
finally:
455455
tmptar.close()
456-
self._rcopy_bufs = {}
457-
self._rcopy_tars = {}
456+
del self._rcopy_bufs[node]
457+
del self._rcopy_tars[node]
458+
else:
459+
self.logger.debug("no rcopy buffer received from %s", node)
458460

459461
self.gwtargets[str(gateway)].remove(node)
460462
self._close_count += 1

0 commit comments

Comments
 (0)