source: trunk/CHANGES @ 233

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

New version 4.0.2 with compiler fix

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