[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