[CRIU] [PATCH v3] Add docker phaul driver
Pavel Emelyanov
xemul at parallels.com
Wed Oct 21 05:23:58 PDT 2015
> diff --git a/phaul/p_haul_iters.py b/phaul/p_haul_iters.py
> index b2c76e3..f8b97db 100644
> --- a/phaul/p_haul_iters.py
> +++ b/phaul/p_haul_iters.py
> @@ -62,6 +62,7 @@ class phaul_iter_worker:
> self.fs.set_options(opts)
> self.__force = opts["force"]
> self.pre_dump = opts["pre_dump"]
> + self.target_host_ip = opts["to"]
>
> def validate_cpu(self):
> logging.info("Checking CPU compatibility")
> @@ -110,6 +111,12 @@ class phaul_iter_worker:
> self.fs.set_work_dir(self.img.work_dir())
> self.fs.start_migration()
>
> + # TODO: Do not do predump for docker right now. Add page-server
> + # to docker C/R API, then we can enable the pre-dump
> + if self.htype.get_driver_name() == "docker" :
> + logging.info("Disable pre-dump for docker")
> + self.pre_dump = False
> +
No if self.htype.get_driver_name() == "docker" checks should remain in
generic code, please.
> logging.info("Checking for Dirty Tracking")
> if self.pre_dump == PRE_DUMP_AUTO_DETECT:
> # pre-dump auto-detection
> @@ -194,36 +201,41 @@ class phaul_iter_worker:
>
> logging.info("Final dump and restore")
>
> - self.target_host.start_iter()
> - self.img.new_image_dir()
> + if self.htype.get_driver_name() == "docker" :
> + # call docker dump API
> + self.htype.dump()
> + logging.info("Dump complete")
Why do you need such rough fix? Why just setting pre_dump to false doesn't help?
> + else:
> + self.target_host.start_iter()
> + self.img.new_image_dir()
>
> - logging.info("\tIssuing dump command to service")
> + logging.info("\tIssuing dump command to service")
>
> - req = criu_req.make_dump_req(
> - self.pid, self.htype, self.img, self.criu_connection, self.fs)
> - resp = self.criu_connection.send_req(req)
> - while True:
> - if resp.type != pycriu.rpc.NOTIFY:
> - raise Exception("Dump failed")
> -
> - if resp.notify.script == "post-dump":
> - #
> - # Dump is effectively over. Now CRIU
> - # waits for us to do whatever we want
> - # and keeps the tasks frozen.
> - #
> - break
> + req = criu_req.make_dump_req(
> + self.pid, self.htype, self.img, self.criu_connection, self.fs)
> + resp = self.criu_connection.send_req(req)
> + while True:
> + if resp.type != pycriu.rpc.NOTIFY:
> + raise Exception("Dump failed")
> +
> + if resp.notify.script == "post-dump":
> + #
> + # Dump is effectively over. Now CRIU
> + # waits for us to do whatever we want
> + # and keeps the tasks frozen.
> + #
> + break
>
> - elif resp.notify.script == "network-lock":
> - self.htype.net_lock()
> - elif resp.notify.script == "network-unlock":
> - self.htype.net_unlock()
> + elif resp.notify.script == "network-lock":
> + self.htype.net_lock()
> + elif resp.notify.script == "network-unlock":
> + self.htype.net_unlock()
>
> - logging.info("\t\tNotify (%s)", resp.notify.script)
> - resp = self.criu_connection.ack_notify()
> + logging.info("\t\tNotify (%s)", resp.notify.script)
> + resp = self.criu_connection.ack_notify()
>
> - logging.info("Dump complete")
> - self.target_host.end_iter()
> + logging.info("Dump complete")
> + self.target_host.end_iter()
>
> #
> # Dump is complete -- go to target node,
> @@ -233,8 +245,12 @@ class phaul_iter_worker:
>
> logging.info("Final FS and images sync")
> self.fs.stop_migration()
> - self.img.sync_imgs_to_target(self.target_host, self.htype,
> - self.connection.mem_sk)
> +
> + if self.htype.get_driver_name() == "docker" :
> + self.htype.send_criu_images(self.target_host_ip)
The fs_haul_docker.send_criu_images() does almost the same as phaul_images.send_criu_images
do, please, reuse the phaul_images class functionality for this.
> + else:
> + self.img.sync_imgs_to_target(self.target_host, self.htype,
> + self.connection.mem_sk)
>
> logging.info("Asking target host to restore")
> self.target_host.restore_from_images()
-- Pavel
More information about the CRIU
mailing list