Merge "Correctly handle IO errors at policy file load"
This commit is contained in:
commit
61f825a25d
|
@ -13,9 +13,12 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import errno
|
||||
import logging
|
||||
import os
|
||||
|
||||
from oslo_config import cfg
|
||||
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -33,13 +36,33 @@ def read_cached_file(cache, filename, force_reload=False):
|
|||
delete_cached_file(cache, filename)
|
||||
|
||||
reloaded = False
|
||||
mtime = os.path.getmtime(filename)
|
||||
try:
|
||||
mtime = os.path.getmtime(filename)
|
||||
except OSError as err:
|
||||
msg = err.strerror
|
||||
LOG.error('Config file not found %(filename)s: %(msg)s',
|
||||
{'filename': filename, 'msg': msg})
|
||||
return True, {}
|
||||
|
||||
cache_info = cache.setdefault(filename, {})
|
||||
|
||||
if not cache_info or mtime > cache_info.get('mtime', 0):
|
||||
LOG.debug("Reloading cached file %s", filename)
|
||||
with open(filename) as fap:
|
||||
cache_info['data'] = fap.read()
|
||||
try:
|
||||
with open(filename) as fap:
|
||||
cache_info['data'] = fap.read()
|
||||
except IOError as err:
|
||||
msg = err.strerror
|
||||
err_code = err.errno
|
||||
LOG.error('IO error loading %(filename)s: %(msg)s',
|
||||
{'filename': filename, 'msg': msg})
|
||||
if err_code == errno.EACCES:
|
||||
raise cfg.ConfigFilesPermissionDeniedError((filename,))
|
||||
except OSError as err:
|
||||
msg = err.strerror
|
||||
LOG.error('Config file not found %(filename)s: %(msg)s',
|
||||
{'filename': filename, 'msg': msg})
|
||||
raise cfg.ConfigFilesNotFoundError((filename,))
|
||||
cache_info['mtime'] = mtime
|
||||
reloaded = True
|
||||
return (reloaded, cache_info['data'])
|
||||
|
|
Loading…
Reference in New Issue