TODO.txt in ruote-2.1.11 vs TODO.txt in ruote-2.2.0
- old
+ new
@@ -77,11 +77,10 @@
[o] engine.processes()
[o] kill_process != cancel_process (need a way to not trigger on_cancel)
[o] pdef.to_dot (a beginning)
[o] @in_cancel, @in_error --> @state (active|cancelling|killing)
[o] wait
-[o] listen
[o] Jason Allen's check about concurrence
[x] on_cancel => 'error' NO
[o] event on [un]setting variable
[o] condition : != ~= >= ....
[o] fs_participant
@@ -232,56 +231,95 @@
[o] ParticipantEntry is a bit brittle when editing engine.participant_list
[o] use blank slate for process definition
[o] lib/ruote/svc for treechecker, error_handler and co (tree_checker)
[o] part/template.rb, use Rufus::Json.pretty_encode
[o] storage.clear OR storage.purge! OR both (cf discussion with marc_lee) !!
+[o] Nathan : throw error on ${ruby:...} when ruby_eval_allowed is not set
+[o] engine.kill and engine.cancel should accept fei, fexp or wfid
+[o] participant params['tags'] = [ a, b, c ] ? costly (x expressions to read)
+ but passing them in the workitem could be fun
+ field['__tags__'] ?
+[x] use treetop for more complex "${f:x} AND ${f:y}" ?
+ (systems like Rails require it anyway)
+ NO : using ruby_parser instead
+[o] TreeChecker : exclude_fvccall :at_exit
+[o] _if '${f:x} == ${f:y} || ${f:x} == ${f:z}'
+[x] beanstalk [as a] workqueue ?
+[o] tree.to_xml (require builder ?)
+[o] tree.to_ruby
+[o] __command__ + tag (rewind that cursor there, not the current one)
+[o] rewind 'x' where x is a tagname (command x)
+[o] solve the ps#root_expression_for(fei) dilemma
+[x] condition : "${f:x} [is] empty" / this one is hard
+[o] when : add test for cancelling when child has been triggered / is running
+[o] engine.ps(wfid)
+[x] alias "when" to "whenever" ?
+[x] alias "when" to "on" / "upon"
+[o] alias "when" to "once" "once x == y do"
+[o] condition : "${'x} [is] empty" since ${array} => "[]"
+[x] simple worker hooks ? (as discussed with @hassox)
+ on_terminate... ? only works in the same process as the worker
+ only for tests...
+[o] on_error => retry / pass
+[o] workitem : #as_json and #from_json
+ since ruote depends on rufus-json...
+[x] engine.on_error = 'participant_name' // 'subprocess_name'
+ done at : http://github.com/jmettraux/ruote/commit/50292d954ff877f1f6615022216f346a7001b483
+ `--> reverting that for now, too dangerous
+[o] process_count and error_count ? (processes(:count => true))
+[o] exp : case (is it necessary ?) (guards ?) (hard for ruote-fluo)
+[o] exp : lose
+[o] conditional : rprefix ! ${r:x} is perhaps sufficient
+[o] implement kill_process! (kill_expression! ?)
+[o] /!\ resurrect CI
+[o] user3 :rif => "!wi.fields['approvers'].include?('user3')" : 'in' operator
+ "${customer} in [ 1, 2, 3 ]"
+ "${customer} in { 'x' => 1 }"
+[o] rename 'parser' to 'reader'
+[o] ft_42 : maybe require storage to output ids already sorted
+[o] Participant#rtimeout(workitem=nil)
+[o] alias concurrent-iterator to citerator
+[o] like we have a default WaitLogger, why not have a default HistoryLogger ?
+ so that context.history always returns something...
+ the default history would be storage based but with LRU turned on
+ for the HashStorage one...
+ 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?"
-[ ] exp : exp (restricted form of eval ?)
-[ ] exp : case (is it necessary ?)
-[ ] exp : filter
-[ ] exp : filter-definition
-[x] exp : lose ?
+[ ] 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 ?
[ ] exp : defined (not really necessary)
[ ] exp : quote (not really necessary)
[ ] exp : field / attribute (not really necessary)
[ ] exp : variable (not really necessary)
-[ ] conditional : rprefix ! ${r:x} is perhaps sufficient
-
[ ] define without name (__result__)
-[ ] pooltool.ru
-
[ ] participant dispatch thread throttling ?
[ ] tailcall
[ ] subprocesses participants (alias ?)
-[ ] __command__ + tag (rewind that cursor there, not the current one)
-
-[ ] beanstalk [as a] workqueue ?
-
[ ] recursion : should cope with modified trees 'main' => :tree ??
-[ ] user3 :rif => "!wi.fields['approvers'].include?('user3')" : 'in' operator
-
[ ] 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] ?
-[ ] tree.to_xml (require builder ?)
-[ ] tree.to_rb
-
[ ] concurrence / concurrent_iterator : merge plugin ?
use participant for that ?
[ ] restore : implement merge strategies
@@ -298,110 +336,144 @@
[ ] concurrence / concurrent_iterator : merge_type => 'discard' / 'ignore'
keep track of the first "process sub id" ?
[ ] @children diff/undiff idea ?
-[ ] write doc about engine options (multi-process !)
-[ ] _if '${f:x} == ${f:y} || ${f:x} == ${f:z}'
-
-[ ] document the dollar notation / substitution / extrapolation
-
-[ ] condition : "${f:x} [is] empty" / this one is hard
-
-[ ] ruote/exp/fe_set.rb:147: warning: already initialized constant PREFIX_REGEX
-
-[ ] implement kill_process! (kill_expression! ?)
-
-[ ] engine.force_reply_to_parent(fei) ?
-
[ ] :on_timeout => :rewind (break, jump to x)...
-[ ] rewind 'x' where x is a tagname (command x)
+[ ] :on_error => :rewind (break, jump to x)...
[ ] repeat : have a counter in a variable (:to => x maybe) (subprocessid ?)
-[ ] when : add test for cancelling when child has been triggered / is running
-
[ ] 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...
-[ ] case exp : smarter one ?
[ ] 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...
-[ ] at expression ?
[ ] remove abort_on_exception=true
[ ] shell ? irb ? Shell.new(storage)
[ ] focus on fulldup or json.dup (via fulldup ?)
-[ ] listen to participants/errors/tags {in|out}
-
-[x] engine.on_error = 'participant_name' // 'subprocess_name'
- done at : http://github.com/jmettraux/ruote/commit/50292d954ff877f1f6615022216f346a7001b483
- `--> reverting that for now, too dangerous
-
-[ ] should __error__ contain the tree ?
+[ ] should __error__ contain the tree ?
[ ] engine.on_cancel = 'participant_name' // 'subprocess_name'
+ bof
-[ ] "business days" plugin
-
-[ ] issue with ruote-kit and inpa participants...
-
[ ] participant :ref => '${f:nada}', :or => 'xyz'
(look at OpenWFE manual, this feature already existed in there)
http://www.openwfe.org/manual/ch06s02.html#expression_participant
else-ref... list of participants...
ref="alpha && bravo", ref="alpha||bravo" (|| parallel :( )
[ ] LocalParticipant def consume; handle; reply; end
-[ ] lib/ruote/part/participant_list.rb l176 better error message !
-
[ ] 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
-[ ] detach / attach segments of processes
-[ ] clone process ? (could be used by {de|at}tach)
-
-[ ] dollar.rb ${timestamp} ?
-
[ ] toto :task => 'maw the lawn', :within => '3d'
+ alias to timeout
+[ ] "business days" plugin
+[ ] participant 'toto', :while => '${not_good}' (really ?)
-[ ] solve the ps#root_expression_for(fei) dilemma
-
[ ] re_apply_stalled
http://groups.google.com/group/openwferu-users/browse_thread/thread/ff29f26d6b5fd135
[ ] 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...
-[ ] participant 'toto', :while => '${not_good}' (really ?)
-
[ ] engine.register_from_dir() have a way to re-evaluate the dir
[o] OR remove engine.register_from_dir()
[o] AND provide a better register &block
[o] provide a mean for a participant to reject a workitem (intra plist)
on_reply and now filter ?
-[ ] rw : upgrade [register_]participant documentation
-
[ ] StorageParticipant#by_store[_name]
maybe : reform the store_name system !
-[ ] rename 'parser' to 'reader'
+[ ] a run of ruby -w
-[ ] process_count and error_count ? (processes(:count => true))
-[ ] engine.ps(wfid) (shortcut ?)
+[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
+
+[ ] receiver/base.rb : fexp.lookup_variable --> lookup_variable ?
+
+[ ] 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)
+
+[ ] 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}
+ 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
+[ ] listen to [un]set variable (the events are already in there)
+ 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'
+
+[ ] ruote cheatsheet
+[ ] ruote slides
+
+[ ] process supervise other process, listen...
+ launch a process with a designed 'supervisor' ?
+
+[x] ci : ruote-amqp
+[ ] ci : ruote-mongodb
+[ ] ci : jruby
+
+[ ] StorageParticipant#reply : raise if workitem not found ?
+[ ] StorageParticipant#reply : accept fei ?
+[ ] Engine#reply(wi), should remove from storage...
+
+[ ] eft_18 weak with jruby-1.5.1 and 1.5.6
+
+[ ] participant : consume/cancel/accept?/on_reply without params
+
+[ ] worker identification/registration
+ http://groups.google.com/group/openwferu-users/browse_thread/thread/c51b94fb8bb685da
+[ ] worker shutdown initiated by engine (same thread)
+
+[ ] wait_for(:participant) what about 'dispatched' instead of 'dispatch' ?
+
+[ ] expression :concurrent => true idea (reply immediately, cancellable)