Add sychnized lock to P2 to avoid duplicate fake nodes
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
index 7209c81..85ecf71 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/BasicGraphCleanVertex.java
@@ -33,6 +33,7 @@
     public static int kmerSize = -1;
     public static int maxIteration = -1;
     
+    public static Object lock = new Object();
     public static boolean fakeVertexExist = false;
     protected static VKmerBytesWritable fakeVertex = null;
     
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
index 97b4446..ab143b5 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P2ForPathMergeVertex.java
@@ -57,12 +57,14 @@
             kmerList = new VKmerListWritable();
         else
             kmerList.reset();
-        if(fakeVertex == null){
-            fakeVertex = new VKmerBytesWritable();
-            String random = generaterRandomString(kmerSize + 1);
-            fakeVertex.setByRead(kmerSize + 1, random.getBytes(), 0); 
+        synchronized(lock){
+            if(fakeVertex == null){
+                fakeVertex = new VKmerBytesWritable();
+                String fake = generateString(kmerSize + 1);//generaterRandomString(kmerSize + 1);
+                fakeVertex.setByRead(kmerSize + 1, fake.getBytes(), 0); 
+            }
+            isFakeVertex = ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0 ? true : false;
         }
-        isFakeVertex = ((byte)getVertexValue().getState() & State.FAKEFLAG_MASK) > 0 ? true : false;
         if(destVertexId == null)
             destVertexId = new VKmerBytesWritable();
         if(tmpKmer == null)
@@ -78,7 +80,18 @@
         counters.clear();
         getVertexValue().getCounters().clear();
     }
-
+    
+    /**
+     * 
+     */
+    public String generateString(int length){
+        StringBuffer outputBuffer = new StringBuffer(length);
+        for (int i = 0; i < length; i++){
+           outputBuffer.append("A");
+        }
+        return outputBuffer.toString();
+    }
+    
     /**
      * add fake vertex
      */
diff --git a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
index 93b111a..7206014 100644
--- a/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
+++ b/genomix/genomix-pregelix/src/test/java/edu/uci/ics/genomix/pregelix/JobRun/PathMergeTestSuite.java
@@ -6,20 +6,20 @@
 
     public static Test suite() throws Exception {
         String pattern ="PathMerge"; 
-        String testSet[] = {"RingPath"};
-//                "2", "3", "4", "5", "6", "7", "8", "9", "head_6", "head_7",
-//                "LeftAdj", "RightAdj",
-//                "FR", "RF", "head_FR", "head_RF", "twohead_FR", "twohead_RF",
-//                "SelfTandemRepeat", "TandemRepeatWithMergeEdge", 
-//                "TandemRepeatWithUnmergeEdge", "ComplexTandemRepeat",
-//                "SimplePath", "ThreeDuplicate",
-//                "SimpleBridgePath", "BridgePathWithTandemRepeat",
-//                "RingPath", //"CyclePath",
-//                "SimpleTreePath", "ComplexTreePath",
-//                "Triangle", "Rectangle", 
-//                "synthetic",
-//                "SmallGenome"
-//        };
+        String testSet[] = {
+                "2", "3", "4", "5", "6", "7", "8", "9", "head_6", "head_7",
+                "LeftAdj", "RightAdj",
+                "FR", "RF", "head_FR", "head_RF", "twohead_FR", "twohead_RF",
+                "SelfTandemRepeat", "TandemRepeatWithMergeEdge", 
+                "TandemRepeatWithUnmergeEdge", "ComplexTandemRepeat",
+                "SimplePath", "ThreeDuplicate",
+                "SimpleBridgePath", "BridgePathWithTandemRepeat",
+                "RingPath", //"CyclePath",
+                "SimpleTreePath", "ComplexTreePath",
+                "Triangle", "Rectangle", 
+                "synthetic",
+                "SmallGenome"
+        };
         init(pattern, testSet);
         BasicGraphCleanTestSuite testSuite = new BasicGraphCleanTestSuite();
         return makeTestSuite(testSuite);