# HG changeset patch
# User Shriram Rajagopalan <rshriram@xxxxxxxxx>
# Date 1307360439 25200
# Node ID d681b8ed0d03557f896cbc28d7ec244a2bc75bf2
# Parent 6f215b893873d61fc07c693c40466299973b41d4
remus: remove dead code and unused modules
remove unused modules (profile, tapdisk, vdi) and
unused thread classes/qdisc classes from the python code
base.
Signed-off-by: Shriram Rajagopalan <rshriram@xxxxxxxxx>
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/profile.py
--- a/tools/python/xen/remus/profile.py Mon Jun 06 04:40:28 2011 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-"""Simple profiling module
-"""
-
-import time
-
-class ProfileBlock(object):
- """A section of code to be profiled"""
- def __init__(self, name):
- self.name = name
-
- def enter(self):
- print "PROF: entered %s at %f" % (self.name, time.time())
-
- def exit(self):
- print "PROF: exited %s at %f" % (self.name, time.time())
-
-class NullProfiler(object):
- def enter(self, name):
- pass
-
- def exit(self, name=None):
- pass
-
-class Profiler(object):
- def __init__(self):
- self.blocks = {}
- self.running = []
-
- def enter(self, name):
- try:
- block = self.blocks[name]
- except KeyError:
- block = ProfileBlock(name)
- self.blocks[name] = block
-
- block.enter()
- self.running.append(block)
-
- def exit(self, name=None):
- if name is not None:
- block = None
- while self.running:
- tmp = self.running.pop()
- if tmp.name == name:
- block = tmp
- break
- tmp.exit()
- if not block:
- raise KeyError('block %s not running' % name)
- else:
- try:
- block = self.running.pop()
- except IndexError:
- raise KeyError('no block running')
-
- block.exit()
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/qdisc.py
--- a/tools/python/xen/remus/qdisc.py Mon Jun 06 04:40:28 2011 -0700
+++ b/tools/python/xen/remus/qdisc.py Mon Jun 06 04:40:39 2011 -0700
@@ -109,43 +109,6 @@
qdisc_kinds['prio'] = PrioQdisc
qdisc_kinds['pfifo_fast'] = PrioQdisc
-class CfifoQdisc(Qdisc):
- fmt = 'II'
-
- def __init__(self, qdict):
- super(CfifoQdisc, self).__init__(qdict)
-
- if qdict.get('options'):
- self.unpack(qdict['options'])
- else:
- self.epoch = 0
- self.vmid = 0
-
- def pack(self):
- return struct.pack(self.fmt, self.epoch, self.vmid)
-
- def unpack(self, opts):
- self.epoch, self.vmid = struct.unpack(self.fmt, opts)
-
- def parse(self, opts):
- args = list(opts)
- try:
- while args:
- arg = args.pop(0)
- if arg == 'epoch':
- self.epoch = int(args.pop(0))
- continue
- if arg.lower() == 'vmid':
- self.vmid = int(args.pop(0))
- continue
- except Exception, inst:
- raise QdiscException(str(inst))
-
- def optstr(self):
- return 'epoch %d vmID %d' % (self.epoch, self.vmid)
-
-qdisc_kinds['cfifo'] = CfifoQdisc
-
TC_PLUG_CHECKPOINT = 0
TC_PLUG_RELEASE = 1
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/save.py
--- a/tools/python/xen/remus/save.py Mon Jun 06 04:40:28 2011 -0700
+++ b/tools/python/xen/remus/save.py Mon Jun 06 04:40:39 2011 -0700
@@ -1,8 +1,7 @@
#!/usr/bin/env python
-import os, select, socket, threading, time, signal, xmlrpclib
+import os, socket, xmlrpclib
-from xen.xend.XendClient import server
from xen.xend.xenstore.xswatch import xswatch
import xen.lowlevel.xc
@@ -13,10 +12,6 @@
import vm, image
-XCFLAGS_LIVE = 1
-
-xcsave = '/usr/lib/xen/bin/xc_save'
-
class _proxy(object):
"proxy simulates an object without inheritance"
def __init__(self, obj):
@@ -30,58 +25,6 @@
class CheckpointError(Exception): pass
-class CheckpointingFile(_proxy):
- """Tee writes into separate file objects for each round.
- This is necessary because xc_save gets a single file descriptor
- for the duration of checkpointing.
- """
- def __init__(self, path):
- self.path = path
-
- self.round = 0
- self.rfd, self.wfd = os.pipe()
- self.fd = file(path, 'wb')
-
- # this pipe is used to notify the writer thread of checkpoints
- self.cprfd, self.cpwfd = os.pipe()
-
- super(CheckpointingFile, self).__init__(self.fd)
-
- wt = threading.Thread(target=self._wrthread, name='disk-write-thread')
- wt.setDaemon(True)
- wt.start()
- self.wt = wt
-
- def fileno(self):
- return self.wfd
-
- def close(self):
- os.close(self.wfd)
- # closing wfd should signal writer to stop
- self.wt.join()
- os.close(self.rfd)
- os.close(self.cprfd)
- os.close(self.cpwfd)
- self.fd.close()
- self.wt = None
-
- def checkpoint(self):
- os.write(self.cpwfd, '1')
-
- def _wrthread(self):
- while True:
- r, o, e = select.select((self.rfd, self.cprfd), (), ())
- if self.rfd in r:
- data = os.read(self.rfd, 256 * 1024)
- if not data:
- break
- self.fd.write(data)
- if self.cprfd in r:
- junk = os.read(self.cprfd, 1)
- self.round += 1
- self.fd = file('%s.%d' % (self.path, self.round), 'wb')
- self.proxy(self.fd)
-
class MigrationSocket(_proxy):
def __init__(self, address):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -101,36 +44,6 @@
fd = os.fdopen(filedesc, 'w+')
super(NullSocket, self).__init__(fd)
-class Keepalive(object):
- "Call a keepalive method at intervals"
- def __init__(self, method, interval=0.1):
- self.keepalive = method
- self.interval = interval
-
- self.thread = None
- self.running = False
-
- def start(self):
- if not self.interval:
- return
- self.thread = threading.Thread(target=self.run,
name='keepalive-thread')
- self.thread.setDaemon(True)
- self.running = True
- self.thread.start()
-
- def stop(self):
- if not self.thread:
- return
- self.running = False
- self.thread.join()
- self.thread = None
-
- def run(self):
- while self.running:
- self.keepalive()
- time.sleep(self.interval)
- self.keepalive(stop=True)
-
class Saver(object):
def __init__(self, domid, fd, suspendcb=None, resumecb=None,
checkpointcb=None, interval=0):
@@ -174,10 +87,5 @@
pass
def _resume(self):
- """low-overhead version of XendDomainInfo.resumeDomain"""
- # TODO: currently assumes SUSPEND_CANCEL is available
- if True:
xc.domain_resume(self.vm.domid, 1)
xsutil.ResumeDomain(self.vm.domid)
- else:
- server.xend.domain.resumeDomain(self.vm.domid)
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/tapdisk.py
--- a/tools/python/xen/remus/tapdisk.py Mon Jun 06 04:40:28 2011 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-import blkdev
-
-class TapDisk(BlkDev):
- pass
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/vdi.py
--- a/tools/python/xen/remus/vdi.py Mon Jun 06 04:40:28 2011 -0700
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,121 +0,0 @@
-#code to play with vdis and snapshots
-
-import os
-
-def run(cmd):
- fd = os.popen(cmd)
- res = [l for l in fd if l.rstrip()]
- return not fd.close(), res
-
-
-_blockstore = '/blockstore.dat'
-
-def set_blockstore(blockstore):
- global _blockstore
- __blockstore = blockstore
-
-
-class SnapShot:
- def __init__(self, vdi, block, index):
- self.__vdi = vdi
- self.__block = block
- self.__index = index
-
- #TODO add snapshot date and radix
-
- def __str__(self):
- return '%d %d %d' % (self.__vdi.id(), self.__block, self.__index)
-
- def vdi(self):
- return self.__vdi
-
- def block(self):
- return self.__block
-
- def index(self):
- return self.__index
-
- def match(self, block, index):
- return self.__block == block and self.__index == index
-
-
-class VDIException(Exception):
- pass
-
-
-class VDI:
- def __init__(self, id, name):
- self.__id = id
- self.__name = name
-
- def __str__(self):
- return 'vdi: %d %s' % (self.__id, self.__name)
-
- def id(self):
- return self.__id
-
- def name(self):
- return self.__name
-
- def list_snapshots(self):
- res, ls = run('vdi_snap_list %s %d' % (_blockstore, self.__id))
- if res:
- return [SnapShot(self, int(l[0]), int(l[1])) for l in [l.split()
for l in ls[1:]]]
- else:
- raise VDIException("Error reading snapshot list")
-
- def snapshot(self):
- res, ls = run('vdi_checkpoint %s %d' % (_blockstore, self.__id))
- if res:
- _, block, idx = ls[0].split()
- return SnapShot(self, int(block), int(idx))
- else:
- raise VDIException("Error taking vdi snapshot")
-
-
-def create(name, snap):
- res, _ = run('vdi_create %s %s %d %d'
- % (_blockstore, name, snap.block(), snap.index()))
- if res:
- return lookup_by_name(name)
- else:
- raise VDIException('Unable to create vdi from snapshot')
-
-
-def fill(name, img_file):
- res, _ = run('vdi_create %s %s' % (_blockstore, name))
-
- if res:
- vdi = lookup_by_name(name)
- res, _ = run('vdi_fill %d %s' % (vdi.id(), img_file))
- if res:
- return vdi
- raise VDIException('Unable to create vdi from disk img file')
-
-
-def list_vdis():
- vdis = []
- res, lines = run('vdi_list %s' % _blockstore)
- if res:
- for l in lines:
- r = l.split()
- vdis.append(VDI(int(r[0]), r[1]))
- return vdis
- else:
- raise VDIException("Error doing vdi list")
-
-
-def lookup_by_id(id):
- vdis = list_vdis()
- for v in vdis:
- if v.id() == id:
- return v
- raise VDIException("No match from vdi id")
-
-
-def lookup_by_name(name):
- vdis = list_vdis()
- for v in vdis:
- if v.name() == name:
- return v
- raise VDIException("No match for vdi name")
diff -r 6f215b893873 -r d681b8ed0d03 tools/python/xen/remus/vm.py
--- a/tools/python/xen/remus/vm.py Mon Jun 06 04:40:28 2011 -0700
+++ b/tools/python/xen/remus/vm.py Mon Jun 06 04:40:39 2011 -0700
@@ -143,10 +143,6 @@
return [blkdev.parse(disk) for disk in disks]
-def fromxend(domid):
- "create a VM object from xend information"
- return VM(domid)
-
def getshadowmem(vm):
"Balloon down domain0 to create free memory for shadow paging."
maxmem = int(vm.dom['maxmem'])
diff -r 6f215b893873 -r d681b8ed0d03 tools/remus/remus
--- a/tools/remus/remus Mon Jun 06 04:40:28 2011 -0700
+++ b/tools/remus/remus Mon Jun 06 04:40:39 2011 -0700
@@ -78,12 +78,9 @@
# I am not sure what the best way to die is. xm destroy is another
option,
# or we could attempt to trigger some instant reboot.
print "dying..."
- print util.runcmd(['sudo', 'ifdown', 'eth2'])
- # dangling imq0 handle on vif locks up the system
for buf in bufs:
buf.uninstall()
print util.runcmd(['sudo', 'xm', 'destroy', cfg.domid])
- print util.runcmd(['sudo', 'ifup', 'eth2'])
def getcommand():
"""Get a command to execute while running.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|