I'm pretty sure the only way for this to happen is for someone to muck with the database directly instead of going through the objects. So even if the column was not nullable there can still be data in there that would cause a failure.
The implementation of JsonBlob handles an empty extra field properly. It effectively boils down to: >>> from keystone.openstack.common import jsonutils >>> jsonutils.dumps(None) 'null' ** Changed in: keystone Status: Triaged => Invalid -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to Keystone. https://bugs.launchpad.net/bugs/1204964 Title: 'extra' columns are nullable Status in OpenStack Identity (Keystone): Invalid Bug description: (keystone.common.wsgi): 2013-07-25 11:13:52,034 ERROR wsgi __call__ expected string or buffer Traceback (most recent call last): File "/opt/stack/keystone/keystone/common/wsgi.py", line 240, in __call__ result = method(context, **params) File "/opt/stack/keystone/keystone/token/controllers.py", line 80, in authenticate context, auth) File "/opt/stack/keystone/keystone/token/controllers.py", line 259, in _authenticate_local user_id, tenant_id) File "/opt/stack/keystone/keystone/token/controllers.py", line 373, in _get_project_roles_and_ref user_id, tenant_id) File "/opt/stack/keystone/keystone/identity/core.py", line 127, in get_roles_for_user_and_project user_id, tenant_id) File "/opt/stack/keystone/keystone/assignment/core.py", line 127, in get_roles_for_user_and_project group_role_list = _get_group_project_roles(user_id, project_ref) File "/opt/stack/keystone/keystone/assignment/core.py", line 77, in _get_group_project_roles (user_id=user_id)) File "/opt/stack/keystone/keystone/common/manager.py", line 44, in _wrapper return f(*args, **kw) File "/opt/stack/keystone/keystone/identity/backends/sql.py", line 202, in list_groups_for_user return [self.get_group(x.group_id) for x in membership_refs] File "/opt/stack/keystone/keystone/identity/backends/sql.py", line 250, in get_group return self._get_group(session, group_id).to_dict() File "/opt/stack/keystone/keystone/identity/backends/sql.py", line 243, in _get_group ref = session.query(Group).get(group_id) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 775, in get return self._load_on_ident(key) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2512, in _load_on_ident return q.one() File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2184, in one ret = list(self) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/query.py", line 2348, in instances rows = [process[0](row, None) for row in fetch] File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 2120, in _instance populate_state(state, dict_, row, isnew, only_load_props) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/mapper.py", line 1974, in populate_state populator(state, dict_, row) File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/orm/strategies.py", line 150, in fetch_col dict_[key] = row[col] File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/types.py", line 662, in process return process_value(value, dialect) File "/opt/stack/keystone/keystone/common/sql/core.py", line 146, in process_result_value return jsonutils.loads(value) File "/opt/stack/keystone/keystone/openstack/common/jsonutils.py", line 127, in loads return json.loads(s) File "/usr/lib/python2.7/json/__init__.py", line 326, in loads return _default_decoder.decode(s) File "/usr/lib/python2.7/json/decoder.py", line 366, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) TypeError: expected string or buffer (access): 2013-07-25 11:13:52,036 INFO core __call__ 192.168.122.94 - - [25/Jul/2013:15:13:52 +0000] "POST http://192.168.122.94:5000/v2.0/tokens HTTP/1.0" 400 88 (eventlet.wsgi.server): 2013-07-25 11:13:52,040 DEBUG wsgi write 192.168.122.94 - - [25/Jul/2013 11:13:52] "POST /v2.0/tokens HTTP/1.1" 400 225 0.038971 To manage notifications about this bug go to: https://bugs.launchpad.net/keystone/+bug/1204964/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : yahoo-eng-team@lists.launchpad.net Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp