The described log buffer implementation does not seem wait-free to me. If one of the writers fails all other subsequent writes will fail, too. Subsequent writers can still advance the tail pointer and copy their messages into the buffer but the reader will never see their messages because the failed writer did not update the length field in its header.
So physically the operations for the subsequent writers completed after updating the length fields in their headers but logically they are not completed until they become visible to the reader and that requires updating the length field in the header of the failed writer. The situation seems even worse when the writer responsible to rotate the logs fails.
I did not look into the source code, they are probably dealing with failed writers, but the presentation alone does not provide any hints to me how they do it.
Can you expand on how you see the writer can "fail"? Also please relate this to other algorithms you see as wait-free but don't have your failure issue. The code is very simple and does not have external dependencies. It is a three step process of advance tail, copy in message, apply header. All within the implementation, all threads make progress and completes in a finite number of steps, and thus wait-free.
danbruc|11 years ago
So physically the operations for the subsequent writers completed after updating the length fields in their headers but logically they are not completed until they become visible to the reader and that requires updating the length field in the header of the failed writer. The situation seems even worse when the writer responsible to rotate the logs fails.
I did not look into the source code, they are probably dealing with failed writers, but the presentation alone does not provide any hints to me how they do it.
mjpt777|11 years ago
https://github.com/real-logic/Aeron/blob/master/aeron-client...
anton_gogolev|11 years ago
http://www.hermanmiller.com/products/seating/performance-wor...