(self, nodes, sig=signal.SIGTERM, retry=None)
| 454 | maybe_call(on_down, node) |
| 455 | |
| 456 | def shutdown_nodes(self, nodes, sig=signal.SIGTERM, retry=None): |
| 457 | P = set(nodes) |
| 458 | maybe_call(self.on_stopping_preamble, nodes) |
| 459 | to_remove = set() |
| 460 | for node in P: |
| 461 | maybe_call(self.on_send_signal, node, signal_name(sig)) |
| 462 | if not node.send(sig, self.on_node_signal_dead): |
| 463 | to_remove.add(node) |
| 464 | yield node |
| 465 | P -= to_remove |
| 466 | if retry: |
| 467 | maybe_call(self.on_still_waiting_for, P) |
| 468 | its = 0 |
| 469 | while P: |
| 470 | to_remove = set() |
| 471 | for node in P: |
| 472 | its += 1 |
| 473 | maybe_call(self.on_still_waiting_progress, P) |
| 474 | if not node.alive(): |
| 475 | maybe_call(self.on_node_shutdown_ok, node) |
| 476 | to_remove.add(node) |
| 477 | yield node |
| 478 | maybe_call(self.on_still_waiting_for, P) |
| 479 | break |
| 480 | P -= to_remove |
| 481 | if P and not its % len(P): |
| 482 | sleep(float(retry)) |
| 483 | maybe_call(self.on_still_waiting_end) |
| 484 | |
| 485 | def find(self, name): |
| 486 | for node in self: |
no test coverage detected