[CRIU] [PATCH v2 12/12] p.haul: implement vz migration with shared ploops

Nikita Spiridonov nspiridonov at virtuozzo.com
Mon Apr 11 05:36:59 PDT 2016


Acked-by: Nikita Spiridonov <nspiridonov at virtuozzo.com>

thanks

On Sat, 2016-04-09 at 16:41 +0300, Alexander Burluka wrote:
> Final commit that introduces vz migration with ploops
> that are located on shared disks.
> Brief algorithm description:
> After freezing container source side creates copy of
> every shared ploop DiskDescriptor.xml (named DiskDescriptor.xml.copy)
> and makes snapshots delta on origin and copy.
> Origin snapshot would be used on destination after successful
> "vzctl restore" operation (this snapshot delta is created
> on source and merged on destination so it is create as "offline
> snapshot")
> On restore fail case DiskDescriptor.xml.copy would replace origin file
> and merged with copy snapshot delta.
> 
> Signed-off-by: Alexander Burluka <aburluka at virtuozzo.com>
> ---
>  phaul/iters.py | 32 ++++++++++++++++++++++----------
>  1 file changed, 22 insertions(+), 10 deletions(-)
> 
> diff --git a/phaul/iters.py b/phaul/iters.py
> index cbac565..453360e 100644
> --- a/phaul/iters.py
> +++ b/phaul/iters.py
> @@ -202,27 +202,36 @@ class phaul_iter_worker:
>  		self.htype.final_dump(root_pid, self.img, self.criu_connection, self.fs)
>  		self.target_host.end_iter()
>  
> -		# Handle final FS and images sync on frozen htype
> -		logging.info("Final FS and images sync")
> -		fsstats = self.fs.stop_migration()
> -		self.img.sync_imgs_to_target(self.target_host, self.htype,
> -			self.connection.mem_sk)
> +		try:
> +			# Handle final FS and images sync on frozen htype
> +			logging.info("Final FS and images sync")
> +			fsstats = self.fs.stop_migration()
> +
> +			self.img.sync_imgs_to_target(self.target_host, self.htype,
> +				self.connection.mem_sk)
>  
> -		# Restore htype on target
> -		logging.info("Asking target host to restore")
> -		self.target_host.restore_from_images()
> -		logging.info("Restored on target host")
> +			# Restore htype on target
> +			logging.info("Asking target host to restore")
> +			self.target_host.restore_from_images()
> +			logging.info("Restored on target host")
> +		except:
> +			self.fs.restore_shared_backups()
> +			raise
>  
>  		# Ack previous dump request to terminate all frozen tasks
>  		resp = self.criu_connection.ack_notify()
>  		if not resp.success:
> -			raise Exception("Dump screwed up")
> +			logging.warning("Bad notification from target host")
> +
> +		# cleanup shared disks backup
> +		self.fs.cleanup_shared_backups()
>  
>  		dstats = criu_api.criu_get_dstats(self.img)
>  		migration_stats.handle_iteration(dstats, fsstats)
>  
>  		logging.info("Migration succeeded")
>  		self.htype.umount()
> +		self.target_host.final_cleanup(self.fs.prepare_src_data({}))
>  		migration_stats.handle_stop(self)
>  		self.img.close()
>  		self.criu_connection.close()
> @@ -276,11 +285,14 @@ class phaul_iter_worker:
>  			logging.info("Started on target host")
>  
>  		except:
> +			self.fs.restore_shared_backups()
>  			self.htype.start()
>  			raise
>  
>  		logging.info("Migration succeeded")
> +		self.fs.cleanup_shared_backups()
>  		self.htype.umount()
> +		self.target_host.final_cleanup(self.fs.prepare_src_data({}))
>  		migration_stats.handle_stop()
>  
>  	def __check_live_iter_progress(self, index, dstats, prev_dstats):




More information about the CRIU mailing list