Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
0.1.0
-
None
-
None
Description
Hi,
I decided to use LongDoubleFloatDoubleVertex in a graph algorithm because it uses more compact and efficient mahout collections. However I run into an error when running the algorithm:
java.lang.ClassCastException: org.apache.giraph.graph.LongDoubleFloatDoubleVertex cannot be cast to org.apache.giraph.graph.Vertex
at org.apache.giraph.comm.BasicRPCCommunications.prepareSuperstep(BasicRPCCommunications.java:1016)
at org.apache.giraph.graph.BspServiceWorker.startSuperstep(BspServiceWorker.java:843)
at org.apache.giraph.graph.GraphMapper.map(GraphMapper.java:569)
at org.apache.giraph.graph.GraphMapper.run(GraphMapper.java:728)
... 7 more
Basically, the problem is that in BasicRPCCommunications.prepareSuperStep(), the LongDoubleFloatDoubleVertex are cast to Vertex in the following code fragment. But LongDoubleFloatDoubleVertex inherits from BasicVertex instead of Vertex.
if (vertex != null) {
((MutableVertex<I, V, E, M>) vertex).setVertexId(vertexIndex);
partition.putVertex((Vertex<I, V, E, M>) vertex);
} else if (originalVertex != null) {
partition.removeVertex(originalVertex.getVertexId());
}
I did a simple change: cast LongDoubleFloatDoubleVertex to BasicVertex. The problem went away, and the algorithm finished without any error. But I am not sure this change has any implication to other parts of the code. So, I hope to get some comments from the Giraph developers.
if (vertex != null) {
((MutableVertex<I, V, E, M>) vertex).setVertexId(vertexIndex);
partition.putVertex((BasicVertex<I, V, E, M>) vertex);
} else if (originalVertex != null) {
partition.removeVertex(originalVertex.getVertexId());
}