Small interdiff due to lin errors:

diff --git a/lib/storage/filestorage.py b/lib/storage/filestorage.py
index 4f001b1..3e64018 100644
--- a/lib/storage/filestorage.py
+++ b/lib/storage/filestorage.py
@@ -26,7 +26,6 @@
 import os

 from ganeti import errors
-from ganeti import utils


 def GetSpaceInfo(path):
@@ -37,6 +36,7 @@ def GetSpaceInfo(path):
      @param path: Path of the file whose embracing device's capacity is
        reported.
      @return: a dictionary containing 'vg_size' and 'vg_free' given in
MebiBytes
+
   """
   try:
     result = os.statvfs(path)
@@ -44,5 +44,5 @@ def GetSpaceInfo(path):
     size = (result.f_frsize * result.f_blocks) / (1024 * 1024)
     return {"vg_size": size, "vg_free": free}
   except OSError, e:
-    raise errors.CommandError("Failed retrieve file system information
about"
+    raise errors.CommandError("Failed to retrieve file system information
about"
                               " path: %s - %s" % (path, e.strerror))



On Wed, May 15, 2013 at 12:13 PM, Helga Velroyen <[email protected]> wrote:

> This simplifies my previous commit (820bade90) by using os.statvfs
> instead of parsing the output of 'df'.
>
> Signed-off-by: Helga Velroyen <[email protected]>
> ---
>  lib/storage/filestorage.py                     | 54
> ++++++--------------------
>  test/py/ganeti.storage.filestorage_unittest.py | 44 ---------------------
>  2 files changed, 12 insertions(+), 86 deletions(-)
>
> diff --git a/lib/storage/filestorage.py b/lib/storage/filestorage.py
> index 65c963c..4f001b1 100644
> --- a/lib/storage/filestorage.py
> +++ b/lib/storage/filestorage.py
> @@ -23,56 +23,26 @@
>
>  """
>
> +import os
> +
>  from ganeti import errors
>  from ganeti import utils
>
> -DF_M_UNIT = 'M'
> -DF_MIN_NUM_COLS = 4
> -DF_NUM_LINES = 2
> -
> -
> -def _ParseDfResult(dfresult):
> -  """Parses the output of the call of the 'df' tool.
> -
> -     @type dfresult: string
> -     @param dfresult: output of the 'df' call
> -     @return: tuple (size, free) of the total and free disk space in
> MebiBytes
> -  """
> -  df_lines = dfresult.splitlines()
> -  if len(df_lines) != DF_NUM_LINES:
> -    raise errors.CommandError("'df' output has wrong number of lines: %s"
> %
> -                              len(df_lines))
> -  df_values = df_lines[1].strip().split()
> -  if len(df_values) < DF_MIN_NUM_COLS:
> -    raise errors.CommandError("'df' output does not have enough columns:
> %s" %
> -                              len(df_values))
> -  size_str = df_values[1]
> -  if size_str[-1] != DF_M_UNIT:
> -    raise errors.CommandError("'df': 'size' not given in Mebibytes.")
> -  free_str = df_values[3]
> -  if free_str[-1] != DF_M_UNIT:
> -    raise errors.CommandError("'df': 'free' not given in Mebibytes.")
> -  size = int(size_str[:-1])
> -  free = int(free_str[:-1])
> -  return (size, free)
> -
>
> -def GetSpaceInfo(path, _parsefn=_ParseDfResult):
> +def GetSpaceInfo(path):
>    """Retrieves the free and total space of the device where the file is
>       located.
>
>       @type path: string
>       @param path: Path of the file whose embracing device's capacity is
>         reported.
> -     @type _parsefn: function
> -     @param _parsefn: Function that parses the output of the 'df' command;
> -       given as parameter to make this code more testable.
> -     @return: a dictionary containing 'vg_size' and 'vg_free'
> +     @return: a dictionary containing 'vg_size' and 'vg_free' given in
> MebiBytes
>    """
> -  cmd = ['df', '-BM', path]
> -  result = utils.RunCmd(cmd)
> -  if result.failed:
> -    raise errors.CommandError("Failed to run 'df' command: %s - %s" %
> -                              (result.fail_reason, result.output))
> -  (size, free) = _parsefn(result.stdout)
> -  return {"vg_size": size, "vg_free": free}
> +  try:
> +    result = os.statvfs(path)
> +    free = (result.f_frsize * result.f_bavail) / (1024 * 1024)
> +    size = (result.f_frsize * result.f_blocks) / (1024 * 1024)
> +    return {"vg_size": size, "vg_free": free}
> +  except OSError, e:
> +    raise errors.CommandError("Failed retrieve file system information
> about"
> +                              " path: %s - %s" % (path, e.strerror))
> diff --git a/test/py/ganeti.storage.filestorage_unittest.py b/test/py/
> ganeti.storage.filestorage_unittest.py
> index 03b03b2..53e1398 100755
> --- a/test/py/ganeti.storage.filestorage_unittest.py
> +++ b/test/py/ganeti.storage.filestorage_unittest.py
> @@ -45,50 +45,6 @@ class TestFileStorageSpaceInfo(unittest.TestCase):
>      """
>      info = filestorage.GetSpaceInfo("/")
>
> -  def testParseDfOutputValidInput(self):
> -    """Tests that parsing of the output of 'df' works correctly.
> -
> -    """
> -    valid_df_output = \
> -      "Filesystem             1M-blocks   Used Available Use% Mounted
> on\n" \
> -      "/dev/mapper/sysvg-root   161002M 58421M    94403M  39% /"
> -    expected_size = 161002
> -    expected_free = 94403
> -
> -    (size, free) = filestorage._ParseDfResult(valid_df_output)
> -    self.assertEqual(expected_size, size,
> -                     "Calculation of total size is incorrect.")
> -    self.assertEqual(expected_free, free,
> -                     "Calculation of free space is incorrect.")
> -
> -
> -  def testParseDfOutputInvalidInput(self):
> -    """Tests that parsing of the output of 'df' works correctly when
> invalid
> -       input is given.
> -
> -    """
> -    invalid_output_header_missing = \
> -      "/dev/mapper/sysvg-root   161002M 58421M    94403M  39% /"
> -    invalid_output_dataline_missing = \
> -      "Filesystem             1M-blocks   Used Available Use% Mounted
> on\n"
> -    invalid_output_wrong_num_columns = \
> -      "Filesystem             1M-blocks Available\n" \
> -      "/dev/mapper/sysvg-root   161002M    94403M"
> -    invalid_output_units_wrong = \
> -      "Filesystem             1M-blocks   Used Available Use% Mounted
> on\n" \
> -      "/dev/mapper/sysvg-root   161002G 58421G    94403G  39% /"
> -    invalid_output_units_missing = \
> -      "Filesystem             1M-blocks   Used Available Use% Mounted
> on\n" \
> -      "/dev/mapper/sysvg-root    161002  58421     94403  39% /"
> -    invalid_outputs = [invalid_output_header_missing,
> -                       invalid_output_dataline_missing,
> -                       invalid_output_wrong_num_columns,
> -                       invalid_output_units_wrong,
> -                       invalid_output_units_missing]
> -
> -    for output in invalid_outputs:
> -      self.assertRaises(errors.CommandError, filestorage._ParseDfResult,
> output)
> -
>
>  if __name__ == "__main__":
>    testutils.GanetiTestProgram()
> --
> 1.8.2.1
>
>

Reply via email to