You are viewing a plain text version of this content. The canonical link for it is here.
Posted to tashi-commits@incubator.apache.org by mr...@apache.org on 2009/02/20 18:33:19 UTC

svn commit: r746326 - /incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py

Author: mryan3
Date: Fri Feb 20 18:33:19 2009
New Revision: 746326

URL: http://svn.apache.org/viewvc?rev=746326&view=rev
Log:
Added "startConsole" command to qemu backend for debugging.
Also made the qemu backend reuse VNC port numbers.


Modified:
    incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py

Modified: incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py?rev=746326&r1=746325&r2=746326&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py (original)
+++ incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py Fri Feb 20 18:33:19 2009
@@ -93,8 +93,10 @@
 		self.controlledVMs = {}
 		self.usedPorts = []
 		self.usedPortsLock = threading.Lock()
-		self.vncPort = 1
+		self.vncPorts = []
 		self.vncPortLock = threading.Lock()
+		self.consolePort = 10000
+		self.consolePortLock = threading.Lock()
 		self.migrationSemaphore = threading.Semaphore(int(self.config.get("Qemu", "maxParallelMigrations")))
 		try:
 			os.mkdir(self.INFO_DIR)
@@ -128,6 +130,10 @@
 				os.unlink(self.INFO_DIR + "/%d"%(vmId))
 				child = controlledVMs[vmId]
 				del controlledVMs[vmId]
+				if (child.vncPort >= 0):
+					self.vncPortLock.acquire()
+					self.vncPorts.remove(child.vncPort)
+					self.vncPortLock.release()
 				log.info("Removing vmId %d" % (vmId))
 				if (child.OSchild):
 					os.waitpid(vmId, 0)
@@ -157,8 +163,8 @@
 			try:
 				child = self.loadChildInfo(vmId)
 				self.vncPortLock.acquire()
-				if (child.vncPort >= self.vncPort):
-					self.vncPort = child.vncPort + 1
+				if (child.vncPort >= 0):
+					self.vncPorts.append(child.vncPort)
 				self.vncPortLock.release()
 				child.monitorFd = os.open(child.ptyFile, os.O_RDWR | os.O_NOCTTY)
 				child.monitor = os.fdopen(child.monitorFd)
@@ -519,20 +525,35 @@
 			hostname = socket.gethostname()
 			if (child.vncPort == -1):
 				self.vncPortLock.acquire()
-				port = self.vncPort
-				self.vncPort = self.vncPort + 1
+				port = 0
+				while (port in self.vncPorts):
+					port = port + 1
+				self.vncPorts.append(port)
 				self.vncPortLock.release()
 				self.enterCommand(child, "change vnc :%d" % (port))
 				child.vncPort = port
 				self.saveChildInfo(child)
 			port = child.vncPort
-			return "%s:%d" % (hostname, port)
+			return "VNC started on %s:%d" % (hostname, port+5900)
 		elif (arg == "stopvnc"):
 			child = self.getChildFromPid(vmId)
 			self.enterCommand(child, "change vnc none")
-			child.vncPort = -1
-			self.saveChildInfo(child)
-			return "None"
+			if (child.vncPort != -1):
+				self.vncPortLock.acquire()
+				self.vncPorts.remove(child.vncPort)
+				self.vncPortLock.release()
+				child.vncPort = -1
+				self.saveChildInfo(child)
+			return "VNC halted"
+		elif (arg == "startconsole"):
+			child = self.getChildFromPid(vmId)
+			hostname = socket.gethostname()
+			self.consolePortLock.acquire()
+			consolePort = self.consolePort
+			self.consolePort = self.consolePort+1
+			self.consolePortLock.release()
+			threading.Thread(target=lambda: controlConsole(child,consolePort)).start()
+			return "Control console listenting on %s:%d" % (hostname, consolePort)
 		else:
 			return "Unknown arg %s" % (arg)