On Thu, Dec 16, 2010 at 05:57:16AM -0800, rebo wrote:
> 
> Can someone clarify whether my understanding of the Worker and Engine
> is correct.  Particularly with respect to the case of having a
> separate worker process, from the main engine controls.

Hello Rebo,

welcome to the ruote mailing list.


> Does the separate worker process 'know' what workitems to carry out
> because the engine writes & dispatches this information to the
> storage?

Yes, exactly.


> The worker is then monitoring the storage for this information?

Yes, the workers grabs messages and execute actions according to them.


> What code does the worker actually execute, compared to the process
> that controls the engine? For instance within my rails ruote
> initializer, i am defining storage_participants in a block that doesnt
> get run if it is initialized by a rake task. As set out by ruote-kit:
> 
> unless $RAKE_TASK # don't register participants or set up AMQP in rake
> tasks
> 
>    ... set up participants here.
> 
> end
> 
> So I take it the worker does not 'know' about participant definitions,

Participant registration information is placed in the storage.

Usually the convention is to register via the engine. The workers then just 
fetch the participant list from the storage.

The "unless $RAKE_TASK" that you are seeing is meant to prevent an unnecessary 
re-registration. Re-registration is usually not a problem.


> in which case which process executes custom local participants?

The worker process does.

Your engine and your worker are supposed to have access to the code/class of 
your participants.


> I have read the various pages on the ruote site and browsed the source
> a bit but am still a little confused about how it all works.
> 
> I'm having to use a separate worker process because when running tests
> with ruote as a single process the test-process dies after completion
> and kills the threads spawned by ruote. This leaves the storage in a
> fragile / sometimes broken state.

Why don't you purge the storage before each new test ?

For the ruote functional tests, I tend to do it after though :

  
https://github.com/jmettraux/ruote/blob/ruote2.1/test/functional/base.rb#L44-49


> It would be really useful to have a diagram of the basic program flow,
> when running a separate worker process.

There is a tiny diagram in

  http://jmettraux.wordpress.com/2009/12/31/ruote-2-1-released/

but it's not a flow diagram. Maybe it helps.

This is outdated :

  http://jmettraux.wordpress.com/2008/09/07/how-does-ruote-work/

I won't do a diagram, but maybe some pseudo-code could help :

---8<---
class Worker
  def run
    loop do
      pick message
      if message.action == 'launch'
        create expression from message.tree
        put apply message
      elsif message.action == 'reply'
        get expression from storage
        expression.apply
      elsif message.action == 'cancel'
        get expression from storage
        expession.cancel
      end
    end
  end
end

class Engine
  def launch (pdef)
    put launch message
  end
  def cancel (wfid)
    put cancel message
  end
  def processes
    get expressions from storage
    display expressions ordered by wfid (process instance)
  end
end

class ParticipantExpression
  def apply
    push workitem to participant
  end
  def reply
    put reply message
  end
end
--->8---

The basic program flow is the same. There is no difference between running a 
worker within the engine or externally to it.

In fact the Engine should better be renamed to Dashboard so that everybody 
understands that the Engine is the system as large (dashboards + workers). 
Sorry for the confusion but I was/am not smart enough to get it right the first 
time.


I hope this helps, questions are welcome, best regards.

-- 
John Mettraux - http://jmettraux.wordpress.com

-- 
you received this message because you are subscribed to the "ruote users" group.
to post : send email to [email protected]
to unsubscribe : send email to [email protected]
more options : http://groups.google.com/group/openwferu-users?hl=en

Reply via email to