X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/558e19f535bb0c65b610bc758c8133ded549ca3c..52d02fda9bad1a0ffe9b03b819e64ae1af4787db:/examples/msg/dht-pastry/dht-pastry.c diff --git a/examples/msg/dht-pastry/dht-pastry.c b/examples/msg/dht-pastry/dht-pastry.c index e9fc5d470a..0cf0155b06 100644 --- a/examples/msg/dht-pastry/dht-pastry.c +++ b/examples/msg/dht-pastry/dht-pastry.c @@ -1,13 +1,13 @@ -/* Copyright (c) 2013-2017. The SimGrid Team. - * All rights reserved. */ +/* Copyright (c) 2013-2018. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ #include "simgrid/msg.h" #include "xbt/dynar.h" -#include +#include +#include XBT_LOG_NEW_DEFAULT_CATEGORY(msg_pastry, "Messages specific for this msg example"); @@ -32,12 +32,12 @@ static int timeout = 50; static int max_simulation_time = 1000; typedef struct s_node { - unsigned id; //128bits generated random(2^128 -1) - unsigned known_id; + int id; //128bits generated random(2^128 -1) + int known_id; char mailbox[MAILBOX_NAME_SIZE]; // my mailbox name (string representation of the id) - unsigned namespace_set[NAMESPACE_SIZE]; - unsigned neighborhood_set[NEIGHBORHOOD_SIZE]; - unsigned routing_table[LEVELS_COUNT][LEVEL_SIZE]; + int namespace_set[NAMESPACE_SIZE]; + int neighborhood_set[NEIGHBORHOOD_SIZE]; + int routing_table[LEVELS_COUNT][LEVEL_SIZE]; int ready; msg_comm_t comm_receive; // current communication to receive xbt_dynar_t pending_tasks; @@ -45,10 +45,10 @@ typedef struct s_node { typedef s_node_t* node_t; typedef struct s_state { - unsigned id; - unsigned namespace_set[NAMESPACE_SIZE]; - unsigned neighborhood_set[NEIGHBORHOOD_SIZE]; - unsigned routing_table[LEVELS_COUNT][LEVEL_SIZE]; + int id; + int namespace_set[NAMESPACE_SIZE]; + int neighborhood_set[NEIGHBORHOOD_SIZE]; + int routing_table[LEVELS_COUNT][LEVEL_SIZE]; } s_state_t; typedef s_state_t* state_t; @@ -62,9 +62,9 @@ typedef enum { typedef struct s_task_data { e_task_type_t type; // type of task - unsigned sender_id; // id parameter (used by some types of tasks) + int sender_id; // id parameter (used by some types of tasks) //int request_finger; // finger parameter (used by some types of tasks) - unsigned answer_id; // answer (used by some types of tasks) + int answer_id; // answer (used by some types of tasks) char answer_to[MAILBOX_NAME_SIZE]; // mailbox to send an answer to (if any) //const char* issuer_host_name; // used for logging int steps; @@ -190,27 +190,27 @@ static state_t node_get_state(node_t node) { } static void print_node_id(node_t node) { - XBT_INFO(" Id: %u '%08x' ", node->id, node->id); + XBT_INFO(" Id: %i '%08x' ", node->id, (unsigned)node->id); } static void print_node_neighborood_set(node_t node) { XBT_INFO(" Neighborhood:"); for (int i=0; ineighborhood_set[i]); + XBT_INFO(" %08x", (unsigned)node->neighborhood_set[i]); } static void print_node_routing_table(node_t node) { XBT_INFO(" Routing table:"); for (int i=0; irouting_table[i][j]); + XBT_INFO(" %08x ", (unsigned)node->routing_table[i][j]); } } /* Print the node namespace set */ static void print_node_namespace_set(node_t node) { XBT_INFO(" Namespace:"); for (int i=0; inamespace_set[i]); + XBT_INFO(" %08x", (unsigned)node->namespace_set[i]); } /* Print the node information */ @@ -230,7 +230,7 @@ static void handle_task(node_t node, msg_task_t task) { int j; int min; int max; - unsigned next; + int next; msg_task_t task_sent; task_data_t req_data; task_data_t task_data = (task_data_t) MSG_task_get_data(task); @@ -245,7 +245,7 @@ static void handle_task(node_t node, msg_task_t task) { /* Try to join the ring */ case TASK_JOIN: next = routing_next(node, task_data->answer_id); - XBT_DEBUG("Join request from %08x forwarding to %08x", task_data->answer_id, next); + XBT_DEBUG("Join request from %08x forwarding to %08x", (unsigned)task_data->answer_id, (unsigned)next); type = TASK_JOIN_LAST_REPLY; req_data = xbt_new0(s_task_data_t,1); @@ -259,7 +259,7 @@ static void handle_task(node_t node, msg_task_t task) { task_data->steps++; task_sent = MSG_task_create(NULL, COMP_SIZE, COMM_SIZE, task_data); if (MSG_task_send_with_timeout(task_sent, mailbox, timeout)== MSG_TIMEOUT) { - XBT_DEBUG("Timeout expired when forwarding join to next %u", next); + XBT_DEBUG("Timeout expired when forwarding join to next %d", next); task_free(task_sent); } type = TASK_JOIN_REPLY; @@ -272,7 +272,7 @@ static void handle_task(node_t node, msg_task_t task) { req_data->state = node_get_state(node); task_sent = MSG_task_create(NULL, COMP_SIZE, COMM_SIZE, req_data); if (MSG_task_send_with_timeout(task_sent, task_data->answer_to, timeout)== MSG_TIMEOUT) { - XBT_DEBUG("Timeout expired when sending back the current node state to the joining node to %u", node->id); + XBT_DEBUG("Timeout expired when sending back the current node state to the joining node to %d", node->id); task_free(task_sent); } break; @@ -311,8 +311,8 @@ static void handle_task(node_t node, msg_task_t task) { node->ready--; // if the node is ready, do all the pending tasks and send update to known nodes if (node->ready==0) { - XBT_DEBUG("Node %u is ready!!!", node->id); - while(xbt_dynar_length(node->pending_tasks)){ + XBT_DEBUG("Node %i is ready!!!", node->id); + while (not xbt_dynar_is_empty(node->pending_tasks)) { msg_task_t task; xbt_dynar_shift(node->pending_tasks, &task); handle_task(node, task); @@ -342,10 +342,10 @@ static void handle_task(node_t node, msg_task_t task) { break; /* Received an update of state */ case TASK_UPDATE: - XBT_DEBUG("Task update %u !!!", node->id); + XBT_DEBUG("Task update %i !!!", node->id); /* Update namespace ses */ - XBT_INFO("Task update from %u !!!", task_data->sender_id); + XBT_INFO("Task update from %i !!!", task_data->sender_id); XBT_INFO("Node:"); print_node_id(node); print_node_namespace_set(node); @@ -378,16 +378,13 @@ static void handle_task(node_t node, msg_task_t task) { // add lower elements j = NAMESPACE_SIZE/2-1; for (i=NAMESPACE_SIZE/2-1; i>=0; i--) { - if (min<0) { + if (min < 0 || curr_namespace_set[j] > task_namespace_set[min]) { node->namespace_set[i] = curr_namespace_set[j]; j--; } else if (curr_namespace_set[j] == task_namespace_set[min]) { node->namespace_set[i] = curr_namespace_set[j]; j--; min--; - } else if (curr_namespace_set[j] > task_namespace_set[min]) { - node->namespace_set[i] = curr_namespace_set[j]; - j--; } else { node->namespace_set[i] = task_namespace_set[min]; min--; @@ -401,19 +398,16 @@ static void handle_task(node_t node, msg_task_t task) { node->namespace_set[i] = curr_namespace_set[j]; j++; } else if (max >= 0){ - if (curr_namespace_set[j] == -1) { + if (curr_namespace_set[j] == -1 || curr_namespace_set[j] > task_namespace_set[max]) { node->namespace_set[i] = task_namespace_set[max]; max++; } else if (curr_namespace_set[j] == task_namespace_set[max]) { node->namespace_set[i] = curr_namespace_set[j]; j++; max++; - } else if (curr_namespace_set[j] < task_namespace_set[max]) { + } else { node->namespace_set[i] = curr_namespace_set[j]; j++; - } else { - node->namespace_set[i] = task_namespace_set[max]; - max++; } } } @@ -447,7 +441,7 @@ static int join(node_t node){ msg_task_t task_sent = MSG_task_create(NULL, COMP_SIZE, COMM_SIZE, req_data); XBT_DEBUG("Trying to join Pastry ring... (with node %s)", mailbox); if (MSG_task_send_with_timeout(task_sent, mailbox, timeout)== MSG_TIMEOUT) { - XBT_DEBUG("Timeout expired when joining ring with node %u", node->known_id); + XBT_DEBUG("Timeout expired when joining ring with node %d", node->known_id); task_free(task_sent); } @@ -475,7 +469,7 @@ static int node(int argc, char *argv[]) node.ready = -1; node.pending_tasks = xbt_dynar_new(sizeof(msg_task_t), NULL); get_mailbox(node.id, node.mailbox); - XBT_DEBUG("New node with id %s (%08x)", node.mailbox, node.id); + XBT_DEBUG("New node with id %s (%08x)", node.mailbox, (unsigned)node.id); for (int i=0; i