User Tools

Site Tools


cs330_f2016:labz

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
cs330_f2016:labz [2017/03/23 00:48]
dhart
cs330_f2016:labz [2021/06/30 23:42] (current)
Line 3: Line 3:
 To gain more significant experience in programming elixir, by implementing a server and constructing a supervisor tree. To gain more significant experience in programming elixir, by implementing a server and constructing a supervisor tree.
  
----- +===Pre-requisites:​===
-====Pre-requisites:​====+
  
 For this lab, you will need the [[http://​liftothers.org/​dokuwiki/​doku.php?​id=cs330_f2016:​lab13scaffold|scaffolding code]]. For this lab, you will need the [[http://​liftothers.org/​dokuwiki/​doku.php?​id=cs330_f2016:​lab13scaffold|scaffolding code]].
  
-The provided modules create a mock data center with inter module dependencies. ​+The provided modules create a mock data center with inter module dependencies. ​**You do not need to modify this code**
  
 ---- ----
Line 37: Line 36:
 These simple calls allow modules to register themselves with the local name server so that they can easily talk to each other. The name server should return :ok to all other synchronous calls, and discard all other asynchronous calls. You can assume name and Pid are valid. These simple calls allow modules to register themselves with the local name server so that they can easily talk to each other. The name server should return :ok to all other synchronous calls, and discard all other asynchronous calls. You can assume name and Pid are valid.
  
-We have been have provided a skeleton of some GenServer code [[http://​liftothers.org/​dokuwiki/​doku.php?​id=cs330_f2016:​lab13genserver|here]].+We have provided a skeleton of some GenServer code [[http://​liftothers.org/​dokuwiki/​doku.php?​id=cs330_f2016:​lab13genserver|here]].
  
-Any time a pid goes down you will need to remove it from the name server, this is best done by placing a monitor on the pid before you put it into your data structure. The process will then notify the server through its handle_info function. +===Hints:​===
- +
-====Hints:====+
  
 We strongly encourage that your server implements Elixir'​s GenServer behavior. More info is found here. [[https://​hexdocs.pm/​elixir/​GenServer.html| GenServer]] We strongly encourage that your server implements Elixir'​s GenServer behavior. More info is found here. [[https://​hexdocs.pm/​elixir/​GenServer.html| GenServer]]
Line 51: Line 48:
 Example: Example:
 <code elixir> <code elixir>
-def handle_call({:​register,​ name}, pid, mymap) do+def handle_call({:​register,​ name}, ​{pid, _from}, mymap) do
   ...   ...
   {:reply, :ok, mymap}   {:reply, :ok, mymap}
 end end
 </​code>​ </​code>​
- 
-Monitors are in the Process module, documentation is found [[https://​hexdocs.pm/​elixir/​Process.html#​monitor/​1|here]]. 
  
 ---- ----
-===Part 2: Supervisor tree===+====Part 2: Supervisor tree:====
  
 You've been asked to construct the supervisor tree for a series of connected modules in a virtual "data center"​. Information for the modules and dependencies can be found below. Each module will be registered in the name server that you coded above. Each process will be started by a node in a supervisor tree. You've been asked to construct the supervisor tree for a series of connected modules in a virtual "data center"​. Information for the modules and dependencies can be found below. Each module will be registered in the name server that you coded above. Each process will be started by a node in a supervisor tree.
Line 119: Line 114:
  
 ---- ----
-====Hints:====+===Hints:​===
  
 Don't create your own supervisor, use the built in ''​Supervisor''​ behavior. You will also need to create sub supervisors started by upper level ones. Don't create your own supervisor, use the built in ''​Supervisor''​ behavior. You will also need to create sub supervisors started by upper level ones.
Line 129: Line 124:
 Helpful links:\\ Helpful links:\\
 https://​hexdocs.pm/​elixir/​Supervisor.html \\ https://​hexdocs.pm/​elixir/​Supervisor.html \\
 +
 +----
 +====Submitting Your Lab====
 +For submitting this lab, please put all of your code into a single file called "​Elixir2.ex"​. This should include all of the code from the provided modules, all of the code for you name server, and all of your code for your supervisor modules. ​
  
cs330_f2016/labz.1490230118.txt.gz · Last modified: 2021/06/30 23:40 (external edit)