-
Notifications
You must be signed in to change notification settings - Fork 35
Description
I am generating histograms in Rust and am deserializing in Python using the HDR Histogram libraries for Rust and Python. The Rust code produces a byte array with the encoded histogram which ends up as a bytes
instance in Python. (The project is a Python program that integrates with a Rust library via the cpython
crate.)
It appears that the Python library is only able to decode the encoded histogram if Rust encodes using hdrhistogram::serialization::V2DeflateSerializer
and further encodes it using base64 (via Python's base64.b64encode
).
Without the base64 encoding, decoding with histogram = HdrHistogram.decode(encoded_histogram, b64_wrap=False)
results in this error:
Traceback (most recent call last):
...
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/histogram.py", line 580, in decode
hdr_payload = HdrHistogramEncoder.decode(encoded_histogram, b64_wrap)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 356, in decode
hdr_payload = HdrPayload(8, compressed_payload=cpayload)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 146, in __init__
self._decompress(compressed_payload)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 197, in _decompress
self._data = zlib.decompress(compressed_payload)
zlib.error: Error -3 while decompressing data: incorrect header check
Using uncompressed encoding (via hdrhistogram::serialization::V2Serializer
in Rust) and base64 encoding in Python results in this error:
Traceback (most recent call last):
...
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/histogram.py", line 580, in decode
hdr_payload = HdrHistogramEncoder.decode(encoded_histogram, b64_wrap)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 346, in decode
raise HdrCookieException()
hdrh.codec.HdrCookieException
And using uncompressed encoding without base64 results in:
Traceback (most recent call last):
...
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/histogram.py", line 580, in decode
hdr_payload = HdrHistogramEncoder.decode(encoded_histogram, b64_wrap)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 356, in decode
hdr_payload = HdrPayload(8, compressed_payload=cpayload)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 146, in __init__
self._decompress(compressed_payload)
File "XXX/hdrhistogram-0.8.0-cp38-cp38-macosx_10_15_x86_64.whl-install/hdrh/codec.py", line 197, in _decompress
self._data = zlib.decompress(compressed_payload)
zlib.error: Error -3 while decompressing data: incorrect header check