summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Levy <alevy@redhat.com>2012-03-04 20:49:09 +0200
committerAlon Levy <alevy@redhat.com>2012-03-04 20:49:09 +0200
commitdc4789a22d7afbdd987b3e86852244912b68652e (patch)
treed38a4241b9dd4c550f899bed7a5e27a5210b9a8f
parent9a9d91e73da4dba70177dd01611810e028d6515b (diff)
resource limit for core dump; --sleep param; --glib, and working glib loop
-rwxr-xr-xmigrate.py52
1 files changed, 39 insertions, 13 deletions
diff --git a/migrate.py b/migrate.py
index f0d8029..a2e99cb 100755
--- a/migrate.py
+++ b/migrate.py
@@ -32,8 +32,6 @@ uses glib event loop for timers
# command query-status, if running good
# if not listen to events until event of running
-import glib
-
try:
import qmp
except:
@@ -52,6 +50,8 @@ import socket
import datetime
import atexit
import argparse
+import resource
+import glib
def get_args():
parser = argparse.ArgumentParser(description='Process some integers.')
@@ -68,6 +68,8 @@ def get_args():
parser.add_argument('--vdagent', choices=['on', 'off'], default='on')
parser.add_argument('--usbtablet', choices=['on', 'off'], default='on')
parser.add_argument('--secure', choices=['on', 'off'], default='off')
+ parser.add_argument('--sleep', default=20, type=float)
+ parser.add_argument('--glib', default=False, action='store_true')
args = parser.parse_args(sys.argv[1:])
if os.path.exists(args.qemu):
args.qemu_exec = args.qemu
@@ -203,11 +205,19 @@ def glib_wrap_iter(it):
def sleep_done(*args):
glib_wrap_iter(it)
return False
- cmd, args = it.next()
+ try:
+ cmd, args = it.next()
+ except StopIteration:
+ return
if not hasattr(args, '__len__'):
args = (args,)
if cmd in known_commands:
- return glib_wrap_iter(known_commands[cmd](*args))
+ def handle_and_continue(cmd1, args1):
+ it2 = known_commands[cmd1](*args1)
+ for cmd, args in it2:
+ yield cmd, args
+ glib_wrap_iter(it)
+ return glib_wrap_iter(handle_and_continue(cmd1=cmd, args1=args))
elif cmd == 'sleep':
assert(len(args) == 1)
glib.timeout_add(int(1000 * args[0]), sleep_done)
@@ -324,14 +334,24 @@ class Migrator(object):
self.active = self.target
which = 0 if new_spice_port == self.spice_ports[0] else 1
self.target = self.start_qemu(which=which, incoming=True)
- print self.migration_count
self.migration_count += 1
- def iterate(self, wait_for_user_input=False):
+ def blocking_iterate(self, wait_for_user_input=False):
blocker(self._iterate(wait_for_user_input))
- def start(self):
- glib_wrap_iter(self._iterate(False))
+ def loop(self, dt):
+ dt = int(dt)
+ self.count = 0
+ def single():
+ def single_iter():
+ for cmd, args in self._iterate(False):
+ print cmd, args
+ yield cmd, args
+ self.count += 1
+ glib.timeout_add(dt, single)
+ glib_wrap_iter(single_iter())
+ return False
+ single()
def main():
args = get_args()
@@ -352,11 +372,17 @@ def main():
extra_args = ['-vga', 'qxl', '-device', 'qxl'], sound=False)
atexit.register(cleanup, migrator)
#while True:
- for i in xrange(50):
- migrator.iterate()
- print "sleeping 20 seconds"
- time.sleep(20)
- time.sleep(100000)
+ if args.glib:
+ migrator.loop(args.sleep*1000)
+ mainloop = glib.MainLoop()
+ mainloop.run()
+ else:
+ for i in xrange(50):
+ migrator.blocking_iterate()
+ print "sleeping %d seconds" % args.sleep
+ time.sleep(args.sleep)
if __name__ == '__main__':
+ # Limit core dumps to 10GB (default is no core dumps)
+ resource.setrlimit(resource.RLIMIT_CORE, (10*1000*1000*1000, -1))
main()