updated on Thu Jan 19 20:01:47 UTC 2012
[aur-mirror.git] / clustershell / clustershell.changelog
blob82d966f757a497e6b34d3505199d69f553e0ba5e
1 2011-06-09 S. Thiell <stephane.thiell@cea.fr>
3         * Version 1.5.1 released.
5         * NodeSet.py: Added workaround to allow pickling/unpickling of RangeSet
6         objects for Python 2.4 (ticket #156).
8 2011-06-08 S. Thiell <stephane.thiell@cea.fr>
10         * Version 1.5 released (Sedona release).
12 2011-06-07 S. Thiell <stephane.thiell@cea.fr>
14         * MsgTree.py: Improved MsgTree API to lighten updates of keys associated
15         to tree elements (ticket #131).
17         * CLI/Clubak.py: Updated for new MsgTree API and added a -F/--fast switch
18         to enable preloading of whole messages to speed up processing, but with
19         an increase of memory consumption (ticket #131).
21 2011-05-31 S. Thiell <stephane.thiell@cea.fr>
23         * NodeSet.py: Optimized NodeSet.fromlist() method by adding updaten()
24         method which is quite O(num_patterns).
26 2011-05-29 S. Thiell <stephane.thiell@cea.fr>
28         * NodeSet.py: Fixed missing autostep check in _fold() which could lead to
29         autostep not being taken into account (ticket #150).
31         * Worker/Ssh.py: Fix scp user option in Scp class (ticket #152).
33         * Engine/*.py: Internal engine design change: do not retry engine
34         eventloop on any EngineClient registration changes, so process more events
35         by chunk (should be faster) and add a loop iteration counter to work
36         around internally re-used FDs (finalize ticket #153).
38 2011-05-26 S. Thiell <stephane.thiell@cea.fr>
40         * Worker/EngineClient.py: Enable fastsubprocess module, and use file
41         descriptors instead of file objects everywhere (ticket #153).
43         * Worker/fastsubprocess.py: Faster, relaxed version of Python 2.6
44         subprocess.py with non blocking fd support.
46 2011-05-15 S. Thiell <stephane.thiell@cea.fr>
48         * Engine/Engine.py: Improved start_all() fanout algorithm by adding a
49         separate pending clients list.
51         * Created 1.5 branch.
53 2011-03-19 S. Thiell <stephane.thiell@cea.fr>
55         * Version 1.4.3 released.
57         * CLI/Nodeset.py: Make stdin '-' keyword work when used for -i/x/X
58         operations (ticket #148).
60         * CLI/Clush.py: Fixed issue when using clush -bL (missing argument) due to
61         latest 1.4.2 changes. Added tests/ClushScriptTest.py to detect that in
62         the future (ticket #147).
64 2011-02-15 S. Thiell <stephane.thiell@cea.fr>
66         * Version 1.4.2 released.
68 2011-03-12 S. Thiell <stephane.thiell@cea.fr>
70         * NodeSet.py: Fixed issues with objects copying, so got rid of copy module
71         and added optimized RangeSet.copy() and NodeSet.copy() methods (ticket
72         #146).
74 2011-03-09 S. Thiell <stephane.thiell@cea.fr>
76         * CLI/Clush.py: Added running progress indicator for --[r]copy commands.
78 2011-03-08 S. Thiell <stephane.thiell@cea.fr>
80         * CLI/Clush.py: Improved -v switch (closes ticket #100: print live node
81         output plus noderange-grouped output at the end).
83         * CLI/Clubak.py: Add -T,--tree message tree mode option (ticket #144).
85         * MsgTree.py: Class initialization variant (trace mode) to keep track of
86         old keys/nodes for each message (part of #144).
88 2011-03-06 S. Thiell <stephane.thiell@cea.fr>
90         * CLI/Clush.py: Implement clush -L (not -bL) to order output by nodename,
91         like clubak -L (ticket #141).
93         * CLI/Nodeset.py: Added -I/--slice command option to select node(s) by
94         index(es) or RangeSet-style slice (ticket #140).
96         * CLI/Nodeset.py: Remove pending limitation when using -[ixX] operations
97         with nodesets specified by -a (all) or through stdin.
99         * NodeSet.py: Add RangeSet.slices() method.
101 2011-03-05 S. Thiell <stephane.thiell@cea.fr>
103         * NodeSet.py: Internal changes to use slice type to represent ranges in
104         RangeSet. Changed RangeSet.add_range() 'stop' argument semantic, it is now
105         conforming to range()'s one.
107         * NodeSet.py: Fix issue with in-place operators returning None. Added
108         tests.
110 2011-02-27 S. Thiell <stephane.thiell@cea.fr>
112         * NodeSet.py: Fix issue when using negative index or negative slice
113         indices for RangeSet and NodeSet.
115 2011-02-24 S. Thiell <stephane.thiell@cea.fr>
117         * CLI/Nodeset.py: Add -ll and -lll extended options to list corresponding
118         group nodes, and also group node count (ticket #143).
120 2011-02-13 S. Thiell <stephane.thiell@cea.fr>
122         * Version 1.4.1 released.
124 2011-02-08 S. Thiell <stephane.thiell@cea.fr>
126         * CLI/Config.py: Add fd_max integer parameter to set the max number of
127         open files (soft limit) permitted per clush process. This will fix an
128         issue on systems where hard limit is not reasonable.
130 2011-02-07 S. Thiell <stephane.thiell@cea.fr>
132         * CLI/OptionParser.py: Add clush -E <engine> hidden option to enforce a
133         specific I/O events engine (should not be needed, but can be useful for
134         testing). Improve engine selection error handling.
136 2011-02-06 S. Thiell <stephane.thiell@cea.fr>
138         * Engine/Select.py: New select()-based engine (from H. Doreau, ticket #8).
140         * CLI/{Clush,Display}.py: Do not display exit code with clush when -qS is
141         specified (ticket #117).
143         * CLI/Clush.py: Allow clush to run without argument when stdin is not a
144         tty, by disabling ssh pseudo-tty allocation. You can now type `echo uname
145         | clush -w <nodes>` (ticket #134).
147         * Worker/Ssh.py: Fix issue when more than one ssh options are specified
148         with -o or in clush.conf (ticket #138).
150 2011-02-05 S. Thiell <stephane.thiell@cea.fr>
152         * CLI/Clush.py: Fix issue when executing local command with clush -b in
153         interactive mode (eg. !uname).
155         * Worker/Worker.py: Define new current_node, current_msg, current_errmsg
156         and current_rc Worker variables, updated at each event (last_read(),
157         last_node() and last_retcode() will be deprecated from version 2.0).
159         * Worker/*.py: Performance: removed _invoke() indirections when generating
160         events + local variables optimization.
162         * Task.py: Performance: replaced _TaskMsgTree metaclass by direct calls to
163         MsgTree methods + local variables optimization.
165         * Worker/Ssh.py: Local variables optimization.
167         * CLI/Clush.py: Do not disable internal messages gathering when using -bL
168         for proper display after Ctrl-C interruption (#133).
170 2011-01-15 S. Thiell <stephane.thiell@cea.fr>
172         * Version 1.4 released.
174         * NodeSet.py: Add docstring for NodeSet string arithmetics (, ! & ^),
175         which is also called extended string pattern (trac ticket #127).
177 2010-12-14 S. Thiell <stephane.thiell@cea.fr>
179         * Version 1.4 beta 1 released.
181         * CLI/Display.py: In buffer header (for -b/-B without -L), print node
182         count in brackets if > 1 and enabled by configuration (trac ticket #130).
183         
184         * CLI/Config.py: Add boolean node_count param (part of trac ticket #130).
186 2010-12-08 S. Thiell <stephane.thiell@cea.fr>
188         * CLI/Nodeset.py: Support nodeset --split option (trac ticket #91).
190         * CLI/OptionParser.py: Add --split option (part of #91).
192         * NodeSet.py: Avoid overflow by returning truncated results when there are
193         not enough elements in the set for RangeSet.split(n) and NodeSet.split(n).
195 2010-12-02 S. Thiell <stephane.thiell@cea.fr>
197         * NodeSet.py: Much improved algorithm for RangeSet.add_range().
199 2010-11-30 S. Thiell <stephane.thiell@cea.fr>
201         * Worker/{Popen,Pdsh,Ssh}.py: Tell system to release associated resources
202         with the child process on abort.
204 2010-11-30 S. Thiell <stephane.thiell@cea.fr>
206         * Worker/Popen.py: Fix stderr pipe leak (trac ticket #121).
207         * Worker/Ssh.py: Fix stderr pipe leak (trac ticket #121).
208         * Worker/Pdsh.py: Fix stderr pipe leak (trac ticket #121).
210         * tests/TaskRLimitsTest.py: New test.
212 2010-11-28 S. Thiell <stephane.thiell@cea.fr>
214         * NodeSet.py: Optimized NodeSet.__getitem__() (trac ticket #18).
216 2010-11-25 S. Thiell <stephane.thiell@cea.fr>
218         * NodeSet.py: Slice-optimized version of RangeSet.__getitem__().
220 2010-11-03 S. Thiell <stephane.thiell@cea.fr>
222         * CLI/Clush.py: Added --rcopy support (trac ticket #55).
224         * Task.py: Added rcopy() method (part of trac ticket #55).
226         * Worker/Pdsh.py: Support for reverse file copy (part of trac ticket #55).
228         * Worker/Ssh.py: Support for reverse file copy (part of trac ticket #55).
230 2010-11-02 S. Thiell <stephane.thiell@cea.fr>
232         * Worker/Ssh.py: Fix missing ev_start trigger when using task.copy() (trac
233         ticket #125).
235 2010-11-01 S. Thiell <stephane.thiell@cea.fr>
237         * CLI/OptionParser.py: Make -c/--copy an option that can take several
238         source arguments.
240         * CLI/Clush.py: Improve signal handling (trac ticket #65).
242 2010-10-25 S. Thiell <stephane.thiell@cea.fr>
244         * CLI/Clush.py: Add launched-in-background checks before enabling user
245         interaction (fix trac ticket #114).
247 2010-10-20 S. Thiell <stephane.thiell@cea.fr>
249         * Task.py: Docstring improvements (trac tickets #120, #122).
251 2010-10-20 A. Degremont <aurelien.degremont@cea.fr>
253         * NodeSet.py: Optimize NodeSetBase iteration.
255 2010-10-17 S. Thiell <stephane.thiell@cea.fr>
257         * Engine/Factory.py: Re-enable EPoll engine (closes trac ticket #56).
259         * Engine/EPoll.py: Cleanup and minor fix in the way event masks are
260         modified.
262         * CLI/Clush.py: Changed the way of reading stdin, which is now based on
263         blocking reads using a specified thread and thread-safe messaging with
264         acknowledgement using a task port (part of trac ticket #56).
266 2010-10-11 S. Thiell <stephane.thiell@cea.fr>
268         * Worker/Worker.py: Add Worker.abort() base method and ensure proper
269         implementation in all workers (trac ticket #63).
271 2010-10-10 S. Thiell <stephane.thiell@cea.fr>
273         * Worker/Worker.py: WorkerBadArgumentError exception is now
274         deprecated, use ValueError instead. Also added exception message in
275         each worker (trac ticket #116).
277 2010-10-01 A. Degremont <aurelien.degremont@cea.fr>
279         * Task.py: Add Task.run() new method (trac ticket #119).
281 2010-09-28 S. Thiell <stephane.thiell@cea.fr>
283         * CLI/OptionParser.py: Do not allow option value starting with '-' in some
284         cases.
286 2010-09-26 S. Thiell <stephane.thiell@cea.fr>
288         * CLI: Package created.
290 2010-09-03 S. Thiell <stephane.thiell@cea.fr>
292         * Worker/Ssh.py: Fix issue with clush -l USER by separating underlying ssh
293         "-l USER" in two shell arguments (trac ticket #113).
295 2010-08-31 S. Thiell <stephane.thiell@cea.fr>
297         * scripts/clush.py: Live per-line gathering (-bL mode) improvements.
299         * Task.py: Fixed Task.timer() when called from another thread - it used to
300         return None (trac ticket #112).
302 2010-08-29 S. Thiell <stephane.thiell@cea.fr>
304         * Task.py: Add docstring for timer's autoclose feature (trac ticket #109).
306         * Worker/Worker.py: Attribute 'last_errmsg' not properly initialized (trac
307         ticket #107).
309         * setup.py: Switch to setuptools.
311     * clustershell.spec.in: Fix issue on el5 with if condition when defining
312         python_sitelib.
314 2010-08-26 S. Thiell <stephane.thiell@cea.fr>
316         * Packaging automation engineering and improved specfile.
318         * License files converted to UTF-8.
320 2010-07-27 S. Thiell <stephane.thiell@cea.fr>
322         * Version 1.3 released.
324 2010-07-21 S. Thiell <stephane.thiell@cea.fr>
326         * Version 1.3 RC 2 released.
328         * NodeSet.py: Like in some previous version, support None as argument for
329         most methods (trac ticket #106).
331 2010-07-16 S. Thiell <stephane.thiell@cea.fr>
333         * scripts/clush.py: Fix uncaught exceptions introduced in 1.3 RC 1 (trac
334         ticket #105).
336 2010-07-12 S. Thiell <stephane.thiell@cea.fr>
338         * Version 1.3 RC 1 released.
340         * Task.py: Raise proper KeyError exception in Task.key_retcode(key) when
341         key is not found in any finished workers (trac ticket #102).
343 2010-07-06 S. Thiell <stephane.thiell@cea.fr>
345         * Task.py: Added documentation for reserved set_default() and set_info()
346         keys (trac ticket #101).
348         * scripts/clubak.py: Merge latest code display changes made on clush to
349         clubak, including "--color={never,always,auto}" (trac ticket #89). Updated
350         documentation accordingly.
352 2010-06-29 H. Doreau <henri.doreau@gmail.com>
354         * Worker/Pdsh.py: removed obsolete _read() and _readerr() methods that
355         overrode EngineClient methods without raising an EOFException when
356         read() reads nothing (trac ticket #97).
358 2010-06-28 S. Thiell <stephane.thiell@cea.fr>
360         * scripts/clush.py: Centralized handling of exceptions raised from Main
361         and separate Task thread because some exceptions handled only in Main
362         thread were not caught (fix btw trac ticket #93).
364 2010-06-17 S. Thiell <stephane.thiell@cea.fr>
366         * Version 1.3 beta 6 released.
368 2010-06-16 S. Thiell <stephane.thiell@cea.fr>
370         * scripts/clush.py: Check for trailing args when using -c/--copy (trac
371         ticket #88).
373         * NodeSet.py, NodeUtils.py: Add a way to retrieve all nodes when "all"
374         external call is missing but "map" and "list" calls are specified (trac
375         ticket #90).
377         * Task.py: Add handling of stderr during task.copy().
379         * Worker/Ssh.py: Add handling of stderr (when needed) during scp.
381         * scripts/clush.py: Fix display issue with clush --copy when some nodes
382         are not reachable.
384         * Version 1.3 beta 5 released.
386 2010-06-15 S. Thiell <stephane.thiell@cea.fr>
388         * scripts/clush.py: Add --color={never,always,auto} command line option
389         and color: {never,always,auto} config option (trac ticket #68), defaulting
390         to `never'. Also did some code refactoring/lightening (created a Display
391         class). Updated clush and clush.conf man pages.
393 2010-06-09 S. Thiell <stephane.thiell@cea.fr>
395         * scripts/clush.py: Automatically increase open files soft limit (trac
396         ticket #61). Handle "Too many open files" exception.
398         * Task.py: Add excepthook and default_excepthook methods to handle
399         uncaught exception in a Task thread. Make it compliant with sys.excepthook
400         also.
402 2010-06-08 S. Thiell <stephane.thiell@cea.fr>
404         * Version 1.3 beta 4 released.
406         * doc/extras/vim/syntax/groupsconf.vim: Improved vim syntax file for
407         groups.conf (trac ticket #85): now $GROUP and $NODE are keywords.
409         * scripts/clush.py: Do not wait the end of all commands when using -bL
410         switches when possible (trac ticket #69).
412         * MsgTree.py: Added remove(match) method to remove entry from the tree.
414         * Task.py: Added flush_buffers() and flush_errors() methods.
416         * Worker/Worker.py: Added flush_buffers() and flush_errors() methods.
418 2010-05-26 S. Thiell <stephane.thiell@cea.fr>
420         * Version 1.3 beta 3 released.
422         * scripts/clush.py: Fixed issue (-g/-X group not working as expected)
423         found in release 1.3 beta2.
425 2010-05-25 S. Thiell <stephane.thiell@cea.fr>
427         * Version 1.3 beta 2 released.
429         * scripts/clush.py: Added -G, --groupbase to strip group source prefix
430         when using -r.
432         * scripts/clubak.py: Added -G, --groupbase to strip group source prefix
433         when using -r.
435         * scripts/nodeset.py: Changed -N, --noprefix to -G, --groupbase to avoid
436         conflict with clush -N.
438         * scripts/clush.py: Fixed missing support for group source (-s
439         GROUPSOURCE) when using -a or -g GROUP.
441         * scripts/nodeset.py: Added --all, -a support (also work is -s
442         GROUPSOURCE). Almost-silently removed -a for --autostep, I hope nobody's
443         using it. :)
445         * Updated man pages of clush, clubak and nodeset to match latest options
446         changes (trac #58).
448         * scripts/clubak.py: Added regroup support to clubak (trac ticket #78).
449         Added -S to specify user settable separator string (trac ticket #62).
451 2010-05-24 S. Thiell <stephane.thiell@cea.fr>
453         * tests/NodeSetGroupTest.py: Some cleanup in tests (use setUp, tearDown)
454         and create temporary groups test files.
456         * tests/NodeSetRegroupTest.py: Removed (tests moved to
457         NodeSetGroupTest.py).
459         * scripts/nodeset.py: Add -N option to avoid display of group source
460         prefix (trac ticket #79).
462         * NodeSet.py: Add noprefix boolean option to regroup() to avoid building
463         nodegroups with group source prefixes. Added test.
465         * scripts/clush.py: Fix unhandled GroupResolverSourceError exception (part
466         of trac ticket #74).
468         * scripts/nodeset.py: Renamed -n NAMESPACE option to -s GROUPSOURCE (or
469         --groupsource=GROUPSOURCE). Fixed trac ticket #76 so that -f, -e or -c
470         take -s into account. Improved error handling (trac ticket #74). Added
471         --groupsources command to list configured group sources (trac #77).
473 2010-05-20 S. Thiell <stephane.thiell@cea.fr>
475         * tests/NodeSetRegroupTest.py: added tests for nodeset.regroup().
477 2010-05-19 S. Thiell <stephane.thiell@cea.fr>
479         * doc/extras/vim/ftdetect/clustershell.vim: renamed clush.vim to
480         clustershell.vim.
482         * doc/extras/vim/syntax/clushconf.vim: renamed clush.vim to clushconf.vim
483         and cleaned up old external groups keywords.
485         * doc/extras/vim/syntax/groupsconf.vim: added vim syntax file for
486         groups.conf (trac ticket #73).
488 2010-04-08 S. Thiell <stephane.thiell@cea.fr>
490         * NodeSet.py: Added __getstate__() and __setstate__() methods to support
491         pickling of NodeSet objects.
493         * scripts/clush.py: Add option flag -n NAMESPACE to specify groups.conf(5)
494         namespace to use for regrouping displayed nodeset.
496         * scripts/clush.py: Add -r (--regroup) option to display default groups
497         in nodeset when possible.
499 2010-04-07 S. Thiell <stephane.thiell@cea.fr>
501         * scripts/clush.py: Modified script to support new external "all nodes"
502         upcall and node groups.
504         * scripts/nodeset.py: Added command flags -l (list groups), -r (used to
505         regroup nodes in groups), and also added option flag -n to specify desired
506         namespace.
508         * NodeSet.py: Added node group support with the help of the new NodeUtils
509         module (trac ticket #41). Improved parser to support basic node/nodegroups
510         arithmetics (trac ticket #44).
512         * NodeUtils.py: New module that provides binding support to external node
513         group sources (trac ticket #43).
515 2010-03-05 S. Thiell <stephane.thiell@cea.fr>
517         * Worker/*.py: Do not forget to keep last line and generate an ev_read
518         event when it does not contain EOL (trac ticket #66). Added tests.
520 2010-02-26 S. Thiell <stephane.thiell@cea.fr>
522         * Version 1.2 RC 1 released.
524 2010-02-25 S. Thiell <stephane.thiell@cea.fr>
526         * Important code cleaning (use absolute imports, remove some unused
527         imports, remove duplicate code, etc. thanks to pylint).
529 2010-02-22 S. Thiell <stephane.thiell@cea.fr>
531         * scripts/nodeset.py: Change command syntax: operations are now specified
532         inline between nodesets (trac ticket #45). Update doc and tests.
534         * scripts/clubak.py: Fix TypeError exception raised on unexpected input
535         and accept 'node:message' line pattern (trac ticket #59).
537         * scripts/clush.py: Add -B flag (trac ticket #60) to gather with stderr.
539         * NodeSet.py: NodeSet constructor now raises a NodeSetParseError
540         exception when unsupported type is used as input (trac ticket #53).
542 2010-02-21 S. Thiell <stephane.thiell@cea.fr>
544         * Task.py: Fix a deadlock when a task is resumed two times from another
545         thread (raise AlreadyRunningError instead). Added test.
547         * Worker/Worker.py: Improve usage error handling for some methods (trac
548         ticket #28), raising WorkerError when needed. Add library misusage tests.
550 2010-02-18 S. Thiell <stephane.thiell@cea.fr>
552         * scripts/clush.py: Disable MsgTree buffering when not performing
553         any gathering of results (when -b is not used).
555         * Task.py: Allow disabling of MsgTree buffering (trac ticket #3) via
556         'stdout_msgtree" and 'stderr_msgtree' Task default keywords, useful if we
557         don't want MsgTree internal buffering for fully event-based scripts (eg.
558         clush without -b). When disabled, any Task method accessing MsgTree data
559         like iter_buffers() will raise a new exception (TaskMsgTreeError).
561 2010-02-17 S. Thiell <stephane.thiell@cea.fr>
563         * Version 1.2 beta 5 released.
565 2010-02-16 S. Thiell <stephane.thiell@cea.fr>
567         * NodeSet.py: Fix mixed-type comparisons, where, like standard set(),
568         are allowed, instead of raising TypeError.
570 2010-02-15 S. Thiell <stephane.thiell@cea.fr>
572         * Version 1.2 beta 4 released.
573         
574         * MsgTree.py: Added MsgTreeElem.splitlines() method as alias of lines().
576 2010-02-14 S. Thiell <stephane.thiell@cea.fr>
577         
578         * Updated doc/man pages for latest clush changes and added clubak tool.
580         * Worker/Ssh.py: Fix Ssh worker issue where sometimes stderr buffer could
581         not be read completely (trac ticket #50).
583 2010-02-13 S. Thiell <stephane.thiell@cea.fr>
584         
585         * scripts/clush.py: Comply with clubak by adding -L option that allow
586         switching to alternative line mode display (when using -b). Also, sort
587         buffers by nodes or nodeset length like clubak (fix trac ticket #54).
589 2010-02-11 S. Thiell <stephane.thiell@cea.fr>
590         
591         * Version 1.2 beta 3 released.
593         * scripts/clush.py: For clush --copy, when --dest is not specified, set
594         the destination path to the source dirname path and not the source full
595         path.
597         * scripts/clush.py: Added option --nostdin to prevent reading from
598         standard input (fix trac ticket #49).
600         * Engine/Factory.py: Disable Engine.EPoll automatic selection as an issue
601         has been found with clush when stdin is a plain file (<file redirections).
602         Engine.Poll is now the default engine for all platforms. Created trac
603         ticket #56 to follow this issue.
605 2010-02-10 S. Thiell <stephane.thiell@cea.fr>
606         
607         * Worker/Worker.py: Added missing WorkerSimple.last_error() method. Fixed
608         worker bad argument error exception.
610         * Worker/Ssh.py: Added command, source and dest public instance variable.
612         * Worker/Pdsh.py: Added command, source and dest public instance variable.
614         * scripts/clush.py: Due to set_info() behaviour modifications in
615         multi-thread mode, change some set_info() for set_default() to modify
616         task specific dictionary synchronously. Also remove splitlines() where
617         MsgTreeElem are returned instead of whole buffer after latest MsgTree
618         improvements.
620         * scripts/clubak.py: Added clubak utility (trac ticket #47). It provides
621          dshbak backward-compatibility, but always try to sort buffers by nodes or
622          nodeset. It also provides additional -L option to switch to alternative
623          line mode display.
625 2010-02-09 S. Thiell <stephane.thiell@cea.fr>
627         * Worker.py: Updated Task/MsgTree dependencies. Added iter_node_errors()
628         method. Added match_keys optional parameter to iter_node_buffers() and
629         iter_node_errors(). Added WorkerSimple.error() method (read stderr).
630         Added tests.
632         * Task.py: Updated MsgTree dependencies. Factorized most tree data's
633         access methods.
635         * MsgTree.py: Merged Msg and _MsgTreeElem in one class MsgTreeElem. All
636         message objects returned are now instance of MsgTreeElem. Some algorithms
637         improvements. Renamed main MsgTree access methods: messages(), items() and
638         walk(). Added more docstring.
640         * NodeSet.py: Modified NodeSet.__iter__() and __str__() so that nodes are
641         now always sorted by name/pattern (eg. acluster2, bcluster1).
643 2010-02-07 S. Thiell <stephane.thiell@cea.fr>
645         * MsgTree.py: Rewrite of MsgTree module with a better API (part of trac
646         ticket #47). Adapted library classes. Added specific tests.
648 2010-02-02 S. Thiell <stephane.thiell@cea.fr>
650         * Task.py: Add Task.key_error() and its alias node_error() methods for
651         easy retrieving of error buffers for a specified key/node.
653         * scripts/clush.py: Fix stdout/stderr separation issue (introduced
654         in 1.2b2) thanks to the new Task.set_default() method.
656         * Task.py: As set_info() is now dispatched through the task special port,
657         and applied only on task.resume() when called from another thread, add two
658         new methods default() and set_default() to synchronously manage another
659         task specific dictionary, useful for default configuration parameters.
661 2010-02-01 S. Thiell <stephane.thiell@cea.fr>
663         * Version 1.2 beta 2 released.
665 2010-02-01 A. Degremont  <aurelien.degremont@cea.fr>
667         * NodeSet.py: Added __getslice__() and split() method to RangeSet.
668         Added split() to NodeSet (trac ticket #18).
670 2010-02-01 S. Thiell <stephane.thiell@cea.fr>
672         * NodeSet.py: Added equality comparisons for RangeSet and NodeSet. Fixed
673         a bug in NodeSet.issuperset().
675         * mkrpm.sh: Improve RPM build process and allow SRPM package to be
676         easily rebuilt (trac ticket #51).
678 2010-01-31 S. Thiell <stephane.thiell@cea.fr>
680         * scripts/clush.py: Fix broken pipe issue (trac ticket #34).
682         * scripts/clush.py: Fix unhandled NodeSet parse error (trac ticket #36).
684         * scripts/clush.py: Display uncompleted nodes on keyboard interrupt.
686 2010-01-29 S. Thiell <stephane.thiell@cea.fr>
688         * scripts/clush.py: Return some error code when -S -u TIMEOUT is used
689         and some command timeout occurred (trac ticket #48).
691         * scripts/clush.py: Display output messages on KeyboardInterrupt (trac
692         ticket #22).
694         * tests/TaskThreadJoinTest.py: Added test cases for task.join().
696         * tests/TaskThreadSuspendTest.py: Added test cases for
697         task.suspend().
699         * tests/TaskPortTest.py: Added test cases for task.port().
701         * Task.py: Improved features in multithreaded environments thanks
702         to new port feature: abort(), suspend(), resume(), schedule(), etc.
703         are now thread-safe (trac ticket #21).
705         * Worker/EngineClient.py: Added port feature, a way to communicate between
706         different tasks.
708 2009-12-09 A. Degremont  <aurelien.degremont@cea.fr>
710         * scripts/clush.py: Add -X flag to exclude node groups.
711           Node flags -w/-x/-g/-X can now be specified multiple times.
713 2009-12-17 S. Thiell <stephane.thiell@cea.fr>
715         * Engine/Factory.py: Add engine automatic selection mechanism (trac
716         ticket #10).
718         * Task.py: Add task_terminate() function for convenience.
720 2009-12-15 S. Thiell <stephane.thiell@cea.fr>
722         * scripts/clush.py: Fix clush -q/--quiet issue again!
724 2009-12-09 A. Degremont  <aurelien.degremont@cea.fr>
726         * scripts/nodeset.py: Protect --separator from code injection and
727         handle gracefully incorrect separtor.
729 2009-12-09 S. Thiell <stephane.thiell@cea.fr>
731         * Version 1.2 beta 1 released.
733         * scripts/clush.py and library: Add -p option when using --copy to
734         preserve file modification times and modes.
736         * scripts/clush.py: Fix clush -q/--quiet issue.
738         * scripts/nodeset.py: Add separator option to nodeset
739         --expand with -S <string> (trac ticket #39).
741         * Worker/Pdsh.py: Added copy support for directory (automatic
742         detection). Added non-reg tests.
744 2009-12-08 S. Thiell <stephane.thiell@cea.fr>
746         * scripts/clush.py: Added source presence check on copy.
748 2009-12-07 S. Thiell <stephane.thiell@cea.fr>
750         * Worker/Ssh.py: Added copy support for directory (automatic
751         detection).
753         * Worker/Ssh.py: Fix Scp Popen4->subprocess.popen issue (simple
754         quote escape not needed).
756 2009-11-10 S. Thiell <stephane.thiell@cea.fr>
758         * Version 1.2 beta 0 released. Updated doc and man pages for 1.2.
760 2009-11-09 S. Thiell <stephane.thiell@cea.fr>
762         * Engine/EPoll.py: Add stdout/stderr support (still experimental).
764         * Worker/Pdsh.py: Fix stdout/stderr support.
766         * Backport recent 1.1-branch improvements: tests code coverage, also
767         resulting in some fixes (see 1.1 2009-10-28).
769 2009-11-09 S. Thiell <stephane.thiell@cea.fr>
771         * scripts/clush.py: Added stdout/stderr support in clush script.
773 2009-11-04 S. Thiell <stephane.thiell@cea.fr>
775         * Added optional separate stdout/stderr handling (with 1.1 Task API
776         compat). Added some tests for that.
778         * Create a MsgTree class in MsgTree.py and remove this code from
779         Task.py.
781         * First changes to use setUp() in test case objects.
783 2009-08-02 S. Thiell <stephane.thiell@cea.fr>
785         * clush.py: (1) remove /step in displayed nodeset when using -b (to
786         allow copy/paste to other tools like ipmipower that doesn't support
787         N-M/STEP ranges), (2) when command timeout is specified (-u), show
788         nodes (on stderr) that didn't have time to fully complete, (3) flush
789         stdio buffers before exiting. [merged from branch 1.1]
791 2009-07-29 S. Thiell <stephane.thiell@cea.fr>
793         * tests/NodeSetScriptTest.py: added unit test for scripts/nodeset.py
795         * NodeSet.py: fixed a problem with intersection_update() when used
796         with two simple nodes (no rangeset).
798         * scripts/nodeset.py: merge -i and -X options issue fix from 1.1
799         branch (#29)
801 2009-07-28 S. Thiell <stephane.thiell@cea.fr>
803         * scripts/clush.py: remove DeprecationWarning ignore filter (the
804         library is now natively Python 2.6/Fedora 11 ready)
806         * Change all sets to use built in set type available since Python 2.4
807         (the sets module is deprecated).
809         * Engine/EPoll.py: added epoll based Engine (Python 2.6+ needed)
811         * Engine/Poll.py: added _register_specific() and
812         _unregister_specific() methods to match modified Engine base class.
814         * Engine/Engine.py: added calls to derived class's
815         _register_specific() and _unregister_specific() instead of only
816         _modify_specific()
818 2009-07-23 S. Thiell <stephane.thiell@cea.fr>
820         * Replaced popen2.Popen4 (deprecated) by subprocess.Popen (Python 2.4+),
821         renaming Worker.Popen2 to Worker.Popen.
823         * clush.py: (backport for 1.1 branch) fix another command_timeout (-u)
824         issue, now the command_timeout value is passed as the timeout value at
825         worker level.
827         * Version 1.1 branched.
829 2009-07-22 S. Thiell <stephane.thiell@cea.fr>
831         * Version 1.1 RC 2 released.
833         * clush.py: change -u timeout behavior, if set it's now the timeout value
834         passed to task.shell() (and not connect_timeout + command_timeout).
836         * clush.py: add -o options to pass custom ssh options (#24).
838         * Worker/Ssh.py: simple quote escape fix (trac ticket #25).
840         * Worker/Popen2.py: simple quote escape fix (trac ticket #25)
842         * clush.py: fix options issue when using -f, -u or -t.
844 2009-07-13 S. Thiell <stephane.thiell@cea.fr>
846         * Version 1.1 RC 1 released.
848         * Changed license to CeCILL-C (http://www.cecill.info).
850         * clush.py (ttyloop): (feature) added '=' special command in
851         interactive mode to toggle output format mode (standard/gathered).
853         * Engine/Engine.py (register): (bug) register writer fd to even when
854         set_writer_eof() has previously been called.
856         * Worker/EngineClient.py (_handle_write): (bug) don't close writer
857         when some data remains in write buffer, even if self._weof is True.
859 2009-07-10 S. Thiell <stephane.thiell@cea.fr>
861         * clush.py (ttyloop): added a workaround to replace raw_input() which
862         is not interruptible in Python 2.3 (issue #706406).
864 2009-07-09 S. Thiell <stephane.thiell@cea.fr>
866         * NodeSet.py (__contains__): fixed issue that could appear when
867         padding was used, eg. "node113" in "node[030,113] didn't work.
869 2009-07-08 S. Thiell <stephane.thiell@cea.fr>
871         * Version 1.1 beta 6 released.
873         * clush.py: major improvements (added write support, better
874         interactive mode with readline, launch task in separate thread to let
875         the main thread blocking tty input, added Enter key press support
876         during run, added node groups support (-a and -g) using external
877         commands defined in clush.conf, added --copy toggle to clush to copy
878         files to the cluster nodes, added -q option, added progress indicator
879         when clush is called with gather option -b)
881         * Added man pages for clush and nodeset commands.
883         * doc/extras/vim (clush.vim): added vim syntax files for clush.conf
885         * Engine.py: (feature) added write support to workers
887         * Worker: (api)  created a base class WorkerSimple
889 2009-04-17 S. Thiell <stephane.thiell@cea.fr>
891         * Version 1.1 beta 5 released (LUG'09 live update).
893         * Worker/Worker.py: (bug) update last_node so that user can call
894         worker.last_node() in an ev_timeout handler callback.
896 2009-04-17 A. Degremont  <aurelien.degremont@cea.fr>
898         * clush.py: (feature) make use of optparse.OptionParser
900 2009-04-15 S. Thiell <stephane.thiell@cea.fr>
902         * Version 1.1 beta 4 released.
904 2009-04-14 S. Thiell <stephane.thiell@cea.fr>
906         * Engine/Engine.py (EngineBaseTimer): (bug) fixed issue in timers when
907         invalidated two times.
909 2009-04-06 S. Thiell <stephane.thiell@cea.fr>
911         * Version 1.1 beta 3 released.
913         * Engine/Engine.py (_EngineTimerQ): (bug) fixed issue in timer
914         invalidation.
916 2009-04-03 S. Thiell <stephane.thiell@cea.fr>
918         * Engine/Engine.py (EngineTimer): (api) added is_valid() method to
919         check if a timer is still valid.
921         * Task.py: (api) added optional `match_keys' parameter in Task and
922         Worker iter_buffers() and iter_retcodes() methods.
924 2009-03-26 S. Thiell <stephane.thiell@cea.fr>
926         * Version 1.1 beta 2 released.
928 2009-03-23 S. Thiell <stephane.thiell@cea.fr>
930         * Worker/Worker.py: (api) added Worker.did_timeout() method to check
931         if a worker has timed out (useful for Popen2 workers, other use
932         DistantWorker.num_timeout()).
934 2009-02-21 S. Thiell <stephane.thiell@cea.fr>
936         * Version 1.1 beta 1 released.
938 2009-02-20 S. Thiell <stephane.thiell@cea.fr>
940         * NodeSet.py (NodeSet): (api) added clear() method.
941         (RangeSet): likewise.
943         * NodeSet.py (NodeSet): added workaround to allow NodeSet to be
944         properly pickled (+inf floating number pickle bug with Python 2.4)
946         * NodeSet.py (RangeSet): (bug) don't keep a reference on internal
947         RangeSet when creating a NodeSet from another one.
949 2009-02-16 S. Thiell <stephane.thiell@cea.fr>
951         * Version 1.1 beta 0 released.
953         * Worker/Ssh.py: (feature) new worker, based on OpenSSH, with fanout
954         support (thus removing ClusterShell mandatory pdsh dependency).
956         * Engine/Engine.py: (feature, api) added timer and repeater support.
958         * 1.0->1.1 internal design changes.
961 Copyright CEA/DAM/DIF  (2009, 2010, 2011)
962 Copying and distribution of this file, with or without modification, are
963 permitted provided the copyright notice and this notice are preserved.