Revision 7bcc78e4 lib/ssconf.py

b/lib/ssconf.py
28 28

  
29 29
import sys
30 30
import re
31
import os
31 32

  
32 33
from ganeti import errors
33 34
from ganeti import constants
......
52 53

  
53 54
    """
54 55
    self._file_name = file_name
55
    self._Load()
56
    self._last_inode = None
57
    self._last_mtime = None
58
    self._last_size = None
59
    # we need a forced reload at class init time, to initialize _last_*
60
    self._Load(force=True)
56 61

  
57
  def _Load(self):
62
  def _Load(self, force=False):
58 63
    """Loads (or reloads) the config file.
59 64

  
65
    @type force: boolean
66
    @param force: whether to force the reload without checking the mtime
67
    @rtype: boolean
68
    @return: boolean values that says whether we reloaded the configuration or not
69
             (because we decided it was already up-to-date)
70

  
60 71
    """
72
    cfg_stat = os.stat(self._file_name)
73
    inode = cfg_stat.st_ino
74
    mtime = cfg_stat.st_mtime
75
    size = cfg_stat.st_size
76

  
77
    reload = False
78
    if force or inode != self._last_inode or \
79
       mtime > self._last_mtime or \
80
       size != self._last_size:
81
      self._last_inode = inode
82
      self._last_mtime = mtime
83
      self._last_size = size
84
      reload = True
85

  
86
    if not reload:
87
      return False
88

  
61 89
    try:
62 90
      self._config_data = serializer.Load(utils.ReadFile(self._file_name))
63 91
    except IOError, err:
......
67 95
      raise errors.ConfigurationError("Cannot load config file %s: %s" %
68 96
                                      (self._file_name, err))
69 97

  
98
    return True
99

  
70 100
  # Clients can request a reload of the config file, so we export our internal
71 101
  # _Load function as Reload.
72 102
  Reload = _Load

Also available in: Unified diff