I think you need to have your message value class as TextArrayListMessage instead of ArrayListWritable<Text>. That might require you to move TextArrayListMessage outside of ArrayListTextBug.


On Wed, Oct 16, 2013 at 10:01 AM, Simon McGloin <simonmcgloin@gmail.com> wrote:
Hey Guys,
I've only been using Giraph a few days so am very new to it. I'm currently using Giraph 1.0.0. I'm getting the error below when I try to send an ArrayListWritable<Text> message. The error happens between supersteps. If you run the sample code I've included "Superstep 1" never gets printed as the job fails after Superstep 0. Is this a bug or am I doing something wrong. In my full code I need to be able to send a list of Text based vertex ids between supersteps. Should I not be using org.apache.hadoop.io.Text and implement my own writable object?
Any help is appreciated.  
Regards,
Simon

Caused by: java.util.concurrent.ExecutionException: java.lang.IllegalArgumentException: createMessageValue: Failed to instantiate
	at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:232)
	at java.util.concurrent.FutureTask.get(FutureTask.java:91)
	at org.apache.giraph.utils.ProgressableUtils$FutureWaitable.waitFor(ProgressableUtils.java:271)
	at org.apache.giraph.utils.ProgressableUtils.waitFor(ProgressableUtils.java:143)
	... 13 more
Caused by: java.lang.IllegalArgumentException: createMessageValue: Failed to instantiate
	at org.apache.giraph.conf.ImmutableClassesGiraphConfiguration.createMessageValue(ImmutableClassesGiraphConfiguration.java:581)
	at org.apache.giraph.utils.ByteArrayVertexIdMessages.createData(ByteArrayVertexIdMessages.java:66)
	at org.apache.giraph.utils.ByteArrayVertexIdMessages.createData(ByteArrayVertexIdMessages.java:34)
	at org.apache.giraph.utils.ByteArrayVertexIdData$VertexIdDataIterator.next(ByteArrayVertexIdData.java:205)
	at org.apache.giraph.comm.messages.ByteArrayMessagesPerVertexStore.addPartitionMessages(ByteArrayMessagesPerVertexStore.java:116)
	at org.apache.giraph.comm.requests.SendWorkerMessagesRequest.doRequest(SendWorkerMessagesRequest.java:72)
	at org.apache.giraph.comm.netty.NettyWorkerClientRequestProcessor.doRequest(NettyWorkerClientRequestProcessor.java:470)
	at org.apache.giraph.comm.netty.NettyWorkerClientRequestProcessor.flush(NettyWorkerClientRequestProcessor.java:419)
	at org.apache.giraph.graph.ComputeCallable.call(ComputeCallable.java:193)
	at org.apache.giraph.graph.ComputeCallable.call(ComputeCallable.java:70)
	at org.apache.giraph.utils.LogStacktraceCallable.call(LogStacktraceCallable.java:51)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
	at java.util.concurrent.FutureTask.run(FutureTask.java:138)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
	at java.lang.Thread.run(Thread.java:662)



package com.adaptivemobile.tarantula.batchlayer.giraph.run;

import java.io.IOException;

import org.apache.giraph.graph.Vertex;
import org.apache.giraph.utils.ArrayListWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;

public class ArrayListTextBug extends Vertex<Text, NullWritable, NullWritable, ArrayListWritable<Text>>{

	@Override
	public void compute(Iterable<ArrayListWritable<Text>> messages) throws IOException {
		
		if (getSuperstep() == 0) {
			System.out.println("\nSUPERSTEP 0 - " + getId() + "\n------------------------------");
			TextArrayListMessage initialMessage = new TextArrayListMessage();
			initialMessage.add(getId());
			this.sendMessageToAllEdges(initialMessage);	    
		    System.out.println("Vertex " + getId() + " sends TextArrayListMessage to " + getNumEdges() + " edges");
	    }
		if (getSuperstep() == 1) {
			System.out.println("\nSUPERSTEP 1 - " + getId() + "\n------------------------------");
		}
	}
		
	public class TextArrayListMessage extends ArrayListWritable<Text>{
			
		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		public TextArrayListMessage() {
			super();
		}

		@Override
		public void setClass() {
			this.setClass(Text.class);
		}

	}

}