Creating a sever using a Glance image which has a long (~256 char) unicode property value fails with database truncation.
The root cause is the same as bug:
https://bugs.launchpad.net/nova/+bug/1389102
and fix:
https://review.openstack.org/#/c/134597/
What's happening is the nova.utils.get_system_metadata_from_image method is truncating the Glance property value to 255 characters and this is then later used downstream in the create to be written to system metadata. Databases like PostgreSQL will throw an error because when the non-English locale string is encoded to be written to the DB it is greater than the 256 limit of the system metadata database table.
A partial stack is:
...
File "/usr/lib/python2.7/site-packages/nova/api/openstack/compute/servers.py", line 610, in create
check_server_group_quota=check_server_group_quota)
File "/usr/lib/python2.7/site-packages/nova/hooks.py", line 149, in inner
rv = f(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/nova/compute/api.py", line 1485, in create
check_server_group_quota=check_server_group_quota)
File "/usr/lib/python2.7/site-packages/nova/compute/api.py", line 1127, in _create_instance
instance_group, check_server_group_quota)
File "/usr/lib/python2.7/site-packages/nova/compute/api.py", line 965, in _provision_instances
quotas.rollback()
File "/usr/lib/python2.7/site-packages/oslo_utils/excutils.py", line 82, in __exit__
six.reraise(self.type_, self.value, self.tb)
File "/usr/lib/python2.7/site-packages/nova/compute/api.py", line 928, in _provision_instances
num_instances, i, shutdown_terminate)
File "/usr/lib/python2.7/site-packages/nova/compute/api.py", line 1385, in create_db_entry_for_new_instance
instance.create()
File "/usr/lib/python2.7/site-packages/nova/objects/base.py", line 206, in wrapper
return fn(self, ctxt, *args, **kwargs)
File "/usr/lib/python2.7/site-packages/nova/objects/instance.py", line 613, in create
db_inst = db.instance_create(context, updates)
File "/usr/lib/python2.7/site-packages/nova/db/api.py", line 636, in instance_create
return IMPL.instance_create(context, values)
File "/usr/lib/python2.7/site-packages/nova/db/sqlalchemy/api.py", line 145, in wrapper
return f(*args, **kwargs)
File "/usr/lib/python2.7/site-packages/nova/db/sqlalchemy/api.py", line 1595, in instance_create
....
The fix for this defect will likely be taking the fix from https://review.openstack.org/#/c/134597/ and making a utility method in nova.utils to do safe truncation. This utility method could then be called from nova.utils.get_system_metadata_from_image method and its existing location in nova/compute/utils.py
Found in Nova Kilo.
Samuel, will you be filing a review?