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.
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
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
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).
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
235 2010-11-01 S. Thiell <stephane.thiell@cea.fr>
237 * CLI/OptionParser.py: Make -c/--copy an option that can take several
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
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
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
309 * setup.py: Switch to setuptools.
311 * clustershell.spec.in: Fix issue on el5 with if condition when defining
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
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
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
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
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
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
432 * scripts/clubak.py: Added -G, --groupbase to strip group source prefix
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
445 * Updated man pages of clush, clubak and nodeset to match latest options
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
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
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
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.
574 * MsgTree.py: Added MsgTreeElem.splitlines() method as alias of lines().
576 2010-02-14 S. Thiell <stephane.thiell@cea.fr>
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>
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>
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
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>
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
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
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).
632 * Task.py: Updated MsgTree dependencies. Factorized most tree data's
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
694 * tests/TaskThreadJoinTest.py: Added test cases for task.join().
696 * tests/TaskThreadSuspendTest.py: Added test cases for
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
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
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
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
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
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
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
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
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.