HdrHistogram / HdrHistogram.NET

The .NET port of HdrHistogram
Other
179 stars 30 forks source link

Cannot read LongHistogram back from histogram log when recorded value count exceeds ~10000 #99

Open scharnyw opened 1 month ago

scharnyw commented 1 month ago

Run the following code to reproduce.

var histogram = new LongHistogram(TimeSpan.FromMinutes(40).Ticks, 4);
var maxValue = TimeSpan.FromMinutes(20).Ticks;

var count = 10000;
for (var i = 0; i < count; i++)
{
    histogram.RecordValue(Random.Shared.NextInt64(maxValue));
}

await using var ms = new MemoryStream();
HistogramLogWriter.Write(ms, DateTimeOffset.FromUnixTimeMilliseconds(histogram.StartTimeStamp).UtcDateTime, histogram);

ms.Position = 0;

var readBackHistograms = new HistogramLogReader(ms).ReadHistograms().ToList();

When count is 10000 or more, the last line consistently throws the following exception:

System.ArgumentException: 'The buffer does not contain the indicated payload amount'

But when count is set to 9000, it runs successfully without issue.

I'm using HdrHistogram v2.5.0 on .NET 8.

LeeCampbell commented 1 week ago

Thanks for raising. I have a unit test reproducing the error. Will target this issue in the PR fix