[CRIU] [PATCH v3 5/6] p.haul: handle older criu RPC interfaces
Adrian Reber
adrian at lisas.de
Thu Oct 8 07:06:48 PDT 2015
From: Adrian Reber <areber at redhat.com>
Wrap the calls to the new feature-check RPC interface into try: except:
to continue gracefully without stack traces. If the installed criu
supports feature-check it will be used to detect if memory tracking
should be enabled. If the installed criu is too old to support
feature-check no pre-dumping will be performed. Pre-dumps can still be
manually enabled via p.haul's command-line.
v2: rebased
v3: rebased
Signed-off-by: Adrian Reber <areber at redhat.com>
---
phaul/criu_req.py | 30 +++++++++++++++++++++---------
phaul/p_haul_iters.py | 40 ++++++++++++++++++++++++++++------------
2 files changed, 49 insertions(+), 21 deletions(-)
diff --git a/phaul/criu_req.py b/phaul/criu_req.py
index d97d4cf..9409c0d 100644
--- a/phaul/criu_req.py
+++ b/phaul/criu_req.py
@@ -4,15 +4,27 @@
import pycriu.rpc
-_names = {
- pycriu.rpc.DUMP: "dump",
- pycriu.rpc.PRE_DUMP: "pre_dump",
- pycriu.rpc.PAGE_SERVER: "page_server",
- pycriu.rpc.RESTORE: "restore",
- pycriu.rpc.CPUINFO_DUMP: "cpuinfo-dump",
- pycriu.rpc.CPUINFO_CHECK: "cpuinfo-check",
- pycriu.rpc.FEATURE_CHECK: "feature-check",
-}
+try:
+ _names = {
+ pycriu.rpc.DUMP: "dump",
+ pycriu.rpc.PRE_DUMP: "pre_dump",
+ pycriu.rpc.PAGE_SERVER: "page_server",
+ pycriu.rpc.RESTORE: "restore",
+ pycriu.rpc.CPUINFO_DUMP: "cpuinfo-dump",
+ pycriu.rpc.CPUINFO_CHECK: "cpuinfo-check",
+ pycriu.rpc.FEATURE_CHECK: "feature-check",
+ }
+except:
+ # Do not fail if installed criu does not support
+ # RPC call DIRTY_TRACKING
+ _names = {
+ pycriu.rpc.DUMP: "dump",
+ pycriu.rpc.PRE_DUMP: "pre_dump",
+ pycriu.rpc.PAGE_SERVER: "page_server",
+ pycriu.rpc.RESTORE: "restore",
+ pycriu.rpc.CPUINFO_DUMP: "cpuinfo-dump",
+ pycriu.rpc.CPUINFO_CHECK: "cpuinfo-check",
+ }
def get_name(req_type):
"""Return printable request name"""
diff --git a/phaul/p_haul_iters.py b/phaul/p_haul_iters.py
index 96458b8..85efc8b 100644
--- a/phaul/p_haul_iters.py
+++ b/phaul/p_haul_iters.py
@@ -91,25 +91,41 @@ class phaul_iter_worker:
self.fs.set_work_dir(self.img.work_dir())
self.fs.start_migration()
+ logging.info("Checking for Dirty Tracking")
if self.pre_dump == 0:
# pre-dump auto-detection
- logging.info("Checking for Dirty Tracking")
- req = criu_req.make_dirty_tracking_req(self.htype, self.img)
- resp = self.criu_connection.send_req(req)
- pre_dump = resp.success
+ try:
+ req = criu_req.make_dirty_tracking_req(
+ self.htype, self.img)
+ resp = self.criu_connection.send_req(req)
+ pre_dump = False
+ if not resp.success:
+ # Not able to do auto-detection, disable memory tracking
+ raise Exception()
+ if resp.HasField('features'):
+ if resp.features.HasField('mem_track'):
+ if resp.features.mem_track:
+ logging.info("\t`- Auto Enabled")
+ pre_dump = True
+ else:
+ logging.info("\t`- Auto Disabled")
+
+ except:
+ # The available criu seems to not
+ # support memory tracking auto detection.
+ pre_dump = False
+ logging.info("\t`- Auto detection not possible "
+ "- Disabled")
+
elif self.pre_dump == 1:
pre_dump = False
+ logging.info("\t`- Command-line disabled")
else:
pre_dump = True
+ logging.info("\t`- Command-line enabled")
- if resp.success:
- if resp.HasField('features'):
- if resp.features.HasField('mem_track'):
- if resp.features.mem_track:
- logging.info("Starting iterations")
- pre_dump = True
- else:
- self.criu_connection.memory_tracking(False)
+ if pre_dump:
+ logging.info("Starting iterations")
else:
self.criu_connection.memory_tracking(False)
--
1.8.3.1
More information about the CRIU
mailing list