[CRIU] [PATCH v3 03/12] p.haul: Implement class shared_ploop
Alexander Burluka
aburluka at virtuozzo.com
Mon Apr 11 09:28:59 PDT 2016
This class is required to do migration on ploops located
on pstorage or other shared filesystems. That migration
is performed via two snapshot scheme.
Signed-off-by: Alexander Burluka <aburluka at virtuozzo.com>
---
phaul/fs_haul_ploop.py | 27 +++++++++++++++++++++++++++
1 file changed, 27 insertions(+)
diff --git a/phaul/fs_haul_ploop.py b/phaul/fs_haul_ploop.py
index 7c8a84e..3fde112 100644
--- a/phaul/fs_haul_ploop.py
+++ b/phaul/fs_haul_ploop.py
@@ -3,6 +3,7 @@
#
import os
+import shutil
import logging
import threading
import libploop
@@ -32,6 +33,32 @@ def get_delta_abspath(delta_path, ct_priv):
return os.path.join(ct_priv, delta_path)
+def merge_ploop_snapshot(ddxml, guid):
+ libploop.snapshot(ddxml).delete(guid)
+
+
+class shared_ploop:
+ def __init__(self, path):
+ self.__backup_ddxml = get_ddxml_path(path) + ".copy"
+ self.__orig_ddxml = get_ddxml_path(path)
+
+ def prepare(self):
+ shutil.copyfile(self.__orig_ddxml, self.__backup_ddxml)
+ self.__orig_guid = libploop.snapshot(self.__orig_ddxml).create_offline()
+ self.__backup_guid = libploop.snapshot(self.__backup_ddxml).create()
+
+ def restore(self):
+ if self.__backup_guid:
+ os.rename(self.__backup_ddxml, self.__orig_ddxml)
+ merge_ploop_snapshot(self.__orig_ddxml, self.__backup_guid)
+
+ def cleanup(self):
+ if self.__orig_guid:
+ # TODO add delta removing when igor add it to libploop
+ os.remove(self.__backup_ddxml)
+ os.remove(self.__backup_ddxml + ".lck")
+
+
class p_haul_fs:
def __init__(self, deltas, ct_priv):
"""Initialize ploop disks hauler
--
1.8.3.1
More information about the CRIU
mailing list