GetPredecessorTask sendTask = new GetPredecessorTask(getHost().getName(), this.mailbox);
try {
sendTask.send(mailboxTo, Common.TIMEOUT);
- try {
- do {
- if (commReceive == null) {
- commReceive = Task.irecv(this.mailbox);
- }
- commReceive.waitCompletion(Common.TIMEOUT);
- Task taskReceived = commReceive.getTask();
- if (taskReceived instanceof GetPredecessorAnswerTask) {
- predecessorId = ((GetPredecessorAnswerTask) taskReceived).getAnswerId();
- stop = true;
- } else {
- handleTask(taskReceived);
- }
- commReceive = null;
- } while (!stop);
- }
- catch (MsgException e) {
+ do {
+ if (commReceive == null) {
+ commReceive = Task.irecv(this.mailbox);
+ }
+ commReceive.waitCompletion(Common.TIMEOUT);
+ Task taskReceived = commReceive.getTask();
+ if (taskReceived instanceof GetPredecessorAnswerTask) {
+ predecessorId = ((GetPredecessorAnswerTask) taskReceived).getAnswerId();
+ stop = true;
+ } else {
+ handleTask(taskReceived);
+ }
commReceive = null;
- }
+ } while (!stop);
}
catch (MsgException e) {
Msg.debug("Failed to send the Get Predecessor request");
}
+ commReceive = null;
+
return predecessorId;
}
if (commReceive == null) {
commReceive = Task.irecv(this.mailbox);
}
- try {
- commReceive.waitCompletion(Common.TIMEOUT);
- Task task = commReceive.getTask();
- if (task instanceof FindSuccessorAnswerTask) {
- //TODO: Check if this this our answer.
- FindSuccessorAnswerTask fTask = (FindSuccessorAnswerTask) task;
- stop = true;
- successor = fTask.getAnswerId();
- } else {
- handleTask(task);
- }
- commReceive = null;
- }
- catch (TimeoutException e) {
+ commReceive.waitCompletion(Common.TIMEOUT);
+ Task task = commReceive.getTask();
+ if (task instanceof FindSuccessorAnswerTask) {
+ //TODO: Check if this this our answer.
+ FindSuccessorAnswerTask fTask = (FindSuccessorAnswerTask) task;
stop = true;
- commReceive = null;
+ successor = fTask.getAnswerId();
+ } else {
+ handleTask(task);
}
+ commReceive = null;
} while (!stop);
}
catch (TimeoutException e) {
catch (MsgException e) {
Msg.debug("Failed to receive Find Successor");
}
+ commReceive = null;
return successor;
}
// It refreshes the finger table of the current node.
private void fixFingers() {
Msg.debug("Fixing fingers");
- int i = this.nextFingerToFix;
- int successorId = this.findSuccessor(this.id + (int)Math.pow(2,i)); //FIXME: SLOW
+ int successorId = findSuccessor(id + (1 << nextFingerToFix));
if (successorId != -1) {
- if (successorId != fingers[i]) {
- setFinger(i, successorId);
+ if (successorId != fingers[nextFingerToFix]) {
+ setFinger(nextFingerToFix, successorId);
}
- nextFingerToFix = (i + 1) % Common.NB_BITS;
+ nextFingerToFix = (nextFingerToFix + 1) % Common.NB_BITS;
}
}