Author: hyunsik
Date: Wed Jul 11 00:38:49 2012
New Revision: 1359965

URL: http://svn.apache.org/viewvc?rev=1359965&view=rev
Log:
GIRAPH-242: HashMapVertex stores neighbor ids twice. Contributed by Alessandro 
Presta.


Modified:
    giraph/trunk/CHANGELOG
    giraph/trunk/src/main/java/org/apache/giraph/graph/HashMapVertex.java

Modified: giraph/trunk/CHANGELOG
URL: 
http://svn.apache.org/viewvc/giraph/trunk/CHANGELOG?rev=1359965&r1=1359964&r2=1359965&view=diff
==============================================================================
--- giraph/trunk/CHANGELOG (original)
+++ giraph/trunk/CHANGELOG Wed Jul 11 00:38:49 2012
@@ -2,6 +2,9 @@ Giraph Change Log
 
 Release 0.2.0 - unreleased
 
+  GIRAPH-242: HashMapVertex stores neighbor ids twice.
+  (Alessandro Presta via hyunsik)
+
   GIRAPH-241: Small typos in var names in NettyWorkerClient.java 
   (Eli Reisman via hyunsik)
 

Modified: giraph/trunk/src/main/java/org/apache/giraph/graph/HashMapVertex.java
URL: 
http://svn.apache.org/viewvc/giraph/trunk/src/main/java/org/apache/giraph/graph/HashMapVertex.java?rev=1359965&r1=1359964&r2=1359965&view=diff
==============================================================================
--- giraph/trunk/src/main/java/org/apache/giraph/graph/HashMapVertex.java 
(original)
+++ giraph/trunk/src/main/java/org/apache/giraph/graph/HashMapVertex.java Wed 
Jul 11 00:38:49 2012
@@ -54,8 +54,8 @@ public abstract class HashMapVertex<I ex
   /** Class logger */
   private static final Logger LOG = Logger.getLogger(HashMapVertex.class);
   /** Map of destination vertices and their edge values */
-  protected final Map<I, Edge<I, E>> destEdgeMap =
-      new HashMap<I, Edge<I, E>>();
+  protected final Map<I, E> destEdgeMap =
+      new HashMap<I, E>();
   /** Vertex id */
   private I vertexId = null;
   /** Vertex value */
@@ -72,12 +72,8 @@ public abstract class HashMapVertex<I ex
     if (vertexValue != null) {
       setVertexValue(vertexValue);
     }
-    if (edges != null && !edges.isEmpty()) {
-      for (Map.Entry<I, E> entry : edges.entrySet()) {
-        destEdgeMap.put(
-            entry.getKey(),
-            new Edge<I, E>(entry.getKey(), entry.getValue()));
-      }
+    if (edges != null) {
+      destEdgeMap.putAll(edges);
     }
     if (messages != null) {
       Iterables.<M>addAll(msgList, messages);
@@ -86,9 +82,7 @@ public abstract class HashMapVertex<I ex
 
   @Override
   public final boolean addEdge(I targetVertexId, E edgeValue) {
-    if (destEdgeMap.put(
-        targetVertexId,
-        new Edge<I, E>(targetVertexId, edgeValue)) != null) {
+    if (destEdgeMap.put(targetVertexId, edgeValue) != null) {
       if (LOG.isDebugEnabled()) {
         LOG.debug("addEdge: Vertex=" + vertexId +
             ": already added an edge value for dest vertex id " +
@@ -127,8 +121,7 @@ public abstract class HashMapVertex<I ex
 
   @Override
   public E getEdgeValue(I targetVertexId) {
-    Edge<I, E> edge = destEdgeMap.get(targetVertexId);
-    return edge != null ? edge.getEdgeValue() : null;
+    return destEdgeMap.get(targetVertexId);
   }
 
   @Override
@@ -154,12 +147,7 @@ public abstract class HashMapVertex<I ex
 
   @Override
   public E removeEdge(I targetVertexId) {
-    Edge<I, E> edge = destEdgeMap.remove(targetVertexId);
-    if (edge != null) {
-      return edge.getEdgeValue();
-    } else {
-      return null;
-    }
+    return destEdgeMap.remove(targetVertexId);
   }
 
   @Override
@@ -168,8 +156,8 @@ public abstract class HashMapVertex<I ex
       throw new IllegalArgumentException(
           "sendMsgToAllEdges: Cannot send null message to all edges");
     }
-    for (Edge<I, E> edge : destEdgeMap.values()) {
-      sendMsg(edge.getDestVertexId(), msg);
+    for (I targetVertexId : destEdgeMap.keySet()) {
+      sendMsg(targetVertexId, msg);
     }
   }
 
@@ -184,10 +172,11 @@ public abstract class HashMapVertex<I ex
     }
     long edgeMapSize = in.readLong();
     for (long i = 0; i < edgeMapSize; ++i) {
-      Edge<I, E> edge = new Edge<I, E>();
-      edge.setConf(getConf());
-      edge.readFields(in);
-      addEdge(edge.getDestVertexId(), edge.getEdgeValue());
+      I targetVertexId = BspUtils.<I>createVertexIndex(getConf());
+      targetVertexId.readFields(in);
+      E edgeValue = BspUtils.<E>createEdgeValue(getConf());
+      edgeValue.readFields(in);
+      addEdge(targetVertexId, edgeValue);
     }
     long msgListSize = in.readLong();
     for (long i = 0; i < msgListSize; ++i) {
@@ -206,8 +195,9 @@ public abstract class HashMapVertex<I ex
       vertexValue.write(out);
     }
     out.writeLong(destEdgeMap.size());
-    for (Edge<I, E> edge : destEdgeMap.values()) {
-      edge.write(out);
+    for (Map.Entry<I, E> edge : destEdgeMap.entrySet()) {
+      edge.getKey().write(out);
+      edge.getValue().write(out);
     }
     out.writeLong(msgList.size());
     for (M msg : msgList) {


Reply via email to