-/* Copyright (c) 2012-2019. The SimGrid Team.
+/* Copyright (c) 2012-2023. The SimGrid Team.
* All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
Msg.debug("Caught exception: " + e);
}
}
- Msg.info(findNodeSuccedded + "/" + (findNodeSuccedded + findNodeFailed) + " FIND_NODE have succedded.");
+ Msg.info(findNodeSuccedded + "/" + (findNodeSuccedded + findNodeFailed) + " FIND_NODE have succeeded.");
}
/**
} while (!answerGot && trials < Common.MAX_JOIN_TRIALS);
/* Second step: Send a FIND_NODE in a node in each bucket */
int bucketId = table.findBucket(idKnown).getId();
- for (int i = 0; ((bucketId - i) > 0 ||
- (bucketId + i) <= Common.IDENTIFIER_SIZE) &&
+ for (int i = 0; ((bucketId - i) > 0 ||
+ (bucketId + i) <= Common.IDENTIFIER_SIZE) &&
i < Common.JOIN_BUCKETS_QUERIES; i++) {
if (bucketId - i > 0) {
int idInBucket = table.getIdInPrefix(this.id,bucketId - i);
if (!comm.test()) {
waitFor(1);
} else {
- Task task = comm.getTask();
+ Task task = comm.getTask();
if (task instanceof FindNodeAnswerTask) {
FindNodeAnswerTask answerTask = (FindNodeAnswerTask)task;
//Check if we received what we are looking for.
table.update(c.getId());
}
answers++;
-
+
nodesAdded = nodeList.merge(answerTask.getAnswer());
} else {
/* If it's not our answer, we answer to the node that has queried us anyway */
}
} while (answers < queries && Msg.getClock() < timeout);
destinationFound = nodeList.destinationFound();
- } while (!destinationFound && (nodesAdded > 0 || answers == 0) && Msg.getClock() < globalTimeout
+ } while (!destinationFound && (nodesAdded > 0 || answers == 0) && Msg.getClock() < globalTimeout
&& steps < Common.MAX_STEPS);
if (destinationFound) {
if (counts) {
findNodeSuccedded++;
}
- Msg.debug("Find node on " + destination + " succedded");
+ Msg.debug("Find node on " + destination + " succeeded");
} else {
Msg.debug("Find node on " + destination + " failed");
Msg.debug("Queried " + queries + " nodes to find " + destination);
return destinationFound;
}
- /**
- * @brief Sends a "PING" request to a node
- * @param destination Ping destination id.
- */
- public void ping(int destination) {
- boolean destinationFound = false;
- double timeout = Msg.getClock() + Common.PING_TIMEOUT;
- PingTask pingTask = new PingTask(this.id);
- /* Sending the ping task */
- pingTask.dsend(Integer.toString(destination));
- do {
- try {
- Task task = Task.receive(Integer.toString(this.id),Common.PING_TIMEOUT);
- if (task instanceof PingAnswerTask) {
- PingAnswerTask answerTask = (PingAnswerTask)task;
- if (answerTask.getSenderId() == destination) {
- this.table.update(destination);
- destinationFound = true;
- } else {
- handleTask(task);
- }
- } else {
- handleTask(task);
- }
- waitFor(1);
- }
- catch (Exception ex) {
- Msg.debug("Caught exception: " + ex);
- }
- } while (Msg.getClock() < timeout && !destinationFound);
- }
-
/**
* @brief Sends a "FIND_NODE" request (task) to a node we know.
* @param id Id of the node we are querying
}
/**
- * @brief Handles an incomming task
+ * @brief Handles an incoming task
* @param task The task we need to handle
*/
public void handleTask(Task task) {
if (task instanceof FindNodeTask) {
handleFindNode((FindNodeTask)task);
}
- else if (task instanceof PingTask) {
- handlePing((PingTask)task);
- }
}
}
FindNodeAnswerTask taskToSend = new FindNodeAnswerTask(this.id,task.getDestination(),answer);
taskToSend.dsend(Integer.toString(task.getSenderId()));
}
-
- public void handlePing(PingTask task) {
- Msg.debug("Received a PING from " + task.getSenderId());
- PingAnswerTask taskToSend = new PingAnswerTask(this.id);
- taskToSend.dsend(Integer.toString(task.getSenderId()));
- }
}