#!/usr/bin/python
-# $Id$
+# Thierry Parmentelat <thierry.parmentelat@inria.fr>
+# Copyright (C) 2010 INRIA
+#
import os
import utils
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:
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:]
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=[]
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
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
+