I'm seen this work demoed.  It's awesome, especially for applications that are not very predictable.


On 6/4/14, 11:00 AM, Semih Salihoglu wrote:

Hi Giraph Users,

I wanted to introduce to you Graft, a project that some of us at Stanford have built over the last quarter. If you are a Giraph user, who ran into an annoying bug in which the code was throwing an exception or resulting in incorrect looking messages or vertex values (e.g. NaNs or NullPointerExceptions) and you had put in println statements into your compute() functions, and then inspect logs of Hadoop workers for debugging purposes, you should read on. You might find Graft very useful.

In a nutshell, Graft is based on the idea of capturing the contexts under which a bug becomes noticeable (an exception is thrown or an incorrect message is sent, or a vertex is assigned an incorrect value) programmatically. The captured contexts can then be visualized through a GUI. The contexts that a user thinks could be helpful for catching the bug can then be reproduced in a compilable program and the user can then use his/her favorite IDE's debugger to do step-by-step debugging into the context. For example, when a vertex v throws an exception, the user can reproduce the context under which v throws the exception and then use (say) Eclipse to do step-by-step debugging to see exactly what lines were executed that resulted in the exception being thrown.

On the testing side, Graft makes it easier to generate unit and end-to-end tests by letting users curate small graphs through its GUI's testing mode, and then generates code snippets which can be copied and pasted into a JUnit test. 

The project is still under development but interested users can start using it. We have a wiki with documentation and instructions on how to install and use Graft: https://github.com/semihsalihoglu/graft/wiki. Since the project is under development, we'd highly appreciate users to start using it and giving us direction on how to make it more useful. Our emails are on the documentation page. We also encourage interested developers to contribute to it if there are requested features that we don't get to very quickly. 

Just a small note: Graft works for the Giraph at trunk: https://github.com/apache/giraph/tree/trunk. We do not support earlier version. In particular your programs need to be written by extending Computation and optionally the Master class, instead of the older Vertex class.