summaryrefslogtreecommitdiff
path: root/oslo_policy
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2021-04-16 12:12:52 +0000
committerGerrit Code Review <review@openstack.org>2021-04-16 12:12:52 +0000
commit61f825a25d5e79196f558641191c0be35a0ef115 (patch)
treefe65a90b1a7c352761c9f8bbaeb2930d9440556d /oslo_policy
parent0733d0e16ff56a656ec02100820f473272f00110 (diff)
parent9919f1317c037163d0f31232991cca261881b66b (diff)
downloadoslo-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.py29
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'])