Merge branch '2.1' into 2.2

# Conflicts:
#	gns3server/compute/docker/docker_vm.py
#	gns3server/version.py
This commit is contained in:
grossmj committed 2018-08-07 21:06:42 +07:00
commit 033f005bde
402 files changed
+11042 -10444

No files matched your search

+9 -7
View File
@@ -393,7 +393,8 @@ class DockerVM(BaseNode):
aux = self.aux
state = yield from self._get_container_state()
yield from self.reset()
# reset the docker container, but don't release the NIO UDP ports
yield from self.reset(False)
yield from self.create()
self.console = console
self.aux = aux
@@ -706,7 +707,7 @@ class DockerVM(BaseNode):
yield from self.reset()
@asyncio.coroutine
def reset(self):
def reset(self, release_nio_udp_ports=True):
try:
state = yield from self._get_container_state()
@@ -733,11 +734,12 @@ class DockerVM(BaseNode):
log.info("Docker container '{name}' [{image}] removed".format(
name=self._name, image=self._image))
for adapter in self._ethernet_adapters:
if adapter is not None:
for nio in adapter.ports.values():
if nio and isinstance(nio, NIOUDP):
self.manager.port_manager.release_udp_port(nio.lport, self._project)
if release_nio_udp_ports:
for adapter in self._ethernet_adapters:
if adapter is not None:
for nio in adapter.ports.values():
if nio and isinstance(nio, NIOUDP):
self.manager.port_manager.release_udp_port(nio.lport, self._project)
# Ignore runtime error because when closing the server
except (DockerHttp404Error, RuntimeError) as e:
log.debug("Docker error when closing: {}".format(str(e)))
+5
View File
@@ -563,6 +563,7 @@ class Dynamips(BaseManager):
yield from vm.set_idlepc("0x0")
was_auto_started = False
old_priority = None
try:
status = yield from vm.get_status()
if status != "running":
@@ -574,6 +575,8 @@ class Dynamips(BaseManager):
if not idlepcs:
raise DynamipsError("No Idle-PC values found")
if sys.platform.startswith("win"):
old_priority = vm.set_process_priority_windows(vm.hypervisor.process.pid)
for idlepc in idlepcs:
match = re.search(r"^0x[0-9a-f]{8}$", idlepc.split()[0])
if not match:
@@ -602,6 +605,8 @@ class Dynamips(BaseManager):
except DynamipsError:
raise
finally:
if old_priority is not None:
vm.set_process_priority_windows(vm.hypervisor.process.pid, old_priority)
if was_auto_started:
yield from vm.stop()
return validated_idlepc
@@ -683,6 +683,29 @@ class Router(BaseNode):
log.info('Router "{name}" [{id}]: idle-PC set to {idlepc}'.format(name=self._name, id=self._id, idlepc=idlepc))
self._idlepc = idlepc
def set_process_priority_windows(self, pid, priority=None):
"""
Sets process priority on Windows
:param pid: process PID
"""
import win32api
import win32process
import win32con
import pywintypes
old_priority = None
try:
handle = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, True, pid)
old_priority = win32process.GetPriorityClass(handle)
if priority is None:
priority = win32process.BELOW_NORMAL_PRIORITY_CLASS
win32process.SetPriorityClass(handle, priority)
except pywintypes.error as e:
log.error("Cannot set priority for Dynamips process (PID={}) ".format(pid, e.strerror))
return old_priority
@asyncio.coroutine
def get_idle_pc_prop(self):
"""
@@ -701,8 +724,13 @@ class Router(BaseNode):
yield from asyncio.sleep(20) # leave time to the router to boot
log.info('Router "{name}" [{id}] has started calculating Idle-PC values'.format(name=self._name, id=self._id))
old_priority = None
if sys.platform.startswith("win"):
old_priority = self.set_process_priority_windows(self._hypervisor.process.pid)
begin = time.time()
idlepcs = yield from self._hypervisor.send('vm get_idle_pc_prop "{}" 0'.format(self._name))
if old_priority is not None:
self.set_process_priority_windows(self._hypervisor.process.pid, old_priority)
log.info('Router "{name}" [{id}] has finished calculating Idle-PC values after {time:.4f} seconds'.format(name=self._name,
id=self._id,
time=time.time() - begin))