<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>docs/links.txt</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,8 +7,10 @@ Nanite.identity = 'mapper'
 db, password = ARGV[0], ARGV[1] || 'testing'
 
 
-Nanite::Runner.new.start  :user     =&gt; Nanite.identity,
-                          :pass     =&gt; password,
-                          :vhost    =&gt; '/nanite',
-                          :host     =&gt; '0.0.0.0',
-                          :db       =&gt; db
\ No newline at end of file
+Nanite::Runner.new.start  :user           =&gt; Nanite.identity,
+                          :pass           =&gt; password,
+                          :vhost          =&gt; '/nanite',
+                          :host           =&gt; '0.0.0.0',
+                          :db             =&gt; db,
+                          :ping_time      =&gt; 15,
+                          :heartbeat_time =&gt; 10
\ No newline at end of file</diff>
      <filename>bin/mapper</filename>
    </modified>
    <modified>
      <diff>@@ -2,7 +2,7 @@
 
 puts `rabbitmqctl add_vhost /nanite`
 
-%w[mapper client merb tom jay edward yehuda james corey josh ezra womble jeff loren lance sam kevin kirk].each do |agent|
+%w[mapper shoes client merb tom jay edward yehuda james corey josh ezra womble jeff loren lance sam kevin kirk].each do |agent|
   puts `rabbitmqctl add_user #{agent} testing`
   puts `rabbitmqctl map_user_vhost #{agent} /nanite`
   puts `rabbitmqctl set_permissions #{agent} /nanite /data all`</diff>
      <filename>bin/rabbitconf</filename>
    </modified>
    <modified>
      <diff>@@ -57,7 +57,7 @@ module Nanite
   class &lt;&lt; self
     attr_accessor :identity
     
-    attr_accessor :default_resources, :last_ping
+    attr_accessor :default_resources, :last_ping, :ping_time
     
     def root
       @root ||= File.expand_path(File.dirname(__FILE__))
@@ -104,7 +104,8 @@ module Nanite
           end
         end  
         
