Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[Lua] Chord.lua indentation
[simgrid.git] / examples / lua / chord / chord.lua
index bb763bd..e48e5ec 100644 (file)
@@ -1,19 +1,25 @@
 -- 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
-nb_keys = 2^nb_bits
-comp_size = 0
-comm_size = 10
-timeout = 50
-max_simulation_time = 1000
-stabilize_delay = 20
-fix_fingers_delay = 120
+nb_bits                 = 24
+nb_keys                 = 2^nb_bits
+comp_size               = 0
+comm_size               = 10
+timeout                 = 50
+max_simulation_time     = 1000
+stabilize_delay         = 20
+fix_fingers_delay       = 120
 check_predecessor_delay = 120
-lookup_delay = 10
+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