TODO.txt in ruote-2.2.0 vs TODO.txt in ruote-2.3.0

- old
+ new

@@ -1,11 +1,10 @@ [o] port load26 (requires BlockParticipant) [o] logger service [o] test logger [o] object full_dup -[o] engine#remove_service [o] :receive or :receive_back for when workitems come back from participant [o] emit :processes :launch :wfid [o] emit :processes :terminate :wfid only [o] arch doc [o] verbose always on @@ -137,11 +136,11 @@ [x] if : _if "v:v" => "true" ? NO => evokes assignement [x] deferred apply technique / not OK, with EM and next_tick / pro [o] reserve : perhaps it's better to have an atomic get and set variable... [o] clean up lookup_var/set_var into locate_var/lookup_var/set_var [x] Sun Hao's up-to-date-tree idea ${f:participant_name} ps#resolved_tree -[o] error : when an error expression is cancelled, should the err get remove +[o] error : when an error expression is cancelled, should the err get removed from the process status ? yes. [o] file logger / history service [o] engine.process_history(wfid) [o] add_branch :times/:branches [o] cursor : :break_if / :break_unless @@ -285,80 +284,95 @@ like WaitLogger only remembers 147 msgs... [o] StorageHistory : add a method to list all wfids (for by_wfid) [o] DefaultHistory : add a method to list all wfids (for by_wfid) [x] issue with ruote-kit and inpa participants... [x] .nil? .empty? .set? for "${x}.nil?" +[o] BlockParticipant : proc.to_source thanks to sourcify +[o] register :overwrite { ... } ? (wipes all the participants) +[o] pause engine +[o] pause process instance +[o] filter : blank? equivalent (maybe it already exists) +[o] eft_18 weak with jruby-1.5.1 and 1.5.6 +[o] participant : consume/cancel/accept?/on_reply without params +[o] participant : consume -> on_workitem +[o] remove abort_on_exception=true +[o] concurrence / concurrent_iterator : merge_type => 'discard' / 'ignore' + keep track of the first "process sub id" ? +[o] register :toto, :accept? => lambda { |workitem| ... } +[o] register :toto, :do_not_thread => lambda { |workitem| ... } +[o] :on_timeout => :rewind (break, jump to x)... +[o] :on_error => :rewind (break, jump to x)... +[o] worker identification/registration + http://groups.google.com/group/openwferu-users/browse_thread/thread/c51b94fb8bb685da +[o] worker shutdown initiated by engine (same thread) +[o] set :var => 'y' { '2342342' } +[o] wfid generator UTC? +[o] iterator: drop the need for the sequence --> implicit sequence +[o] citerator: drop the need for the sequence --> implicit sequence +[o] move test/unit/storage[s].rb to test/functional/ +[x] exp : defined (not really necessary) +[x] exp : quote (not really necessary) +[x] exp : field / attribute (not really necessary) +[x] exp : variable (not really necessary) +[o] expression :concurrent => true idea (reply immediately, cancellable) + `- covered by :flank => true +[o] concurrence: allow empty +[o] citerator: allow empty -[ ] exp : exp (restricted form of eval ?) (is it apply ?) +[ ] exp : at expression ? comparable to cron +[x] exp : exp (restricted form of eval ?) (is it apply ?) [x] exp : filter [x] exp : filter-definition [x] exp : parameter [ ] exp : log : or could it be a participant ? +[x] wait_for(:participant) what about 'dispatched' instead of 'dispatch' ? -[ ] exp : defined (not really necessary) -[ ] exp : quote (not really necessary) -[ ] exp : field / attribute (not really necessary) -[ ] exp : variable (not really necessary) - [ ] define without name (__result__) [ ] participant dispatch thread throttling ? [ ] tailcall + - is it really necessary? The storage is the limit. + [ ] subprocesses participants (alias ?) [ ] recursion : should cope with modified trees 'main' => :tree ?? -[ ] set :var => 'y' { '2342342' } - -[ ] pause engine -[ ] pause process instance - | - would it mean something like placing a paused list in the storage - and fetching it all the time ? - [ ] file/fs_listener [example] ? [ ] concurrence / concurrent_iterator : merge plugin ? use participant for that ? [ ] restore : implement merge strategies [ ] one file, no multi-process, persistence ? LateHashStorage ? +[ ] one file per process ? [ ] apply : ruby or xml (instead of just ast) ? -[ ] unify ruote/util/json and ruote/util/serializer - [ ] history.to_tree ? [ ] Ruote.process_definition ... Ruote.method_missing or sequence ? -[ ] concurrence / concurrent_iterator : merge_type => 'discard' / 'ignore' - keep track of the first "process sub id" ? - [ ] @children diff/undiff idea ? -[ ] :on_timeout => :rewind (break, jump to x)... -[ ] :on_error => :rewind (break, jump to x)... - +[o] cursor : 'reset' command ? +[ ] cursor : 'restart' alias for 'reset' ? [ ] repeat : have a counter in a variable (:to => x maybe) (subprocessid ?) [ ] engine.cancel_forgotten_children(wfid) ? [ ] port subprocess on_cancel test from ruote 0.9 http://groups.google.com/group/openwferu-users/t/75f02bdadf7b93eb [ ] double-check on_cancel rewrite (ft_1_process_status) [ ] verify get_last/get_raw logic, no + 0.0001... -[ ] spare 1 get_msg by caching msg (but keep 'deleting') +[x] spare 1 get_msg by caching msg (but keep 'deleting') [ ] [un]set_var : via message ? should be ok like that... Not much traffic there [ ] empty iterator or concurrent-iterator, log ? crash ? empty while... -[ ] remove abort_on_exception=true - [ ] shell ? irb ? Shell.new(storage) [ ] focus on fulldup or json.dup (via fulldup ?) [ ] should __error__ contain the tree ? [ ] engine.on_cancel = 'participant_name' // 'subprocess_name' @@ -370,12 +384,10 @@ else-ref... list of participants... ref="alpha && bravo", ref="alpha||bravo" (|| parallel :( ) [ ] LocalParticipant def consume; handle; reply; end -[ ] find better solution than "get all schedules" - [ ] worker : minuteman, make it cron triggerable trap SIGUSR1 or USR2 maybe it's expensive to fire a [worker] process each minute have to write the $$ (pid) somewhere for cron to pick it up @@ -385,11 +397,11 @@ [ ] participant 'toto', :while => '${not_good}' (really ?) [ ] re_apply_stalled http://groups.google.com/group/openwferu-users/browse_thread/thread/ff29f26d6b5fd135 -[ ] engine.purge (arts style : worker.@msgs = []) +[ ] engine.purge (arts style: worker.@msgs = []) [ ] http://ruote.rubyforge.org/irclogs/ruote_2010-07-07.txt configuration issue maybe fail with a good error message when registering service... @@ -404,12 +416,10 @@ [ ] a run of ruby -w [x] cursor : previous_command field ? not really necessary with :break_if => x -[ ] register :overwrite { ... } ? (wipes all the participants) - [ ] storage_participant.by_participant([ a, b, c, d ], opts) storage_participant.by_participant(a, b, c, d, opts) too leverage things like http://wiki.apache.org/couchdb/HTTP_view_API#Querying_Options 2.1.12 @@ -419,28 +429,25 @@ [ ] engine/receiver #reply(workitem or fexp or fei) ? [ ] workitem : short constructor, cf http://groups.google.com/group/openwferu-users/browse_thread/thread/c52d207d85e4b93e [ ] engine.force_reply_to_parent(fei) ? but, this is a cancel_expression(fei) -[ ] at expression ? :names :wait, :at - [ ] concurrence : add_child ? How would that impact concurrent_iterator's add_branches ? [ ] detach / attach segments of processes -[ ] clone process ? (could be used by {de|at}tach) +[x] clone process ? (could be used by {de|at}tach) + what about participants ? [ ] console for InformatiQ / console or dashboard or tool ? [ ] pooltool.ru : there are already storage copy methods -[ ] BlockParticipant : proc.to_source thanks to sourcify - [o] doc : enhance doc on conditional (and, empty, null, ...) [o] doc : document engine.on_{error|terminate} [o] doc : document on_error = retry and on_error = pass [ ] doc : add piece of doc about running workers on their own -[ ] listen to errors {in|out} +[o] listen to errors {in|out} well... there is already on_error... but on_error is for nested stuff... [o] listen to tags {entering|leaving} [x] listen to launch/terminate, listen :process => :x, :upon => 'launching' you can now set :tag on a subprocess' define @@ -448,32 +455,66 @@ not really necessary... there is already 'once' (when) [o] listen condition ? :when => '${x} == y', :constraint, :only, ... it's :where and it's not documented :-( but it's tested :-) [o] engine#on_terminate, similar to on_error [o] let engine#on_error use svc/tracker.rb instead of 'notifications' +[ ] process supervise other process, listen... + launch a process with a designed 'supervisor' ? + listen to termination, listen to error, for a given process ? +[ ] events for put_schedule/delete_schedule/trigger_schedule +[ ] use 'raise' instead of error_handler.action_handle + (ruote-amqp, ruote-beanstalk) + [ ] ruote cheatsheet [ ] ruote slides -[ ] process supervise other process, listen... - launch a process with a designed 'supervisor' ? - [x] ci : ruote-amqp -[ ] ci : ruote-mongodb +[o] ci : ruote-mon [ ] ci : jruby -[ ] StorageParticipant#reply : raise if workitem not found ? -[ ] StorageParticipant#reply : accept fei ? +[ ] ruote-doozer? + +[ ] StorageParticipant#proceed : raise if workitem not found ? +[ ] StorageParticipant#proceed : accept fei ? [ ] Engine#reply(wi), should remove from storage... -[ ] eft_18 weak with jruby-1.5.1 and 1.5.6 +[o] @engine.context['participant_in_variable_enabled'] = true +[ ] @engine.register(x, :trusted => true, &block) +[ ] security service ? context['x'] but then, more advanced behaviours +[ ] subaltern -[ ] participant : consume/cancel/accept?/on_reply without params +[x] investigate 1.9's json +[ ] Parslet for conditions? +[ ] subaltern for conditions? +[ ] enhance radial/Parslet error messages (cf Raphael) -[ ] worker identification/registration - http://groups.google.com/group/openwferu-users/browse_thread/thread/c51b94fb8bb685da -[ ] worker shutdown initiated by engine (same thread) +[ ] concurrence: reply_to_parent instead of cease when no more children ? + https://github.com/jmettraux/ruote/blob/1f9add961f90049ea951b8940622fbe8d136c45f/lib/ruote/exp/fe_concurrence.rb#L304-310 -[ ] wait_for(:participant) what about 'dispatched' instead of 'dispatch' ? +[ ] cursor: deeper jumps + http://groups.google.com/group/openwferu-users/browse_thread/thread/a973f0ea5fbb1a96 -[ ] expression :concurrent => true idea (reply immediately, cancellable) +[ ] on_cancel like on_error expression +[ ] on_timeout like on_error expression (or make timeout an error) + +[ ] #get_msgs to cover #get_schedules (make #get_schedules empty) + | | | +[ ] find better solution than "get all schedules" + ... or discard get_schedules completely + +[ ] eft_6_concurrence : 2 Fs when running standalone... + +[ ] get rid of the "web" test[s] + +[.] remove #dump from all storage implementations + +[ ] engine#remove_service + +== 3.0 +[ ] deprecate get_schedules + (let the storage include triggered schedules as msgs) +[ ] deprecate "trackers as variables" + +== 4.0 +[ ] deprecate listen (await?) or make it an alias of await?