correct p4
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
index 27518b4..31e0e24 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/operator/pathmerge/P4ForPathMergeVertex.java
@@ -83,7 +83,6 @@
private PositionWritable destVertexId = new PositionWritable();
private Iterator<PositionWritable> posIterator;
- private AdjacencyListWritable neighberNode = new AdjacencyListWritable();
/**
* initiate kmerSize, maxIteration
*/
@@ -254,26 +253,41 @@
}
/**
+ * check if A need to be flipped with successor
+ */
+ public boolean ifFilpWithSuccessor(){
+ if(getVertexValue().getFRList().getLength() > 0)
+ return true;
+ else
+ return false;
+ }
+
+ /**
+ * check if A need to be filpped with predecessor
+ */
+ public boolean ifFlipWithPredecessor(){
+ if(getVertexValue().getRFList().getLength() > 0)
+ return true;
+ else
+ return false;
+ }
+ /**
* send update message from predecessor
*/
public void sendUpMsgFromPredecessor(){
outFlag |= MessageFlag.FROM_PREDECESSOR;
- if(getVertexValue().getFRList().getLength() > 0){
- outFlag |= MessageFlag.FROM_REWARDLIST;
- }
outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
+ if(ifFlipWithPredecessor())
+ outFlag |= MessageFlag.FLIP;
outgoingMsg.setMessage(outFlag);
outgoingMsg.setSourceVertexId(getVertexId());
sendMsg(getNextDestVertexId(getVertexValue()), outgoingMsg);
outUpFlag = (byte)(MessageFlag.FROM_DEADVERTEX | MessageFlag.FROM_SUCCESSOR);
- if(getVertexValue().getRFList().getLength() > 0){
- outUpFlag |= MessageFlag.FROM_REWARDLIST;
- outgoingUpMsg.setNeighberNode(getVertexValue().getIncomingList());
- } else
- outgoingUpMsg.setNeighberNode(getVertexValue().getOutgoingList());
+ outgoingUpMsg.setNeighberNode(getVertexValue().getOutgoingList());
+ if(ifFilpWithSuccessor())
+ outFlag |= MessageFlag.FLIP;
outgoingUpMsg.setMessage(outUpFlag);
outgoingUpMsg.setSourceVertexId(getVertexId());
-
sendMsg(getPreDestVertexId(getVertexValue()), outgoingUpMsg);
deleteVertex(getVertexId());
}
@@ -283,24 +297,68 @@
*/
public void sendUpMsgFromSuccessor(){
outFlag |= MessageFlag.FROM_SUCCESSOR;
- if(getVertexValue().getRFList().getLength() > 0){
- outFlag |= MessageFlag.FROM_REWARDLIST;
- outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
- } else
- outgoingMsg.setNeighberNode(getVertexValue().getOutgoingList());
+ outgoingUpMsg.setNeighberNode(getVertexValue().getOutgoingList());
+ if(ifFilpWithSuccessor())
+ outFlag |= MessageFlag.FLIP;
outgoingMsg.setMessage(outFlag);
outgoingMsg.setSourceVertexId(getVertexId());
sendMsg(getPreDestVertexId(getVertexValue()), outgoingMsg);
outUpFlag = (byte)(MessageFlag.FROM_DEADVERTEX | MessageFlag.FROM_PREDECESSOR);
- if(getVertexValue().getFRList().getLength() > 0){
- outUpFlag |= MessageFlag.FROM_REWARDLIST;
- }
outgoingMsg.setNeighberNode(getVertexValue().getIncomingList());
+ if(ifFlipWithPredecessor())
+ outFlag |= MessageFlag.FLIP;
outgoingUpMsg.setMessage(outUpFlag);
outgoingUpMsg.setSourceVertexId(getVertexId());
sendMsg(getNextDestVertexId(getVertexValue()), outgoingUpMsg);
deleteVertex(getVertexId());
}
+
+ /**
+ * update AdjacencyList if message from predecessor
+ */
+ public void updateAdjList_MsgPredecessor(){
+ if((outFlag & MessageFlag.FLIP) > 0){
+ if(getVertexValue().getFFList().getLength() > 0){
+ getVertexValue().setFFList(null);
+ if(incomingMsg.getNeighberNode().getForwardList().getLength() > 0)
+ getVertexValue().setFRList(incomingMsg.getNeighberNode().getForwardList());
+ else
+ getVertexValue().setFRList(incomingMsg.getNeighberNode().getReverseList());
+ } else {
+ getVertexValue().setFRList(null);
+ if(incomingMsg.getNeighberNode().getForwardList().getLength() > 0)
+ getVertexValue().setFFList(incomingMsg.getNeighberNode().getForwardList());
+ else
+ getVertexValue().setFFList(incomingMsg.getNeighberNode().getReverseList());
+ }
+ } else {
+ getVertexValue().setIncomingList(incomingMsg.getNeighberNode());
+ }
+ }
+
+ /**
+ * update AdjacencyList if message from successor
+ */
+ public void updateAdjList_MsgSuccessor(){
+ if((outFlag & MessageFlag.FLIP) > 0){
+ if(getVertexValue().getRRList().getLength() > 0){
+ getVertexValue().setRRList(null);
+ if(incomingMsg.getNeighberNode().getForwardList().getLength() > 0)
+ getVertexValue().setRFList(incomingMsg.getNeighberNode().getForwardList());
+ else
+ getVertexValue().setRFList(incomingMsg.getNeighberNode().getReverseList());
+ } else {
+ getVertexValue().setRFList(null);
+ if(incomingMsg.getNeighberNode().getForwardList().getLength() > 0)
+ getVertexValue().setRRList(incomingMsg.getNeighberNode().getForwardList());
+ else
+ getVertexValue().setRRList(incomingMsg.getNeighberNode().getReverseList());
+ }
+ } else {
+ getVertexValue().setOutgoingList(incomingMsg.getNeighberNode());
+ }
+ }
+
@Override
public void compute(Iterator<MessageWritable> msgIterator) {
initVertex();
@@ -367,11 +425,23 @@
outFlag = incomingMsg.getMessage();
if((outFlag & MessageFlag.FROM_DEADVERTEX) > 0){
if((outFlag & MessageFlag.FROM_PREDECESSOR) > 0){
- if((outFlag & MessageFlag.FROM_REWARDLIST) > 0){
-
- } else {
- getVertexValue().setIncomingList(incomingMsg.getNeighberNode());
- }
+ updateAdjList_MsgPredecessor();
+ }
+ else {//Message from successor.
+ updateAdjList_MsgSuccessor();
+ }
+ }
+ else {//Not for update, but for merging
+ if((outFlag & MessageFlag.FROM_PREDECESSOR) > 0){
+ //B merge with A's reverse
+ //append A's reverse to B
+ //
+ updateAdjList_MsgPredecessor();
+ }
+ else {//Message from successor
+ //B merge with A's reverse
+ //append
+ updateAdjList_MsgSuccessor();
}
}
}
diff --git a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
index de349ad..9ef6842 100644
--- a/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
+++ b/genomix/genomix-pregelix/src/main/java/edu/uci/ics/genomix/pregelix/type/MessageFlag.java
@@ -6,7 +6,7 @@
public static final byte IS_TAIL = 1 << 2;
public static final byte FROM_DEADVERTEX = 1 << 3;
//public static final byte FROM_FORWARDLIST = 1 << 4;
- public static final byte FROM_REWARDLIST = 1 << 4;
+ public static final byte FLIP = 1 << 4;
public static final byte FROM_SUCCESSOR = 1 << 5;
public static final byte FROM_PREDECESSOR = 1 << 6;
@@ -21,8 +21,8 @@
return "IS_TAIL";
case FROM_DEADVERTEX:
return "FROM_DEADVERTEX";
- case FROM_REWARDLIST:
- return "FROM_REWARDLIST";
+ case FLIP:
+ return "FLIP";
case FROM_SUCCESSOR:
return "FROM_SUCCESSOR";
case FROM_PREDECESSOR: