fix for compat mode
[tests.git] / system / Trackers.py
index 8f702b5..de26b31 100644 (file)
@@ -1,5 +1,8 @@
 #!/usr/bin/python
 
+# Thierry Parmentelat <thierry.parmentelat@inria.fr>
+# Copyright (C) 2010 INRIA 
+#
 import os
 
 import utils
@@ -27,6 +30,14 @@ class Tracker:
             tracks=[]
         self.tracks = [track for track in tracks if track]
 
+    def list (self):
+        try:
+            contents=file(self.filename).read()
+            print "==>",self.filename,"<=="
+            print contents
+        except:
+            print "xxxxxxxxxxxx",self.filename,"not found"
+
     def store (self):
         out = file(self.filename,'w')
         for track in self.tracks:
@@ -44,17 +55,33 @@ class Tracker:
         self.tracks.append( track )
         print "Recorded %s in tracker %s"%(track,self.filename)
 
-    # this actually stops the old instances to fit the number of instances 
-    def free (self):
+    # this stops the instances currently attached with this test session and release tracker
+    def release (self,track):
+        for already in self.tracks:
+            if already==track:
+                if self.options.dry_run:
+                    print 'dry_run: Tracker.release - skipping %s'%(track)
+                    return
+                self.tracks.remove(track)
+                print "Releasing %s in tracker %s"%(track,self.filename)
+                command = self.stop_command (track)
+                utils.header("Trackers.make_space track : %s"%command)
+                utils.system(command)
+        print '%s was not found in %s'%(track,self.filename)
+        return
+
+    # this actually stops the old instances, so that the total fits in the number of instances 
+    def make_space (self):
         # number of instances to stop
         how_many=len(self.tracks)-self.instances
         # nothing todo until we have more than keep_vservers in the tracker
         if how_many <= 0:
-            print 'Tracker.free : limit %d not reached'%self.instances
+            print 'Tracker.make_space : limit %d not reached'%self.instances
             return
         to_stop = self.tracks[:how_many]
         for track in to_stop:
             command = self.stop_command (track)
+            utils.header("Trackers.make_space track : %s"%command)
             utils.system(command)
         if not self.options.dry_run:
             self.tracks = self.tracks[how_many:]
@@ -63,6 +90,7 @@ class Tracker:
     def cleanup (self):
         for track in self.tracks:
             command=self.stop_command(track)
+            utils.header("Trackers.cleanup track : %s"%command)
             utils.system(command)
         if not self.options.dry_run:
             self.tracks=[]
@@ -81,16 +109,25 @@ class TrackerPlc (Tracker):
     def record (self, hostname, vservername):
         Tracker.record (self,"%s@%s"%(hostname,vservername))
 
+    def release (self, hostname, vservername):
+        Tracker.release (self,"%s@%s"%(hostname,vservername))
+
     def stop_command (self, track):
         (hostname,vservername) = track.split('@')
         return TestSsh(hostname).actual_command("vserver --silent %s stop"%vservername)
         
+    def plcnames (self):
+        return [ self.plcname(track) for track in self.tracks ]
+
+    def plcname (self, track):
+        (hostname,vservername) = track.split('@')
+        return vservername.rsplit('-',1)[1]
 
 class TrackerQemu (Tracker):
 
-    DEFAULT_FILENAME=os.environ['HOME']+"/tracker-emus"
+    DEFAULT_FILENAME=os.environ['HOME']+"/tracker-qemus"
     # how many concurrent plcs are we keeping alive - adjust with the IP pool size
-    DEFAULT_MAX_INSTANCES = 2
+    DEFAULT_MAX_INSTANCES = 3
 
     def __init__ (self,options,filename=None,instances=0):
         if not filename: filename=TrackerQemu.DEFAULT_FILENAME
@@ -100,6 +137,24 @@ class TrackerQemu (Tracker):
     def record (self, hostname, buildname, nodename):
         Tracker.record (self,"%s@%s@%s"%(hostname,buildname,nodename))
 
+    def release (self, hostname, buildname, nodename):
+        Tracker.release (self,"%s@%s@%s"%(hostname,buildname,nodename))
+
     def stop_command (self, track):
         (hostname,buildname,nodename) = track.split('@')
         return TestSsh(hostname).actual_command("%s/qemu-%s/qemu-kill-node this"%(buildname,nodename))
+
+    def hostnames (self):
+        return [ self.hostname(track) for track in self.tracks ]
+
+    def hostname (self, track):
+        (hostname,buildname,nodename) = track.split('@')
+        return hostname
+
+    def nodenames (self):
+        return [ self.nodename(track) for track in self.tracks ]
+        
+    def nodename (self, track):
+        (hostname,buildname,nodename) = track.split('@')
+        return nodename
+