diff options
-rw-r--r-- | keystone/token/token_formatters.py | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/keystone/token/token_formatters.py b/keystone/token/token_formatters.py index f25a7a591..c251ac6d5 100644 --- a/keystone/token/token_formatters.py +++ b/keystone/token/token_formatters.py @@ -170,7 +170,15 @@ class TokenFormatter(object): """ serialized_payload = self.unpack(token) - versioned_payload = msgpack.unpackb(serialized_payload) + # TODO(melwitt): msgpack changed their data format in version 1.0, so + # in order to support a rolling upgrade, we must pass raw=True to + # to support the old format. The try-except may be removed in the once + # the N-1 release no longer supports msgpack < 1.0. + try: + versioned_payload = msgpack.unpackb(serialized_payload) + except UnicodeDecodeError: + versioned_payload = msgpack.unpackb(serialized_payload, raw=True) + version, payload = versioned_payload[0], versioned_payload[1:] for payload_class in _PAYLOAD_CLASSES: |