For information on the APIs available to client applications, consult the RAMCloud doxygen docs, which are generated from the RAMCloud source code. There are two ways you can access the doxygen docs:
- Generate the latest version from your RAMCloud sources by typing
make docin the RAMCloud directory. Then open the file
docs/doxygen/index.htmlin a Web browser.
- Use the precompiled doxygen docs available from our Web site.
The doxygen documentation covers the entire source base, most of which is internal RAMCloud classes that are not useful to application writers. The primary API documentation for client applications is that for the class
RAMCloud::RamCloud (click on the
Classes tab at the top of the main page, then search down for the link to
RAMCloud::RamCloud). There is one method in this class for each RPC supported by RAMCloud. These methods invoke RPCs synchronously: for example, the
createTable method will not return until the operation has completed and a response has been received from the coordinator.
Invoking RPCs asynchronously
You can also invoke any of the RAMCloud RPCs asynchronously, and it is relatively straightforward to manage multiple simultaneous outstanding RPCs.
- There is a separate class corresponding to each RPC, whose name derives naturally from the name of the corresponding method in RAMCloud::RamCloud. For example, there is a class
RAMCloud::CreateTableRpccorresponding to the
- To invoke an RPC asynchronously, construct the corresponding Rpc object such as
RAMCloud::CreateTableRpc; the constructor arguments are the same as those for the synchronous method such as
createTable. Constructing the Rpc object initiates the RPC, but does not wait for it to complete.
- Objects such as
RAMCloud::CreateTableRpcsupport the following methods:
wait: waits synchronously for the RPC to complete
isReady: tests whether the RPC has completed, without blocking
cancel: aborts the RPC (deleting the object also has this effect)
- Note: RAMCloud RPCs are implemented using a polling approach. This means that asynchronous RPCs will not make progress or complete unless you occasionally invoke the RAMCloud polling mechanism. If you invoke a synchronous RPC, or if you call the
waitmethod on an asynchronous Rpc object, the RAMCloud poller will automatically be invoked. However, if your program only calls
isReadyto test for completion, then you must also occasionally invoke the RAMCloud poller. If you have created a RamCloud object named
rc, the following statement will invoke the poller:
- In addition, you must call the
isReadymethod on an Rpc object from time to time to ensure that the RPC "makes progress". Certain actions, such as retrying RPCs after server failures, are invoked only from within
isReadyhas returned true for an RPC, you should call
waitto complete the RPC. At this point,
waitis guaranteed not to block. There are two reasons for calling
wait. First, this is the only way to get any results returned by the RPC. Second, if the RPC completed with an error condition, this is the only way to find out about that error:
waitmay throw exceptions, but
isReadynever throws any exceptions.