source: trunk/CHANGES @ 241

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

Update the LICENSE file

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