When we serialize a histogram to a byte array, the intermediate
ByteBuffer that we pass may be too small which may result in silent
truncation of the encoded histogram.
This will manifest on the driver side as a decoding failure. However,
because the driver side retries this request on failure, it will attempt
to get the histogram from the remote worker a second time but
histogram reads are "destructive" - they clear the source histogram.
So the second read will succeed because the histogram is much
smaller (it is almost empty), but it leads to only sampling about 1
second worth of data at the end of the test.
This change detects this case and grows the buffer by a
factor of 2 until it fits.
When we serialize a histogram to a byte array, the intermediate ByteBuffer that we pass may be too small which may result in silent truncation of the encoded histogram.
This will manifest on the driver side as a decoding failure. However, because the driver side retries this request on failure, it will attempt to get the histogram from the remote worker a second time but histogram reads are "destructive" - they clear the source histogram.
So the second read will succeed because the histogram is much smaller (it is almost empty), but it leads to only sampling about 1 second worth of data at the end of the test.
This change detects this case and grows the buffer by a factor of 2 until it fits.
Fixes https://github.com/openmessaging/benchmark/issues/369.