X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2FTrackers.py;h=de26b31b03bfc75ee2f602d72255b05f5dba0398;hb=208728a0f3fa8c08548a13f2654aa8d83693d322;hp=dbe4abf552fb8d67841250a5fd7683b945aba166;hpb=8b6dad13183dcf5fd7771a4b38db6efb97aabb91;p=tests.git diff --git a/system/Trackers.py b/system/Trackers.py index dbe4abf..de26b31 100644 --- a/system/Trackers.py +++ b/system/Trackers.py @@ -1,6 +1,8 @@ #!/usr/bin/python -# $Id$ +# Thierry Parmentelat +# Copyright (C) 2010 INRIA +# import os import utils @@ -28,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: @@ -45,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:] @@ -64,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=[] @@ -82,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-qemus" # how many concurrent plcs are we keeping alive - adjust with the IP pool size - DEFAULT_MAX_INSTANCES = 1 + DEFAULT_MAX_INSTANCES = 3 def __init__ (self,options,filename=None,instances=0): if not filename: filename=TrackerQemu.DEFAULT_FILENAME @@ -101,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 +