source: trunk/CHANGES @ 217

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

Only support installations that have pbs-config installed

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