X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/62c560ea9e8026722af5f293b3c3ffd80c4ecabf..3dae72041b61355dd76935c667ff105f38c7925d:/examples/lua/chord/chord.lua diff --git a/examples/lua/chord/chord.lua b/examples/lua/chord/chord.lua index bb763bde61..6e6df64f93 100644 --- a/examples/lua/chord/chord.lua +++ b/examples/lua/chord/chord.lua @@ -1,5 +1,11 @@ -- A SimGrid Lua implementation of the Chord DHT +-- Copyright (c) 2011-2012, 2014. 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. + require("simgrid") nb_bits = 24 @@ -13,7 +19,7 @@ fix_fingers_delay = 120 check_predecessor_delay = 120 lookup_delay = 10 --- current node (don't worry, globals are duplicated in each process) +-- current node (don't worry, globals are duplicated in each simulated process) my_node = { id = my_id, next_finger_to_fix = 1, @@ -28,7 +34,7 @@ my_node = { -- - the id of a guy I know in the system (except for the first node) function node(...) - -- TODO simplify the parameters + -- TODO simplify the deployment file local known_id local args = {...} my_node.id = tonumber(args[1]) @@ -61,17 +67,17 @@ function node(...) local next_check_predecessor_date = now + check_predecessor_delay local next_lookup_date = now + lookup_delay - local task, success + local task, err while now < max_simulation_time do - task, success = simgrid.comm.test(my_node.comm_recv) + task, err = my_node.comm_recv:test() if task then -- I received a task: answer it my_node.comm_recv = simgrid.task.irecv(my_node.id) handle_task(task) - elseif failed then + elseif err then -- the communication has failed: nevermind my_node.comm_recv = simgrid.task.irecv(my_node.id) else @@ -87,6 +93,7 @@ function node(...) elseif now >= next_check_predecessor_date then check_predecessor() next_check_predecessor_date = simgrid.get_clock() + check_predecessor_delay + elseif now >= next_lookup_date then random_lookup() next_lookup_date = simgrid.get_clock() + lookup_delay @@ -129,28 +136,20 @@ function handle_task(task) task.answer_to .. ": the successor of " .. task.request_id .. " is " .. my_node.fingers[1]) - local ans_task = simgrid.task.new("", comp_size, comm_size) - ans_task.type = "find successor answer" - ans_task.request_id = task.request_id - ans_task.answer = my_node.fingers[1] - ans_task:dsend(task.answer_to) + task.type = "find successor answer" + task.answer = my_node.fingers[1] + task:dsend(task.answer_to) else -- forward the request to the closest preceding finger in my table simgrid.info("Forwarding the 'find successor' request to my closest preceding finger") - - local next_task = simgrid.task.new("", comp_size, comm_size) - next_task.type = "find successor" - next_task.request_id = task.request_id - next_task.answer_to = task.answer_to - next_task:dsend(closest_preceding_node(next_task.request_id)) + task:dsend(closest_preceding_node(task.request_id)) end elseif type == "get predecessor" then - local ans_task = simgrid.task.new("", comp_size, comm_size) - ans_task.type = "get predecessor answer" - ans_task.answer = my_node.predecessor - ans_task:dsend(task.answer_to) + task.type = "get predecessor answer" + task.answer = my_node.predecessor + task:dsend(task.answer_to) elseif type == "notify" then -- someone is telling me that he may be my new predecessor @@ -278,7 +277,7 @@ function remote_find_successor(ask_to, id) " for id " .. id .. ", waiting for the answer") while true do - task = simgrid.comm.wait(my_node.comm_recv, timeout) + task = my_node.comm_recv:wait(timeout) my_node.comm_recv = simgrid.task.irecv(my_node.id) if not task then @@ -319,7 +318,7 @@ function remote_get_predecessor(ask_to) if task:send(ask_to, timeout) then -- request successfully sent: wait for an answer while true do - task = simgrid.comm.wait(my_node.comm_recv, timeout) + task = my_node.comm_recv:wait(timeout) my_node.comm_recv = simgrid.task.irecv(my_node.id) if not task then