source: trunk/CHANGES @ 214

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

Updated CHANGES file

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