Comment 3 for bug 1678018

Revision history for this message
Alistair Coles (alistair-coles) wrote :

The EC sysmeta metadata items, whose keys are unicode, are those derived from footers sent at end of EC frags[1]. The footers are serialized JSON and when the footer string is loaded in object server PUT path with json.loads() all key/value pairs are returned unicode (thats what JSON generates when parsing). The sysmeta from footers is then added to the object metadata[2], hence some unicode keys in metadata

Presumably, when serializing the metadata to send via ssync, once unicode is encountered by a join() then any ascii will be decoded to unicode assuming default ascii encoding and any non-ascii characters will then trigger an exception.

[1] https://github.com/openstack/swift/blob/11678e2f751fb77f10db2357ed886c846e3f87b3/swift/proxy/controllers/obj.py#L1842-L1868
[2] https://github.com/openstack/swift/blob/11678e2f751fb77f10db2357ed886c846e3f87b3/swift/obj/server.py#L796-L808