diff options
author | Zuul <zuul@review.opendev.org> | 2021-04-16 12:12:52 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2021-04-16 12:12:52 +0000 |
commit | 61f825a25d5e79196f558641191c0be35a0ef115 (patch) | |
tree | fe65a90b1a7c352761c9f8bbaeb2930d9440556d /oslo_policy | |
parent | 0733d0e16ff56a656ec02100820f473272f00110 (diff) | |
parent | 9919f1317c037163d0f31232991cca261881b66b (diff) | |
download | oslo-policy-61f825a25d5e79196f558641191c0be35a0ef115.tar.gz |
Merge "Correctly handle IO errors at policy file load"
Diffstat (limited to 'oslo_policy')
-rw-r--r-- | oslo_policy/_cache_handler.py | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/oslo_policy/_cache_handler.py b/oslo_policy/_cache_handler.py index ab90684..fd34915 100644 --- a/oslo_policy/_cache_handler.py +++ b/oslo_policy/_cache_handler.py @@ -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']) |