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);