Skip to content

Commit 6d4d3d8

Browse files
committed
Bug fix:WorkTree Function Exception --rcopy
1 parent 93e8a77 commit 6d4d3d8

File tree

1 file changed

+25
-20
lines changed

1 file changed

+25
-20
lines changed

lib/ClusterShell/Worker/Tree.py

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -431,30 +431,35 @@ def _on_remote_node_close(self, node, rc, gateway):
431431
"""remote node closing with return code"""
432432
DistantWorker._on_node_close(self, node, rc)
433433
self.logger.debug("_on_remote_node_close %s %s via gw %s", node,
434-
self._close_count, gateway)
434+
self._close_count, gateway)
435435

436+
node_arr = []
436437
# finalize rcopy: extract tar data
437438
if self.source and self.reverse:
438439
for bnode, buf in self._rcopy_bufs.items():
439-
tarfileobj = self._rcopy_tars[bnode]
440-
if len(buf) > 0:
441-
self.logger.debug("flushing node %s buf %d bytes", bnode,
442-
len(buf))
443-
tarfileobj.write(buf)
444-
tarfileobj.flush()
445-
tarfileobj.seek(0)
446-
tmptar = tarfile.open(fileobj=tarfileobj)
447-
try:
448-
self.logger.debug("%s extracting %d members in dest %s",
449-
bnode, len(tmptar.getmembers()),
450-
self.dest)
451-
tmptar.extractall(path=self.dest)
452-
except IOError as ex:
453-
self._on_remote_node_msgline(bnode, ex, 'stderr', gateway)
454-
finally:
455-
tmptar.close()
456-
self._rcopy_bufs = {}
457-
self._rcopy_tars = {}
440+
if bnode == node:
441+
node_arr.append(bnode)
442+
tarfileobj = self._rcopy_tars[bnode]
443+
if len(buf) > 0:
444+
self.logger.debug("flushing node %s buf %d bytes", bnode,
445+
len(buf))
446+
tarfileobj.write(buf)
447+
tarfileobj.flush()
448+
tarfileobj.seek(0)
449+
tmptar = tarfile.open(fileobj=tarfileobj)
450+
try:
451+
self.logger.debug("%s extracting %d members in dest %s",
452+
bnode, len(tmptar.getmembers()),
453+
self.dest)
454+
tmptar.extractall(path=self.dest)
455+
except IOError as ex:
456+
self._on_remote_node_msgline(bnode, ex, 'stderr', gateway)
457+
finally:
458+
tmptar.close()
459+
460+
for item_node in node_arr:
461+
del self._rcopy_bufs[item_node]
462+
del self._rcopy_tars[item_node]
458463

459464
self.gwtargets[str(gateway)].remove(node)
460465
self._close_count += 1

0 commit comments

Comments
 (0)