source: trunk/CHANGES @ 254

Last change on this file since 254 was 254, checked in by bas, 14 years ago

Applied a patch to support runtime-libaries when torque is installed in a non-default location, see #22

  • Property svn:keywords set to Id
File size: 19.1 KB
Line 
1=========== 4.2.0
2 * Updated LICENSE file to LGPLV3. Thanks to Justin Bronder
3  (jsbronder add gentoo dot org) for the information and
4  explanation.
5
6 * examples/pbsmon.py. Patched so it also works for torque 2.5
7   Author: Stijn De Weirdt stijn dot deweirdt at ugent dot be
8   Applied by: Bas van der Vlies
9
10 * setup.py.in changed determine which torque version is installed
11   so we also support snapshots.
12   Author: Mark Roberts ( mark at gingergeeks dot co dot uk)
13   Applied by: Bas van der Vlies
14
15 * PBSQuery:
16   - get_nodes function for jobs now works for old and new datastructure and
17     gives correct results if unique=True
18     Author: Bas van der Vlies
19
20 * Added AdvanceParser module. new_rack_pbsmon.py and sara_nodes.py make use of
21   this module
22   Author: Dennis Stam (Dennis dot Stam at sara dot nl)
23
24 * examples/new_rack_pbsmon.py:
25     - Better specification for node expression
26     - added a new option -l/--list to list the state of a nodes and which job
27       is running on it, eg:
28             new_rack_pbsmon.py - l gb-r[1-3]n[3-6] gb-r4[n1-20]
29
30   Author: Dennis Stam & Bas van der Vlies
31   Applied by: Bas van der Vlies
32
33 * examples/sara_nodes.py:
34   An utility to set/clear notes for multiple nodes, see ..
35   Author: Dennis Stam (Dennis dot Stam at sara dot nl)
36
37 * setup.py.in:
38   Added support for runtime-libraries when torque is installed in a non-default
39   location, closes #22
40   Author: Mattias (slabanja at chalmers dot se)
41   Applied by: Bas van der Vlies
42
43=========== 4.1.2
44 * examples/new_rack_pbsmon.py now uses the new PBSQuery data
45   structure.
46   Author: Bas van der Vlies
47
48 * PBSQuery:
49     - fixed and error in get_jobs function for nodes. Did not
50       support new data structure and uniq did not work.
51       Authors: Shunjie Lau <eijnuhs at gmail dot com> and Bas van der Vlies
52
53=========== 4.1.0
54 * Delete function pbs.version() replaced by
55    * pbs.version
56        This is a string variable
57    * pbs.version_info
58        Is a tuple variable. So we can use it in scripts
59
60   This analogue with sys module, closes #20
61
62   Requested by: Dennis Stam ( Dennis dot Stam add sara dot nl )
63   Author: Bas van der Vlies
64
65 * More robust make/configure/setup.py
66   Reported by:
67        - Saidi, Yacine <saidi add linmpi dot mpg dot de>
68        - Shunjie Lau <eijnuhs add gmail dot com>
69   Author: Bas van der Vlies
70
71
72 * Only use the pbs_wrap.c and pbs.py 2.4 version for torque version 2.4.7 and higher.
73   Reported by: Saidi, Yacine <saidi add linmpi dot mpg dot de>
74   Author: Bas van der Vlies
75   
76=========== 4.0.2
77  * Quick fix so we do not get any undefined symbols. Forgot to
78    add the torque library when we compile the package.
79    Reported by: Shunjie Lau ( eijnuhs add gmail dot com)
80    Author: Bas van der Vlies
81
82=========== 4.0.1
83  * Fixed a bug in setting the right library path  for compiling.
84    Reported by: Chad Vizino ( vizino add psc dot edu )
85    Author: Bas van der Vlies
86   
87=========== 4.0.0
88  * pbs.py added some new functions for 2.4 version:
89    - pbs_fbserver(void);
90    - pbs_get_server_list(void);
91    - pbs_sigjobasync(int connect, char *job_id, char *signal, char *extend);
92    - pbs_alterjob_async(int connect, char *job_id, struct attrl *ATTRL, char *extend);
93    - pbs_checkpointjob(int connect, char *job_id, char *extend);
94    - log_ext(int,char *,char *,int);
95    - log_init(char *, char *);
96    - log_remove_old(char *,unsigned long);
97
98    Note: version 2.1.X is still supported
99
100  * autotools environment
101    - Added support for finding pbs-config (borrowed for mpiexec source)
102    - Detecting which version of torque is installed
103    - only support installations that have pbs-config installed.
104    - Removed old code for installations that do not a have pbs-config
105      installed.
106
107  * PBSQuery.py
108    - There was a bug in the new data interface (Resource_List for jobs)
109      Reported & Patch by: Mark Roberts ( mark at gingergeeks dot co dot uk)
110      Applied by with some minor changes: Bas van der Vlies
111
112    - The new data structure is the default. You can switch back to the old
113      one with:
114            p = PBSQuery()
115            p.old_data_structure()
116
117      Author: Bas van der Vlies
118
119   * examples/ha_server.py
120     An example how to use the High Availabilty torque functions
121     Author: Bas van der Vlies & Mark Roberts ( mark at gingergeeks dot co dot uk )
122
123=========== 3.6.0
124  * pbs, new generated pbs_wrap.c, pbs.py fixes a bug in pbs_runjob()
125    Reported by: Dennis Stam
126    Fixed by: Bas van der Vlies
127
128=========== 3.5.0
129  * PBSQuery
130        The class functions of node, job and queue support old and new data
131        structure.
132
133        Changed the behaviour of the new data stucture, We can use it as
134        dictionary and as class attribute, this is equivalent, eg:
135          - print node['np'] and print node.np
136
137        for a node we parse the 'status' line and split on '=' char, You now can
138        use these statements, eg
139          - print node.status.arch     (node['status'].arch or node['status']['arch'])
140          - print node.status.nsession
141
142        for a job we parse the 'Variable_List' line and split on '=' char, You now can
143        use the statements, eg:
144          - print job.Variable_List.PBS_O_WORKDIR
145          - print job.Variable_List.PBS_O_HOME
146
147        For more info see examples/new_interface.py
148
149    Author: Bas van der Vlies
150
151 * new_rack_pbsmon.py
152        Rewrite to new data structure and automatically determine how many nodes
153        and racks cluster has and skip printing of empty racks (default), use -w/--wide
154        for old behaviour.
155
156   Author: Bas van der Vlies
157
158
159=========== 3.2.0
160        - PBSQuery:
161          New data structure. In the old structure it is a dictionary
162          with a value and the value is a string. This is changed
163          that dictionary values are now of type list or dictionary depends
164          on the value of the keyword, eg for a node:
165            - np = 2:
166              * node['np'] = [ '2' ] 
167
168            - properties = cores2, mem4gb, parallel
169              * node['properties'] = [ 'cores2', 'mem4gb', 'parallel' ]
170
171            - status = arch=x86_64,sessions=22599,,size=70627864kb, ...
172              * node['status']['arch'] = [ 'x86_64' ]
173              * node['status']['sessions'] = [ '222599' ]
174              * ...
175
176         The data structure is activated by the function:
177          * new_data_structure()
178
179        In a future release it will be come the default.
180        example:
181                p = PBSQuery()
182                p.new_data_structure()
183
184                nodes = p.getnodes()
185                print nodes.np, nodes['np']
186
187        Author: Bas van der Vlies
188
189        - PBSQuery
190          For old and new data structure we now can use another syntax:
191           * node['np'] and node.np are equivalent
192
193          This new syntax works for all keywords.
194
195        Author: Bas van der Vlies
196
197        - Added iter object for job, node, queue and server objects, eg:
198          node = p.getnode('gb-r1n1')
199          print node.name
200          for attrib in node:
201                print '%\t%s = %s' %(attrib, node[attrib])
202        Author: Bas van der Vlies
203
204        - fixed an error in getnode, getqueue and getjob, return empty
205          dictionary if not found
206        Author: Bas van der Vlies
207       
208        - New build system for rpm packages, make -f Makefile.rpm
209          Author: Michel Jouvin <jouvin add lal dot in2p3 dot fr>
210
211        Applied: Bas van der Vlies
212
213=========== 3.0.1
214        - PBSQuery
215                * Removed a testing code line
216                Reported By: sam @ vpac dot org
217                Fixed by: Bas van der Vlies
218
219=========== 3.0.0
220        - PBSQuery
221                * Cleaned up some old lines of code which didn't do anything.
222                * Changed the returnvalue of getqueue, getnode and getjob. Now
223                  they return an instance of the object, instead of a dict.
224                  This is API change so we bumped the version to 3.0.0
225                * Now the getnode-function accepts the short name as well as
226                  the long name as an argument.
227
228                Author: Sil Westerveld <Sil.Westerveld@sara.nl>
229
230        - pbs.py, _pbs.so, PBSQuery.py
231                * Fixed a memory leak when used in daemon mode
232                Author: Bas van der Vlies <basv@sara.nl>
233
234=========== 2.9.8
235        - pbs_python.spec file patch added libdir and python defines so it
236          will build for RHEL5.1/CentOS 5.1
237          by        : Michael Sternberg <sternberg add anl dot gov>
238          applied by: Bas van der Vlies
239
240        - Updated the header files for pbs_python. So it can use some new
241          defines variables/defines, eg:
242                * ATTR_NODE_status
243                * ATTR_NODE_note
244                * ...
245          Added by: Dennis Stam <dennis.stam@sara.nl>, Bas van der Vlies
246
247        - Two new functions to log.h:
248                log_roll(int size);
249                log_size(void);
250          Added by: Bas van der Vlies
251
252        - We now have proper destructors (free memory) in SWIG for attrl and
253          attropl attributes.
254          Added by: Bas van der Vlies
255
256        - PBSQuery
257                * Added getnodes_with_property() function. This will get all nodes with
258                  a certain property, eg:
259                   - get all nodes with property 'cores8' and return all attributes:
260                      getnodes_with_property('cores8')
261               
262                   - get all nodes with property 'cores2' and only return the
263                     attributes 'state' and 'properties':
264                      attrl = [ 'state', 'properties' ]
265                      getnodes_with_property('cores2', attrl)
266               
267                     Only for torque version > 2.1.0
268             
269                Added by: Bas van der Vlies
270
271                * Added to class node the function
272                 - get_jobs(self, unique=None)
273                   Returns a list of the currently running job-id('s) on the node.
274                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
275
276                * Added get_server_name() function.
277                  This will return the PBS-server's name.
278                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
279
280                * Added to class _PBSobject the function
281                  - uniq(self, list)
282                    Filters out unique items of a list.
283                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
284
285                * Added to class job the function
286                  - get_nodes(self, unique=None)
287                    Returns a list of the nodes which run the job.
288                Added by: Sil Westerveld <Sil.Westerveld@sara.nl>
289
290=========== Version 2.9.4
291        -  Function pbs.pbs_geterrmsg does not exits any more is
292           replaced by pbs.error():
293                errno, text = pbs.error()
294                print errno, text
295           Reported by: pk at q-leap dot com
296           Fixed by   : Bas van der Vlies
297
298        - PBSQuery.py
299           * Added get_version() for server class, returns the version of
300             the batch server
301             Added by    : Bas van der Vlies
302
303           * Added get_nodes() for job class, returns a list of nodes on
304             which the job is run
305             Added by    : Bas van der Vlies
306
307           * PBSQuery.py rewrite make use of UserDict module.
308             Suggested by: Ramon Bastiaans
309             Fixed by    : Bas van der Vlies
310
311=========== Version 2.9.2
312        - The function pbs_rescquery() did not work. Fixed it
313        - The function avail(), did not work fixed it
314        - The functions pbs_rescreserve and pbs_rescrelease did not work
315          fixed it
316
317        - Fixed a bug in new_rack_pbsmon.py. Counting of serial
318          nodes was wrong and state down has topmost priority
319
320=========== Version 2.9.0
321        - Added support for new torque build system 2.1.0
322        - Added new_rack_pbsmon.py
323          Authors: Walter de Jong & Bas van der Vlies
324
325=========== Version 2.8.2
326
327Configure has a new option:
328        --with-pbsdir=PATH
329
330If set it will use PATH specified as argument to
331find the pbs/torque libraries. If unset it will use
332some useful defaults to find the libaries.
333Suggested by: Troy Baer
334
335PBSQuery.py:
336        - If we can not make a connection with the server
337          then raise an exception and let the programmer
338          decides what to do.
339
340pbs_python.spec:
341        - It can now handle mode bits
342          Author: Martin Pels from SARA
343       
344=========== Version 2.8.0
345
346setup.py:
347        - Added /usr/lib to PBS_LIB_DIR
348
349pbs.py:
350        - Added new function "pbs.error()". This function checks if
351          an error has occured with a pbs function, eg:
352            task_id = pbs.pbs_submit(c, attrl, "A.tsk", 'NULL', 'NULL')
353            error_number, err_txt = pbs.error()
354            if error_number:
355                print error_number, err_txt
356
357          prints the following message if script A.tsk does not exists:
358            15042 (qsub) cannot access script file
359
360pbs_python.spec:
361        - to make rpm packages from the source package, initial version
362        Author: Martin Pels from SARA
363
364README:
365        - Now requires python 2.1 and higher
366        - Explain how to build DEBIAN package
367
368=========== Version 2.7.10
369
370PBSQuery.py:
371        Fixed an error. You always got all resources from eg nodes
372        even when you supplied an attribute list where you only
373        requested the 'state' of the node.
374
375        Updated the inline python documentation
376
377=========== Version 2.7.9
378
379Fixed an error the previous version was in DEBUG mode. So
380you get an lot undesired output on the screen.
381
382debian package now also generated a package with the write
383version info.
384
385=========== Version 2.7.8
386
387Setup.py:
388        Can also handle ROCKS installations + the version
389        info is now the same as pbs.py
390        Thanks to: Roy Dragseth
391
392=========== Version 2.7.7
393
394PBSQuery module:
395  It can now be used in daemon programs. The pbs_server closes
396  the connection after an certain amount of time. This is fixed,
397  before every query there is an new connection and if the query
398  is finished the connection is closed.
399 
400=========== Version 2.7.6
401
402Now setup.py can also handle old Oscar Installations.
403Thanks To: Robin Humble
404
405Fixed an print statement fix in new_interface.py:
406Thanks To: Robin Humble
407
408Made some improvements for PBSQuery module:
409        - Updated the documentation
410        - Added the has_key() function to all
411          PBSObjects. So that the behaviour is similar to
412          an dictionary
413          Suggested By: Ramon Bastiaans
414       
415=========== Version 2.7.5
416 Added PBSQuery module.  This module requires pbs.py and it a simple module
417 for querying the pbs server. The documentation is in the module. Use for
418 example ipython to read it.
419
420 Written By: Roy Dragseth
421             Bas van der Vlies
422
423 eg: ( see also examples/new_interface.py)
424
425 from PBSQuery import PBSQuery
426 p = PBSQuery()
427
428 jobs = p.getjobs()
429 for name, job in jobs.items()
430        print job
431
432=========== Version 2.7.4
433 New versions fixes an bug in function pbs.pbs_statnode().
434 Reported by: Keith Poirier
435
436 Configure support:
437 Contributed By: Yaroslav Halchenko
438
439 Debian package support:
440 Contributed By: Yaroslav Halchenko
441
442 Added Support for Debuging the interface, You must edit pbs_wrap.c
443 and search for SARA_DEBUG:
444        #define SARA_DEBUG 1
445 Implemented by: Ramon Bastiaans
446
447 examples/pbsmon.py:
448        - Fixed an error when regex fails to determine node number,
449          no status was displayed
450        - It will now display and 'j' if the node is free for the batch
451          system and a job runs on the node (SMP-systems).
452 Changed by: Bas van der Vlies
453
454 examples/rack_pbsmon.py:
455        - An pbsmon that display node info per rack
456        - Edit the rack_pbsmon.py to adjust the values. It requires
457          that hostname contains rack and node id's,
458          eg: gb-r<number>n<number>
459 Contributed by: Walter de Jong
460
461=========== Version 2.7.3
462 The name SPBS is changed to the new name TORQUE (Tera-scale Open-source
463 Resource and QUEing manager).
464
465 The interface support OPENPBS and TORQUE.
466
467=========== Version 2.7.2
468 Some minor changes to include files. Now the Scalable PBS keywords
469 are also supported ( server attribute names: node_ping_rate and
470 node_check_rate). This does not interfere with the openpbs software.
471
472 pbsmon.py could not handle an one node cluster. Fixed it.
473
474=========== Version 2.7
475 Forgot to wrap the pbs_statfree() function. So we could not free
476 allocated memory from functions that return 'struct batch_status *'
477 like pbs_statjob().
478
479 pbsmon.py can now handle 2 and 3 digit hostnames. Patch supplied by
480 Daniel Olson
481
482=========== Version 2.6.1
483 Setup.py now checks if all openpbs libraries are installed to compile the
484 package.
485
486=========== Version 2.6
487
488 Fixed a bug in the pbs python module. Forgot to map the pbs_statjob()
489 function. This bug prevented to pass 'struct attrl' variables to this
490 function. Thanks to Evelyn Shiu for reporting this bug.
491
492
493=========== Version 2.5
494 Added the OpenPbs logging functions (log.h and liblog.a). There
495 is an example in the examples directory: logpbs.py
496
497 Fixed a bug in examples/resmom_info.py used the default port for
498 pbs_resmon if getservbyname fails.
499
500 Fixed a bug in resmom code. If the user has no permissions to query
501 the pbs_mom daemon a empty string is returned. Now we check for
502 the empty string. So we do not get a python exception.
503
504 Fixed a bug in setup.py forgot the exit statement when we did not
505 find the pbs libraries.
506
507=========== Version 2.3
508 Bugfix in the pbsnodes-a.py. Forgot to import the sys module.
509
510 Removed some obsolete code.
511
512 As for now we make use of the distutils module. So the package
513 is automatically compiled and installed in proper directories, usage:
514    python setup.py install
515 This requires that the package 'distutils' must be installed. As for
516 version 1.6 and higher it is in the distribution.
517
518 Added a function that prints the pbs python interface version. So we
519 can check if we have the right interface version:
520 import pbs
521 print pbs.version()
522 
523
524=========== Version 2.2
525
526In this release we can query the pbs_mom daemon with the aid of
527resource management functions:
528   pbs.openrm()
529   pbs.closerm()
530   pbs.downrm()
531   pbs.configrm()
532   pbs.addreq()
533   pbs.allreq()
534   pbs.flushreq()
535   pbs.activereq()
536   pbs.fullresp()
537   pbs.getreq()
538
539There is also a python function:
540   pbs.get_mom_values(id, [list]):
541     id   - connection id of pbs.openrm(node-name, port-number)
542     list - Is a optional paramter. A list of resource keywords
543
544   If 'list' is not supplied then this function will get the values
545   for the standard resource keywords, eg uname, loadave, .. + 'arch'
546   depended keywords. The arch feature is only implemented for linux,
547   but it can easily be ported to other oses.
548
549   if 'list' is supplied then we only fetch values for the keywords
550   that are in the list.
551
552   The function returns a dictonary. The keys are the resource keywords.
553
554   See 'resmom_info.py' for a example of this new feature.
555
556=========== Version 2.0
557
558The previous version was a simple interface above the PBS C API LIB.  This
559interface has gone a major changes. The most noticeable change is  that
560the functions accept/return Python lists instead of C-lists.  So you can now
561use standard Python syntax for manipulating Python lists. If you are familar
562with the Python syntax then you will appreciate this new interface.
563
564NOTE:
565  This interface is NOT compatible with the old one
566
567Here are some guidelines to convert your code to the new one:
568
569The constructors for the struct has gone a major change:
570  old code:
571    temp = pbs.new_attrl();
572    attrl_p = pbs.attrlPtr(temp)
573    attrl_p.name = 'state'
574
575  new_code:
576     attr_l = pbs.new_attrl(1)   // Creates a list of attrl structs length 1
577     attr_l[0].name = 'state'
578
579
580The pbs_stat functions returns Python lists instead of C-lists. There is
581NO next field anymore:
582  old_code:
583    temp = pbs.new_attrl();
584    attrl_p = pbs.attrlPtr(temp)
585    attrl_p.this = 'NULL'
586
587    nodes = pbs.pbs_statnode(con, "", attrl_p, "NULL")
588
589    while nodes.this != 'NULL':
590      print nodes.name
591
592      node_attrl = nodes.attribs
593      while node_attrl.this != 'NULL':
594        print '\t', node_attrl.name, '=', node_attrl.value
595        node_attrl = node_attrl.next
596
597    nodes = nodes.next
598
599
600  new_code:
601    nodes = pbs.pbs_statnode(con, "", "NULL", "NULL")
602    for node in nodes:
603      print node.name
604      for attrib in node.attribs:
605        print '\t', attrib.name, '=', attrib.value
606
607Another advantage is you can use the print statement to show the
608connect of attrl and attropl classes:
609   attr_l = pbs.new_attrl(2)
610   attr_l[0].name = 'bas'
611   attr_l[0].value = 'van der Vlies'
612
613   print  attr_l[0]
614   >> (bas,,van der Vlies)
615   
616I hope these examples illustrate the changes. If you specify a wrong type
617for a function then function wil raise a Python exception.
Note: See TracBrowser for help on using the repository browser.