[PATCH 6/7] S7904: method for checking disk space is available

Richard Maw richard.maw at codethink.co.uk
Tue Jun 4 17:52:46 BST 2013


---
 morphlib/util.py |   20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/morphlib/util.py b/morphlib/util.py
index ffc84d5..7b64250 100644
--- a/morphlib/util.py
+++ b/morphlib/util.py
@@ -236,3 +236,23 @@ def on_same_filesystem(path_a, path_b): # pragma: no cover
     """
     # TODO: return true if one path is a subvolume of the other on btrfs?
     return os.stat(path_a).st_dev == os.stat(path_b).st_dev
+
+def check_disk_available(tmp_path, tmp_min_size,
+                         cache_path, cache_min_size): # pragma: no cover
+    # if both are on the same filesystem, assume they share a storage pool,
+    # so the sum of the two sizes needs to be available
+    # TODO: if we need to do this on any more than 2 filesystems
+    #       extend it to take a [(path, min)] and do some arcane mathematics
+    #       to split it into groups that share a filesystem
+    if on_same_filesystem(tmp_path, cache_path):
+        tmp_min_size = cache_min_size = tmp_min_size + cache_min_size
+    tmp_size, cache_size = map(get_bytes_free_in_path, (tmp_path, cache_path))
+    errors = []
+    for path, min in [(tmp_path, tmp_min_size), (cache_path, cache_min_size)]:
+        free = get_bytes_free_in_path(path)
+        if free < min:
+            errors.append('\t%(path)s requires %(min)d bytes free, '
+                          'has %(free)d' % locals())
+    if not errors:
+        return
+    raise morphlib.Error('Inufficient space on disk:\n' + '\n'.join(errors))
-- 
1.7.10.4




More information about the baserock-dev mailing list