An important debugging concept |
Early on when using Clover, I spent an embarrassing amount of time trying to debug a graph. In fact, had I read the Console output properly I would have wasted no time at all. However, I didn't and I did.
Take a quick look at the graph below.
Notice that :
• | while the "Load Customer Name" and "Thrash" components have a '?' symbol |
• | the Aggregate has a red '!' error symbol |
What I did was to spend an awfully long time trying to figure out what was wrong with the "Load Customer Name" component. It had been fine so what had gone wrong with it suddenly? I ignored the Aggregate error on the basis that the Load Customer Name came before it in the graph.
WRONG!
In fact, all graph components in the same phase (see this link for an explanation) run in parallel. Components are multi-threaded. This means that data is arriving at the Aggregate component before it has necessarily been read in or processed by the earlier components. As soon as the Aggregate component throws its error (and this is where the real error was happening) the "Marshalling" component tells all other components "Stop what you are doing, there has been a disaster". So, the Load Customer Name had not finished processing which is why it gets stamped with the yellow '?'.
The earlier components upstream HAD finished processing and you can see that the debug record counts are set accordingly.
Moral of the story
Deal with the red '!'s and ignore the yellow '?'s.