What? Why? How?

What: A simple introduction to understanding how a "read" works in RAMCloud based on my current understanding.

Why: For me to refer to later on, and hopefully to serve as a good starting point to other new comers to RAMCloud system.

How: Information deduced from reading code, and asking lot of silly questions to Diego, Ryan; and a few to Stephen, Nandu and Christian.

Now that we have that out of the way..

Follow the code and read along..

TODO: Chritian's diagram here (fig 3 from his report). Edit to make corrections.

RamCloud.cc -> read()

MasterClient.cc -> read()

MasterServer.cc

NOTE about code flow:
When xClient - sendRecv,   ?where x is Coordinator or Master
xServer - handleRpc<>() -> dispatch() -> callHandler<>() -> ..

ObjectFinder.cc -> lookup()

ObjectFinder.cc -> lookup()
check client's tabletMap (which is a cache of coordinator's tablet map)
if that tablet is recovering or if the obj was not found in any tablet:
refresher(tabletMap) - hardwired to CoordinatorClient::getTabletMap - get a new copy of tabletMap
finally return the SessionRef

Some general information:

On the other hand:

BUFFER contains: