source: trunk/CHANGES @ 226

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

Updated CHANGES file. will release 4.0 shortly

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