Merge "Correctly handle IO errors at policy file load"

This commit is contained in:
Zuul 2021-04-16 12:12:52 +00:00 committed by Gerrit Code Review
commit 61f825a25d
1 changed files with 26 additions and 3 deletions

View File

@ -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'])