[CRIU] [PATCH 5/7] htype: Make final dump be htype method

Pavel Emelyanov xemul at parallels.com
Thu Oct 22 05:46:07 PDT 2015


For Docker (and actually for everybody, but pid, else) it makes
perfect sense to make final dump request via htype's API, not
via CRIU directly.

Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
---
 phaul/p_haul_iters.py  | 24 +-----------------------
 phaul/p_haul_lxc.py    |  3 +++
 phaul/p_haul_module.py | 24 ++++++++++++++++++++++++
 phaul/p_haul_pid.py    |  3 +++
 phaul/p_haul_vz.py     |  3 +++
 5 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/phaul/p_haul_iters.py b/phaul/p_haul_iters.py
index 8e3afbd..6ad0a91 100644
--- a/phaul/p_haul_iters.py
+++ b/phaul/p_haul_iters.py
@@ -190,29 +190,7 @@ class phaul_iter_worker:
 		self.img.new_image_dir()
 
 		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
-
-			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()
+		self.htype.final_dump(self.pid, self.img, self.criu_connection, self.fs)
 
 		logging.info("Dump complete")
 		self.target_host.end_iter()
diff --git a/phaul/p_haul_lxc.py b/phaul/p_haul_lxc.py
index 702ade2..0f685d9 100644
--- a/phaul/p_haul_lxc.py
+++ b/phaul/p_haul_lxc.py
@@ -114,6 +114,9 @@ class p_haul_type:
 		logging.info("Putting config file into %s", lxc_dir)
 		shutil.copy(os.path.join(dir, "config"), self.__ct_config())
 
+	def final_dump(self, pid, img, ccon, fs):
+		p_haul_module.criu_dump(self, pid, img, ccon, fs)
+
 	def final_restore(self, img, connection):
 		p_haul_module.criu_restore(self, img, connection)
 
diff --git a/phaul/p_haul_module.py b/phaul/p_haul_module.py
index fdd4ca6..b97f8e1 100644
--- a/phaul/p_haul_module.py
+++ b/phaul/p_haul_module.py
@@ -6,6 +6,30 @@ import logging
 import pycriu.rpc
 import criu_req
 
+def criu_dump(htype, pid, img, criu_connection, fs):
+	req = criu_req.make_dump_req(pid, htype, img, criu_connection, fs)
+	resp = 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":
+			htype.net_lock()
+		elif resp.notify.script == "network-unlock":
+			htype.net_unlock()
+
+		logging.info("\t\tNotify (%s)", resp.notify.script)
+		resp = criu_connection.ack_notify()
+
+
 def criu_restore(htype, img, connection):
 	"""Perform final restore"""
 
diff --git a/phaul/p_haul_pid.py b/phaul/p_haul_pid.py
index 7b381a9..19e3b21 100644
--- a/phaul/p_haul_pid.py
+++ b/phaul/p_haul_pid.py
@@ -62,6 +62,9 @@ class p_haul_type:
 	def put_meta_images(self, dir):
 		pass
 
+	def final_dump(self, pid, img, ccon, fs):
+		p_haul_module.criu_dump(self, pid, img, ccon, fs)
+
 	def final_restore(self, img, connection):
 		p_haul_module.criu_restore(self, img, connection)
 
diff --git a/phaul/p_haul_vz.py b/phaul/p_haul_vz.py
index 13f3fd1..7148663 100644
--- a/phaul/p_haul_vz.py
+++ b/phaul/p_haul_vz.py
@@ -147,6 +147,9 @@ class p_haul_type:
 		if os.path.isfile(path):
 			os.remove(path)
 
+	def final_dump(self, pid, img, ccon, fs):
+		p_haul_module.criu_dump(self, pid, img, ccon, fs)
+
 	def final_restore(self, img, connection):
 		"""Perform Virtuozzo-specific final restore"""
 		try:
-- 
1.9.3




More information about the CRIU mailing list