Skip to content
This repository has been archived by the owner on Sep 21, 2024. It is now read-only.

Bug in ElasticCircularBuffer #113

Open
zllai opened this issue Dec 5, 2019 · 1 comment
Open

Bug in ElasticCircularBuffer #113

zllai opened this issue Dec 5, 2019 · 1 comment
Labels
bug Something isn't working

Comments

@zllai
Copy link

zllai commented Dec 5, 2019

Hi Ambrosia team,

I am recently studying the Ambrosia source code. I think I may find a bug in ElasticCircularBuffer implemented in Ambrosia/Ambrosia/CircularBuffers.cs, though it seems not causing any trouble for now.

IEnumerable<T> Iterate()
{
    foreach (CircularBuffer<T> buffer in buffers)
    {
        foreach (T item in buffer.Iterate())
        {
             yield return item;
        }
    }
}

The first foreach iterates from buffers.First to buffers.Last. But this is actually not the desired behavior. Because when enqueued, the ElasticCircularBuffer reuses buffers.First if buffers.First contains an empty CircularBuffer, making buffers.First not actually the head. I also didn't see buffers.First being updated anywhere.

I guess it didn't cause any trouble because in testcases, CircularBuffer is big enough to hold all pending messages, so that ElasticCircularBuffer always contains only one CircularBuffer.

@badrishc
Copy link
Contributor

Hi @zllai - thanks for reporting the issue. I wonder, can you provide a simple repro (program) that uses ElasticCircularBuffer stand alone, and shows the issue. That will help us diagnose and fix the data structure. If you have a fix, a PR would be very welcome as well :).

@darrenge darrenge added the bug Something isn't working label Mar 19, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants