Start all, with a controlled concurrency

Fix #536
This commit is contained in:
Julien Duponchelle committed 2016-05-24 11:21:49 +02:00
1 parent da6cb13338
commit b126c396c9
2 files changed
+76 -5

No files matched your search

@@ -17,6 +17,7 @@
from gns3server.web.route import Route
from gns3server.controller import Controller
from gns3server.utils.asyncio.pool import Pool
from gns3server.schemas.node import (
NODE_OBJECT_SCHEMA,
@@ -103,8 +104,10 @@ class NodeHandler:
def start_all(request, response):
project = Controller.instance().get_project(request.match_info["project_id"])
pool = Pool(concurrency=3)
for node in project.nodes.values():
yield from node.start()
pool.append(node.start)
yield from pool.join()
response.set_status(204)
@Route.post(
@@ -122,8 +125,10 @@ class NodeHandler:
def stop_all(request, response):
project = Controller.instance().get_project(request.match_info["project_id"])
pool = Pool(concurrency=3)
for node in project.nodes.values():
yield from node.stop()
pool.append(node.stop)
yield from pool.join()
response.set_status(204)
@Route.post(
@@ -141,8 +146,10 @@ class NodeHandler:
def suspend_all(request, response):
project = Controller.instance().get_project(request.match_info["project_id"])
pool = Pool(concurrency=3)
for node in project.nodes.values():
yield from node.suspend()
pool.append(node.suspend)
yield from pool.join()
response.set_status(204)
@Route.post(
@@ -160,10 +167,13 @@ class NodeHandler:
def reload_all(request, response):
project = Controller.instance().get_project(request.match_info["project_id"])
pool = Pool(concurrency=3)
for node in project.nodes.values():
yield from node.stop()
pool.append(node.stop)
yield from pool.join()
for node in project.nodes.values():
yield from node.start()
pool.append(node.start)
yield from pool.join()
response.set_status(204)
@Route.post(