Correctly handle IO errors at policy file load
For now, policy file unaccessible due to access permission leads to silent failure without any notifictaion. Side effects of it are also affected by policy caching and might be quite confusing, like periodic disappearing of Horizon panels. Proposed patch added handling of such errors. Closes-bug: #1836390 Change-Id: I0d67b6e7c2dcaa63d6bb807f013e5e7334efc715
This commit is contained in:
parent
4065a08ea4
commit
9919f1317c
@ -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…
x
Reference in New Issue
Block a user