the newest version of log algorthm for path merge and pass all the test cases
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
index e22b20d..580e1fe 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LoadGraphVertex.java
@@ -49,6 +49,7 @@
*/
@Override
public void compute(Iterator<MessageWritable> msgIterator) {
+ deleteVertex(getVertexId());
voteToHalt();
}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
index d55e64e..bd368cb 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/LogAlgorithmForMergeGraphVertex.java
@@ -132,42 +132,17 @@
}
//head node sends message to path node
else if(getSuperstep()%3 == 0 && getSuperstep() <= maxIteration){
- if(getSuperstep() == 3){
- tmpMsg = new LogAlgorithmMessageWritable();
- if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1)
- voteToHalt();
- else{
- tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId,
- 0, tmpVertexId.length,
- Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
- destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
- if(tmpVal.getState() == State.START_VERTEX){
- tmpMsg.setMessage(Message.START);
- tmpMsg.setSourceVertexId(getVertexId().getBytes());
- sendMsg(destVertexId, tmpMsg);
- voteToHalt();
- }
- else if(tmpVal.getState() != State.END_VERTEX && tmpVal.getState() != State.FINAL_DELETE){
- tmpMsg.setMessage(Message.NON);
- tmpMsg.setSourceVertexId(getVertexId().getBytes());
- sendMsg(destVertexId,tmpMsg);
- voteToHalt();
- }
- }
- }
+ if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+ voteToHalt();
else{
- if(msgIterator.hasNext()){
- tmpMsg = msgIterator.next();
- byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
- tmpVal.getLengthOfMergeChain(),
- tmpVal.getMergeChain(),
- 0, tmpVal.getMergeChain().length);
- if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1 || lastKmer == null)
+ if(getSuperstep() == 3){
+ tmpMsg = new LogAlgorithmMessageWritable();
+ if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1)
voteToHalt();
else{
- tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer,
- 0, lastKmer.length,
- Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
+ tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, tmpVertexId,
+ 0, tmpVertexId.length,
+ Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
if(tmpVal.getState() == State.START_VERTEX){
tmpMsg.setMessage(Message.START);
@@ -179,6 +154,35 @@
tmpMsg.setMessage(Message.NON);
tmpMsg.setSourceVertexId(getVertexId().getBytes());
sendMsg(destVertexId,tmpMsg);
+ voteToHalt();
+ }
+ }
+ }
+ else{
+ if(msgIterator.hasNext()){
+ tmpMsg = msgIterator.next();
+ byte[] lastKmer = KmerUtil.getLastKmerFromChain(kmerSize,
+ tmpVal.getLengthOfMergeChain(),
+ tmpVal.getMergeChain(),
+ 0, tmpVal.getMergeChain().length);
+ if(Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)) == -1 || lastKmer == null)
+ voteToHalt();
+ else{
+ tmpDestVertexId = KmerUtil.shiftKmerWithNextCode(kmerSize, lastKmer,
+ 0, lastKmer.length,
+ Kmer.GENE_CODE.getGeneCodeFromBitMap((byte)(tmpVal.getValue() & 0x0F)));
+ destVertexId.set(tmpDestVertexId, 0, tmpDestVertexId.length);
+ if(tmpVal.getState() == State.START_VERTEX){
+ tmpMsg.setMessage(Message.START);
+ tmpMsg.setSourceVertexId(getVertexId().getBytes());
+ sendMsg(destVertexId, tmpMsg);
+ voteToHalt();
+ }
+ else if(tmpVal.getState() != State.END_VERTEX && tmpVal.getState() != State.FINAL_DELETE){
+ tmpMsg.setMessage(Message.NON);
+ tmpMsg.setSourceVertexId(getVertexId().getBytes());
+ sendMsg(destVertexId,tmpMsg);
+ }
}
}
}
@@ -187,53 +191,55 @@
//path node sends message back to head node
else if(getSuperstep()%3 == 1 && getSuperstep() <= maxIteration){
- if(msgIterator.hasNext()){
- tmpMsg = msgIterator.next();
- int message = tmpMsg.getMessage();
- if(tmpVal.getLengthOfMergeChain() == 0){
- tmpVal.setLengthOfMergeChain(kmerSize);
- tmpVal.setMergeChain(tmpVertexId);
- setVertexValue(tmpVal);
- }
- tmpMsg.setLengthOfChain(tmpVal.getLengthOfMergeChain());
- tmpMsg.setChainVertexId(tmpVal.getMergeChain());
-
- tmpMsg.setNeighberInfo(tmpVal.getValue()); //set neighber
- tmpMsg.setSourceVertexState(tmpVal.getState());
-
- //kill Message because it has been merged by the head
- if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE){
- tmpMsg.setMessage(Message.END);
- tmpVal.setState(State.FINAL_DELETE);
- setVertexValue(tmpVal);
- //deleteVertex(getVertexId());
- }
- else
- tmpMsg.setMessage(Message.NON);
-
- if(message == Message.START){
- tmpVal.setState(State.TODELETE);
- setVertexValue(tmpVal);
- }
- destVertexId.set(tmpMsg.getSourceVertexId(), 0, tmpMsg.getSourceVertexId().length);
- sendMsg(destVertexId,tmpMsg);
- //voteToHalt();
- }
+ if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+ voteToHalt();
else{
- if(getVertexValue().getState() != State.START_VERTEX && getVertexValue().getState() != State.NON_EXIST
- && getVertexValue().getState() != State.END_VERTEX && getVertexValue().getState() != State.FINAL_DELETE){
- tmpVal.setState(State.NON_EXIST);
- setVertexValue(tmpVal);
- deleteVertex(getVertexId()); //killSelf because it doesn't receive any message
+ if(msgIterator.hasNext()){
+ tmpMsg = msgIterator.next();
+ int message = tmpMsg.getMessage();
+ if(tmpVal.getLengthOfMergeChain() == 0){
+ tmpVal.setLengthOfMergeChain(kmerSize);
+ tmpVal.setMergeChain(tmpVertexId);
+ setVertexValue(tmpVal);
+ }
+ tmpMsg.setLengthOfChain(tmpVal.getLengthOfMergeChain());
+ tmpMsg.setChainVertexId(tmpVal.getMergeChain());
+
+ tmpMsg.setNeighberInfo(tmpVal.getValue()); //set neighber
+ tmpMsg.setSourceVertexState(tmpVal.getState());
+
+ //kill Message because it has been merged by the head
+ if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE){
+ tmpMsg.setMessage(Message.END);
+ tmpVal.setState(State.FINAL_DELETE);
+ setVertexValue(tmpVal);
+ //deleteVertex(getVertexId());
+ }
+ else
+ tmpMsg.setMessage(Message.NON);
+
+ if(message == Message.START){
+ tmpVal.setState(State.TODELETE);
+ setVertexValue(tmpVal);
+ }
+ destVertexId.set(tmpMsg.getSourceVertexId(), 0, tmpMsg.getSourceVertexId().length);
+ sendMsg(destVertexId,tmpMsg);
+ //voteToHalt();
+ }
+ else{
+ if(getVertexValue().getState() != State.START_VERTEX //&& getVertexValue().getState() != State.NON_EXIST
+ && getVertexValue().getState() != State.END_VERTEX && getVertexValue().getState() != State.FINAL_DELETE){
+ tmpVal.setState(State.KILL_SELF);
+ setVertexValue(tmpVal);
+ voteToHalt();
+ //deleteVertex(getVertexId()); //killSelf because it doesn't receive any message
+ }
}
}
}
else if(getSuperstep()%3 == 2 && getSuperstep() <= maxIteration){
- if(tmpVal.getState() == State.TODELETE && getVertexValue().getState() != State.NON_EXIST){
- tmpVal.setState(State.NON_EXIST);
- setVertexValue(tmpVal);
- deleteVertex(getVertexId()); //killSelf
- }
+ if(tmpVal.getState() == State.TODELETE || tmpVal.getState() == State.KILL_SELF)
+ voteToHalt(); //deleteVertex(getVertexId()); //killSelf
else{
if(msgIterator.hasNext()){
tmpMsg = msgIterator.next();
@@ -274,7 +280,7 @@
sendMsg(getVertexId(),tmpMsg);
}
}
- if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE || tmpVal.getState() == State.NON_EXIST)
+ if(tmpVal.getState() == State.END_VERTEX || tmpVal.getState() == State.FINAL_DELETE)
voteToHalt();
if(tmpVal.getState() == State.FINAL_VERTEX){
//String source = Kmer.recoverKmerFrom(tmpVal.getLengthOfMergeChain(), tmpVal.getMergeChain(), 0, tmpVal.getMergeChain().length);
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
index 24fca7b..9cea793 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/format/LogAlgorithmForMergeGraphOutputFormat.java
@@ -40,7 +40,9 @@
public void writeVertex(Vertex<BytesWritable, ValueStateWritable, NullWritable, ?> vertex) throws IOException,
InterruptedException {
if(vertex.getVertexValue().getState() != State.FINAL_DELETE
- && vertex.getVertexValue().getState() != State.END_VERTEX)
+ && vertex.getVertexValue().getState() != State.END_VERTEX
+ && vertex.getVertexValue().getState() != State.TODELETE
+ && vertex.getVertexValue().getState() != State.KILL_SELF)
getRecordWriter().write(vertex.getVertexId(),vertex.getVertexValue());
}
}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
index 8ab6990..a054ede 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/sequencefile/GenerateTextFile.java
@@ -16,7 +16,7 @@
public class GenerateTextFile {
public static void generate() throws IOException{
- BufferedWriter bw = new BufferedWriter(new FileWriter("text/naive_CyclePath"));
+ BufferedWriter bw = new BufferedWriter(new FileWriter("text/new_SimplePath"));
Configuration conf = new Configuration();
FileSystem fileSys = FileSystem.get(conf);
for(int i = 0; i < 2; i++){
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
index 999b431..61bcb0c 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/State.java
@@ -8,7 +8,7 @@
public static final int TODELETE = 4;
public static final int FINAL_VERTEX = 5;
public static final int FINAL_DELETE = 6;
- public static final int NON_EXIST = 7;
+ public static final int KILL_SELF = 7;
public final static class STATE_CONTENT{
@@ -36,8 +36,8 @@
case FINAL_DELETE:
r = "FINAL_DELETE";
break;
- case NON_EXIST:
- r = "NON_EXIST";
+ case KILL_SELF:
+ r = "KILL_SELF";
break;
}
return r;