-
Michael Kmoch authored
added paper v0.5 will be updated
Michael Kmoch authoredadded paper v0.5 will be updated
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ActionPrepareDistributedCommitedTransferAnswer.java 1.74 KiB
package fucoin.actions.transaction;
import fucoin.supervisor.DistributedCommitedTransferRequest;
import fucoin.supervisor.SuperVisor;
import akka.actor.ActorRef;
import akka.actor.UntypedActorContext;
public class ActionPrepareDistributedCommitedTransferAnswer extends CoordinatorTransaction {
private ActorRef source;
private ActorRef target;
private int amount;
private boolean granted;
private long timestamp;
private long id;
public ActionPrepareDistributedCommitedTransferAnswer(ActorRef source,
ActorRef target, int amount, long timestamp, boolean granted, long id) {
this.source=source;
this.target=target;
this.amount=amount;
this.granted=granted;
this.timestamp=timestamp;
this.id=id;
}
@Override
protected void onAction(ActorRef sender, ActorRef self,
UntypedActorContext context, SuperVisor superVisor) {
log(""+superVisor.getKnownNeighbors());
log("granted?"+granted);
DistributedCommitedTransferRequest request = superVisor.getRequest(id);
if(granted){
if(request==null)//unknown DistributedCommitedTransferRequest ignore
return;
int newCount = request.addPositiveAnswer(sender);
if(newCount == superVisor.getKnownNeighbors().size()){
ActionCommitDistributedCommitedTransfer acdct = new ActionCommitDistributedCommitedTransfer(source,target,amount,true,timestamp,id);
for(ActorRef neighbor : request.getAnswers()){
neighbor.tell(acdct, self);
}
superVisor.deleteRequest(request);
}
}else{
//A client wants to rollback
if(request!=null){
ActionCommitDistributedCommitedTransfer acdct = new ActionCommitDistributedCommitedTransfer(source,target,amount,false,timestamp,id);
for(ActorRef neighbor : request.getAnswers()){
neighbor.tell(acdct, self);
}
}
}
}
}