diff options
author | Alon Levy <alevy@redhat.com> | 2012-03-04 20:49:09 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2012-03-04 20:49:09 +0200 |
commit | dc4789a22d7afbdd987b3e86852244912b68652e (patch) | |
tree | d38a4241b9dd4c550f899bed7a5e27a5210b9a8f | |
parent | 9a9d91e73da4dba70177dd01611810e028d6515b (diff) |
resource limit for core dump; --sleep param; --glib, and working glib loop
-rwxr-xr-x | migrate.py | 52 |
1 files changed, 39 insertions, 13 deletions
@@ -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() |