On Thu, Nov 03, 2011 at 06:16:20AM -0700, Ivan wrote: > > I need your help, about my server. > > One part is based on sinatra and ruote, mostly. > I run the server with Thin. > I'm using HashStorage for ruote.
Hello Ivan, what version of Ruby ? > In it, I'm using ruote for managing user workflows, eg. user > registration: > > ----------->>> > Ruote.process_definition :name => "User registration workflow" do > sequence do > participant 'process user registration' > > participant 'send activation mail' > > concurrence do > sequence do > participant :ref => 'wait for confirmation', :tag => > 'waiting_4_confirmation' > cancel :ref => 'waiting_24' > end > sequence do > wait :for => '24h', :tag => 'waiting_24' > cancel :ref => 'waiting_4_confirmation' > end > end > > participant 'finalize registration on server' > end > end > <<<----------- > > I'm not sure if it's the best solution in the first place. You could simplify: ---8<--- Ruote.process_definition => 'User registration' do process_user_registration send_activation_mail wait_for_confirmation :timeout => '24h' finalize_registration end) --->8--- The timeout attribute will cancel the expression it adorns after the given time. When it times out, it adds a __timed_out__ field to the workitem (useful for your "finalize_registration" step). http://ruote.rubyforge.org/common_attributes.html > Anyways, when i launch this workflow, it steps from participant from > participant extremely slowly; > it takes seconds to step to the 'send activation mail' participant, > but it's just a simple string output (right now): > > ----------->>> > engine.register_participant 'process user registration' do | > workitem| > puts '>>> process user registration' > end > <<<----------- It might be interesting to turn the "noisy" output of the engine (engine.noisy = true). > Then it takes also a lot of time, about 30 sec, to load the whole > concurence definition, where it waits for 24 hours or the user > confirmation (a Mutex). Do you mean it takes 30 seconds to reach the first of the two participants in the concurrence ? > And here's something interesting: > If I access any part of the engine class, eg. engine.processes.inspect > to see what's changed, it just takes the step instantly, to one > participant to the other. (Or building the expression tree: when it's > built up until the concurence definition, there are 7 expressions in > the process). > So here it doesnt take seconds to move. If I understand correctly, ruote is very slow unless you ask it what's going on ? > Have you ever experienced anything like this, do you have a solution? > Thank you! I have had various slow experiences but never with the HashStorage. Based on your input, I prepared this small reproduction of your issue: https://github.com/jmettraux/ivan I experienced no slowness at all. Maybe you can fork that project and "make it slow" so that I can help you. Best regards, -- John Mettraux - http://lambda.io/processi -- 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
