I don't think line 104 of libaiscf.py is what you want. new_service() in libaiscf_instance.c returns "None". That makes sense. But that means 104 should be two lines:
super(AISCF,self).new_service(self, service_name) # go create it return AIservice(self, service_name) # look it up, may throw KeyError A doc string explaining that a KeyError is possible would help too. Its understandable that it could throw this since you don't cache SMF values (which is good), but that might surprise folks a little. Otherwise its looking pretty good. Well apart from camelCase ;) But then you got the constant LHS test from my examples which Jean doesn't like (I use it because the compiler won't allow a constant expression on LHS of *assignment* which is a class of bug I seem to create). -dvd On Aug 21, 2009, at 12:07 AM, Clay Baenziger wrote: > Hi Jean, > Thank you for looking this thing over! My comments are in-line. > > New webrev: > > Full: > http://cr.opensolaris.org/~clayb/10740/webrev3 > > Diff from webrev 2: > http://cr.opensolaris.org/~clayb/10740/webrev_2_3_diff/ > > Thank you, > Clay > > On Thu, 20 Aug 2009, jeanm wrote: > >> Nit: libaiscf.py line 64: service is misspelled. > > Fixed > >> libaiscf_pymod/Makefile: copyright date should be 2009 > > Grr, I thought I'd gotten that but I've ensured it's changed now... > >> General: Please add header block comments for all new methods. Some >> are there, some aren't. > > I added header blocks to every function now I believe > >> libaiscf_instance.c line 411-412: Why the empty if? > > Good question, it's now set to if (ret != AI_SUCCESS) with no else. > >> libaiscf_service.c line201 and 209: Any reason why you did if (0 ! >> = function()) and not if (function != 0) ? >> Most people will be more used to seeing the later which makes it >> easier to read. > > Yes, it's a rather long block that we're checking though. We're > checking the return, so it's easier for one to see what we're > checking it against than burrying the != 0 down below. > >> Jean >> >> Clay Baenziger wrote: >>> Hi all, >>> Per some initial feedback from Jean and Dave I've come to round >>> two. Here are a few fixes for Python objects which had reference >>> counts which were wrong (memory leaks) and I've added support for >>> specifying the FMRI for AISCF() objects bringing them closer to >>> being fully general. >>> The diffs can be found at: >>> http://cr.opensolaris.org/~clayb/10740/webrev_1_2_diff/ >>> Or the full webrev at: >>> http://cr.opensolaris.org/~clayb/10740/webrev2/ >>> >>> Thank you, >>> Clay >>> On Wed, 19 Aug 2009, Clay Baenziger wrote: >>>> Hi all, >>>> I believe the code is stable, clean, builds correctly and >>>> ready for a full code review. I've implemented the last necessary >>>> for the library. Now, one can view an instance's state (online, >>>> offline, maintenance, etc.) and one can change the state too. For >>>> example: >>>>>>> libaiscf.AISCF().state >>>> 'online' >>>>>>> libaiscf.AISCF().state="DISABLE" >>>> [wait a bit (~5 sec), or it'll return online still] >>>>>>> libaiscf.AISCF().state >>>> 'offline' >>>> Webrev now at: >>>> http://cr.opensolaris.org/~clayb/10740/webrev/ >>>> >>>> Thank you, >>>> Clay >>>> On Tue, 18 Aug 2009, Clay Baenziger wrote: >>>>> Hi all, >>>>> I've written a Python<->C bridge for libaiscf. It provides a >>>>> few ways to interact with SMF. I'm looking for some folks to >>>>> look the code over for memory management issues, for any >>>>> potential SMF issues or any other issues others might see. This >>>>> code has not be whacked to be c-style happy, so don't worry >>>>> about that unless you really want. >>>>> I am having issues with the delete section of >>>>> AIservice_set_subscript(), if anyone has any suggestions what >>>>> might be happening (dbx stack trace included). This is triggered >>>>> when one tries to delete a property via: >>>>> del(libaiscf.AIservice(libaiscf.AISCF(),"test")['status']) >>>>> >>>>> Thank you, >>>>> Clay >>>>> Webrev is at: >>>>> http://cr.opensolaris.org/~clayb/10740/webrev_prelim1/ >>>>> How the module works: >>>>> --------------------- >>>>> To load the module, one runs >>>>> import libaiscf >>>>> Then to create an SMF instance object, one can run >>>>> (for svc:/system/install/server:default) >>>>> instance=libaiscf.AISCF() >>>>> (for svc:/system/install/server:someThingElse) >>>>> instance=libaiscf.AISCF("someThingElse") >>>> This has changed to: >>>> instance=libaiscf.AISCF(instance="someThingElse") >>>>> Further, to create an AI service object, one runs: >>>> For clarification, this is just an SMF property group >>>> representation >>>>> service=libaiscf.AIservice(instance,"serviceName") >>>>> To see a property key under the service, one can do: >>>>> service['boot-dir'] (which returns the string value or a >>>>> KeyError as a >>>>> dictionary would if the key doesn't exist) >>>>> To set or change a property under the service, one can do: >>>>> serivce['boot-dir']="/var/ai/service1_image" >>>>> All actions query SMF and no data is cached in case something >>>>> changes under the consumer. All actions are handed to SMF when >>>>> executed. Other functions implemented can be read in the PyDoc >>>>> output for the module, here attached. >> >>