source: trunk/CHANGES @ 237

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

New version 4.1.0:

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