-        Nanite.amq.queue(Nanite.identity, :exclusive =&gt; true).subscribe{ |msg|
+        Nanite.amq.queue(Nanite.identity, :exclusive =&gt; true).subscribe{ |headers,msg|
+          p headers
           Nanite::Dispatcher.handle(Marshal.load(msg))
         }
       end</diff>
      <filename>lib/nanite.rb</filename>
    </modified>
    <modified>
      <diff>@@ -19,32 +19,5 @@ module Nanite
       &quot;&lt;Actor[#{self.class.name}]: provides=#{provides.map{|n| n.to_s }.join(', ')}&gt;&quot;
     end
   
-    def spawn(arg, *argv, &amp;block)
-      # setup output hash
-      output = {:stdout =&gt; '', :stderr =&gt; ''}
-      default_options = {'stdout' =&gt; output[:stdout], 'stderr' =&gt; output[:stderr]}
-      
-      # add default options to fill output hash
-      if argv.size &gt; 1 and Hash === argv.last
-        argv.last.merge!(default_options)  
-      else
-        argv.push default_options
-      end
-      
-      
-      # catch any spawn errors and return 
-      begin
-        status = Open4::spawn(arg, *argv)
-      rescue Open4::SpawnError =&gt; e
-        raise ActorInternalError, e.message
-      end
-      
-      if block_given?
-        formatted_output = yield(output[:stdout])
-        output[:stdout] = formatted_output
-      end
-      
-      output.merge({:status =&gt; status})
-    end
   end
 end  
\ No newline at end of file</diff>
      <filename>lib/nanite/actor.rb</filename>
    </modified>
    <modified>
      <diff>@@ -7,14 +7,17 @@ end
 require File.dirname(__FILE__) + &quot;/../nanite&quot;
 require File.dirname(__FILE__) + &quot;/../nanite/agent&quot;
 
-name = 'shoes'
+name, pass = 'shoes', 'testing'
 Nanite.identity  = name
 Nanite.default_resources = []
 ARGV.clear
 Thread.new do
   EM.run do
+    AMQP.start :user     =&gt; Nanite.identity,
+               :pass =&gt; pass,
+               :vhost    =&gt; '/nanite'
     Shoes.p &quot;running event loop&quot;
-    Nanite.run_event_loop
+    Nanite.run_event_loop false
   end
 end
 </diff>
      <filename>lib/nanite/client.rb</filename>
    </modified>
    <modified>
      <diff>@@ -8,8 +8,10 @@ module Nanite
     def start(opts={})
       EM.run{
         db = opts.delete(:db)
+        ping_time = opts.delete(:ping_time) || 30
+        heartbeat_time = opts.delete(:heartbeat_time) || 20
         AMQP.start opts
-        MQ.new.rpc('mapper', Mapper.new(db))    
+        MQ.new.rpc('mapper', Mapper.new(db, ping_time, heartbeat_time))    
       }  
     end
   end  
@@ -20,7 +22,9 @@ module Nanite
       p args
     end
     
-    def initialize(db)
+    def initialize(db, ping_time, heartbeat_time)
+      @ping_time = ping_time
+      @heartbeat_time = heartbeat_time
       @db = Nanite::MapperStore.new(db)
       @nanites = @db.load_agents
       log &quot;loaded agents from store&quot;, @nanites.keys
@@ -28,7 +32,7 @@ module Nanite
       @pings = {}
       setup_as_slave
       EM.add_periodic_timer(30) { log &quot;current nanites(#{@nanites.keys.size}):&quot;, @nanites.keys }
-      EM.add_periodic_timer(30) { send_pings if @role == :master }
+      EM.add_periodic_timer(@ping_time) { send_pings if @role == :master }
     end
     
     def promote_to_master
@@ -47,7 +51,7 @@ module Nanite
       @amq.queue(&quot;mapper.slave&quot;,:exclusive =&gt; true).subscribe{ |msg|
         handle_slave_packet(Marshal.load(msg))
       }
-      EM.add_periodic_timer(20) { check_master if @role == :slave }
+      EM.add_periodic_timer(@heartbeat_time) { check_master if @role == :slave }
       check_master
       request_mapper_state
       log &quot;running as slave&quot;
@@ -69,7 +73,7 @@ module Nanite
       ping = Nanite::Ping.new(tok, 'mapper.master.heartbeat', &quot;mapper.slave&quot;)
       @master_pings &lt;&lt; ping
       @amq.queue('mapper.master.heartbeat').publish(Marshal.dump(ping))
-      EM.add_timer(15) do
+      EM.add_timer(@heartbeat_time * 0.66) do
         unless @master_pings.size == 0
           log &quot;no pong from master, promoting myself to master&quot;
           promote_to_master
@@ -155,7 +159,7 @@ module Nanite
         @pings[ping.token] &lt;&lt; ping.to
         @amq.queue(agent).publish(Marshal.dump(ping))
       end
-      EM.add_timer(20) do
+      EM.add_timer(@ping_time * 0.66) do
         if @pings[tok].size == 0
           log &quot;got all pongs&quot; 
         else
@@ -208,7 +212,7 @@ module Nanite
     
     def send_op(op, target)
       log &quot;send_op:&quot;, op, target
-      @amq.queue(target).publish(Marshal.dump(op))
+      @amq.queue(target).publish(Marshal.dump(op), :from =&gt; 'mapper')
     end
         
     def allowed?(from, to)</diff>
      <filename>lib/nanite/mapper.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>7ef29bea1b7b6277438ea039a1ec525c76eef764</id>
    </parent>
  </parents>
  <author>
    <name>Ezra Zygmuntowicz</name>
    <email>ez@engineyard.com</email>
  </author>
  <url>http://github.com/bmizerany/nanite/commit/ba6735ab1b594ec8a0f5cdad330db21d4cb56111</url>
  <id>ba6735ab1b594ec8a0f5cdad330db21d4cb56111</id>
  <committed-date>2008-08-19T17:08:48-07:00</committed-date>
  <authored-date>2008-08-19T17:08:48-07:00</authored-date>
  <message>latest touch ups</message>
  <tree>662abd5fbd49636cb6d9572483da6e64ce0f88eb</tree>
  <committer>
    <name>Ezra Zygmuntowicz</name>
    <email>ez@engineyard.com</email>
  </committer>
</commit>
