[Bug 1799406] Re: [SRU] Alarms fail on Rocky
Ben Nemec
openstack at nemebean.com
Wed Nov 28 18:31:30 UTC 2018
I don't think this is invalid on oslo.i18n. It sounds like there's a
problem with the Message class that caused this. The Aodh fix is only a
workaround for that.
There have been discussions around removing lazy translation completely,
in which case this would go away. If that doesn't happen, we should look
into how to fix this.
** Changed in: oslo.i18n
Status: Invalid => Confirmed
** Changed in: oslo.i18n
Importance: Undecided => Medium
--
You received this bug notification because you are a member of Ubuntu
OpenStack, which is subscribed to Ubuntu Cloud Archive.
https://bugs.launchpad.net/bugs/1799406
Title:
[SRU] Alarms fail on Rocky
Status in Aodh:
Fix Released
Status in OpenStack AODH Charm:
Invalid
Status in Ubuntu Cloud Archive:
Fix Released
Status in Ubuntu Cloud Archive rocky series:
Fix Released
Status in oslo.i18n:
Confirmed
Status in aodh package in Ubuntu:
Fix Released
Status in aodh source package in Cosmic:
Fix Released
Bug description:
[Impact]
In a rocky deployment aodh is failing to raise alarms due to what seems like a locale issue. If I purge packages:
apt-get purge aodh-api aodh-evaluator aodh-expirer aodh-notifier aodh-
listener python3-aodh libapache2-mod-wsgi-py3 python-apt python-aodh
python-memcache
Then disable the AodhCharmRocky class and rerun install so that it
pulls in the py2 packages then things start working.
The error from /var/log/aodh/aodh-listener.log:
http://paste.ubuntu.com/p/FCft2GGnfN/
ERROR oslo_db.sqlalchemy.exc_filters [-] DB exception wrapped.: AttributeError: 'list' object has no attribute 'lower'
ERROR oslo_db.sqlalchemy.exc_filters Traceback (most recent call last):
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
ERROR oslo_db.sqlalchemy.exc_filters context)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 508, in do_execute
ERROR oslo_db.sqlalchemy.exc_filters cursor.execute(statement, parameters)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 163, in execute
ERROR oslo_db.sqlalchemy.exc_filters query = self.mogrify(query, args)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 142, in mogrify
ERROR oslo_db.sqlalchemy.exc_filters query = query % self._escape_args(args, conn)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in _escape_args
ERROR oslo_db.sqlalchemy.exc_filters return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in <genexpr>
ERROR oslo_db.sqlalchemy.exc_filters return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 819, in literal
ERROR oslo_db.sqlalchemy.exc_filters return self.escape(obj, self.encoders)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 806, in escape
ERROR oslo_db.sqlalchemy.exc_filters return "'" + self.escape_string(obj) + "'"
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 825, in escape_string
ERROR oslo_db.sqlalchemy.exc_filters return converters.escape_string(s)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/pymysql/converters.py", line 73, in _escape_unicode
ERROR oslo_db.sqlalchemy.exc_filters return value.translate(_escape_table)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 85, in translate
ERROR oslo_db.sqlalchemy.exc_filters self.has_plural_form)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 117, in _translate_msgid
ERROR oslo_db.sqlalchemy.exc_filters fallback=True)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3.6/gettext.py", line 525, in translation
ERROR oslo_db.sqlalchemy.exc_filters mofiles = find(domain, localedir, languages, all=True)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3.6/gettext.py", line 482, in find
ERROR oslo_db.sqlalchemy.exc_filters for nelang in _expand_lang(lang):
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3.6/gettext.py", line 206, in _expand_lang
ERROR oslo_db.sqlalchemy.exc_filters loc = locale.normalize(loc)
ERROR oslo_db.sqlalchemy.exc_filters File "/usr/lib/python3.6/locale.py", line 397, in normalize
ERROR oslo_db.sqlalchemy.exc_filters code = localename.lower()
ERROR oslo_db.sqlalchemy.exc_filters AttributeError: 'list' object has no attribute 'lower'
ERROR oslo_db.sqlalchemy.exc_filters
ERROR aodh.evaluator [-] alarm state update failed: oslo_db.exception.DBError: 'list' object has no attribute 'lower'
ERROR aodh.evaluator Traceback (most recent call last):
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
ERROR aodh.evaluator context)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 508, in do_execute
ERROR aodh.evaluator cursor.execute(statement, parameters)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 163, in execute
ERROR aodh.evaluator query = self.mogrify(query, args)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 142, in mogrify
ERROR aodh.evaluator query = query % self._escape_args(args, conn)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in _escape_args
ERROR aodh.evaluator return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in <genexpr>
ERROR aodh.evaluator return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 819, in literal
ERROR aodh.evaluator return self.escape(obj, self.encoders)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 806, in escape
ERROR aodh.evaluator return "'" + self.escape_string(obj) + "'"
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 825, in escape_string
ERROR aodh.evaluator return converters.escape_string(s)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/converters.py", line 73, in _escape_unicode
ERROR aodh.evaluator return value.translate(_escape_table)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 85, in translate
ERROR aodh.evaluator self.has_plural_form)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 117, in _translate_msgid
ERROR aodh.evaluator fallback=True)
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 525, in translation
ERROR aodh.evaluator mofiles = find(domain, localedir, languages, all=True)
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 482, in find
ERROR aodh.evaluator for nelang in _expand_lang(lang):
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 206, in _expand_lang
ERROR aodh.evaluator loc = locale.normalize(loc)
ERROR aodh.evaluator File "/usr/lib/python3.6/locale.py", line 397, in normalize
ERROR aodh.evaluator code = localename.lower()
ERROR aodh.evaluator AttributeError: 'list' object has no attribute 'lower'
ERROR aodh.evaluator
ERROR aodh.evaluator The above exception was the direct cause of the following exception:
ERROR aodh.evaluator
ERROR aodh.evaluator Traceback (most recent call last):
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/aodh/evaluator/__init__.py", line 128, in _refresh
ERROR aodh.evaluator self._storage_conn.update_alarm(alarm)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/aodh/storage/impl_sqlalchemy.py", line 273, in update_alarm
ERROR aodh.evaluator alarm.as_dict())
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 3426, in update
ERROR aodh.evaluator update_op.exec_()
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/orm/persistence.py", line 1326, in exec_
ERROR aodh.evaluator self._do_exec()
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/orm/persistence.py", line 1493, in _do_exec
ERROR aodh.evaluator self._execute_stmt(update_stmt)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/orm/persistence.py", line 1333, in _execute_stmt
ERROR aodh.evaluator mapper=self.mapper)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/orm/session.py", line 1176, in execute
ERROR aodh.evaluator bind, close_with_result=True).execute(clause, params or {})
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 948, in execute
ERROR aodh.evaluator return meth(self, multiparams, params)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/sql/elements.py", line 269, in _execute_on_connection
ERROR aodh.evaluator return connection._execute_clauseelement(self, multiparams, params)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1060, in _execute_clauseelement
ERROR aodh.evaluator compiled_sql, distilled_params
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1200, in _execute_context
ERROR aodh.evaluator context)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1409, in _handle_dbapi_exception
ERROR aodh.evaluator util.raise_from_cause(newraise, exc_info)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 203, in raise_from_cause
ERROR aodh.evaluator reraise(type(exception), exception, tb=exc_tb, cause=cause)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/util/compat.py", line 186, in reraise
ERROR aodh.evaluator raise value.with_traceback(tb)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/base.py", line 1193, in _execute_context
ERROR aodh.evaluator context)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/sqlalchemy/engine/default.py", line 508, in do_execute
ERROR aodh.evaluator cursor.execute(statement, parameters)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 163, in execute
ERROR aodh.evaluator query = self.mogrify(query, args)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 142, in mogrify
ERROR aodh.evaluator query = query % self._escape_args(args, conn)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in _escape_args
ERROR aodh.evaluator return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/cursors.py", line 122, in <genexpr>
ERROR aodh.evaluator return dict((key, conn.literal(val)) for (key, val) in args.items())
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 819, in literal
ERROR aodh.evaluator return self.escape(obj, self.encoders)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 806, in escape
ERROR aodh.evaluator return "'" + self.escape_string(obj) + "'"
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/connections.py", line 825, in escape_string
ERROR aodh.evaluator return converters.escape_string(s)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/pymysql/converters.py", line 73, in _escape_unicode
ERROR aodh.evaluator return value.translate(_escape_table)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 85, in translate
ERROR aodh.evaluator self.has_plural_form)
ERROR aodh.evaluator File "/usr/lib/python3/dist-packages/oslo_i18n/_message.py", line 117, in _translate_msgid
ERROR aodh.evaluator fallback=True)
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 525, in translation
ERROR aodh.evaluator mofiles = find(domain, localedir, languages, all=True)
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 482, in find
ERROR aodh.evaluator for nelang in _expand_lang(lang):
ERROR aodh.evaluator File "/usr/lib/python3.6/gettext.py", line 206, in _expand_lang
ERROR aodh.evaluator loc = locale.normalize(loc)
ERROR aodh.evaluator File "/usr/lib/python3.6/locale.py", line 397, in normalize
ERROR aodh.evaluator code = localename.lower()
ERROR aodh.evaluator oslo_db.exception.DBError: 'list' object has no attribute 'lower'
ERROR aodh.evaluator
[Test Case]
1) Deploy openstack with aodh (we're deploying with the development versions of the openstack charms which deploy py3 payloads)
2) Once deployed/configured create an alarm with:
openstack alarm create \
--type event \
--name instance_off \
--description 'Instance powered OFF' \
--event-type "compute.instance.power_off.*" \
--enable True \
--query "traits.instance_id=string::INSTANCE_ID" \
--alarm-action 'log://' \
--ok-action 'log://' \
--insufficient-data-action 'log://'
3) create a server instance
4) power server instance off to trigger alarm
5) ensure alarm is successfully raised with no traceback (see /var/log/aodh/aodh-listener.log)
[Regression Potential]
The fix is a minimal fix that should result in low regression potential.
To manage notifications about this bug go to:
https://bugs.launchpad.net/aodh/+bug/1799406/+subscriptions
More information about the Ubuntu-openstack-bugs
mailing list