Hi Sue,

Thanks for the comments. The status on the issues you addressed seem ok 
to me.

thanks,
sarah
***


> Hi Sarah,
> 
> I'll address the comments towards the bottom.
> 
> On 12/18/09 09:30, Sarah Jelinek wrote:
>> Hi Keith and all,
>>
>> My code review comments for the library code. I reviewed all files in:
>>
>> libtarget_pymod
>> libtd
>> libzoneinfo
>>
>> If a file is not listed I had no comments for it. I will send my 
>> review of the profile code later today.
>>
>> thanks,
>> sarah
>> ****
>>
>> libtarget_pymod/discover.c:
>>> 69         //PyThreadState *_save;
>>> 70         //_save = PyEval_SaveThread();
>>
>> These need to be removed or used.
>>
>>
>>> 319         if (attrl != NULL)
>>>  320                 td_attribute_list_free(attrl);
>>
>> Not sure you need to check for attrl != NULL here. Looks like the 
>> function will do the right thing, either way. Ditto for other places 
>> you are checking for this.
>>
>>> 483         disk = Tgt_NEW(TgtDisk);
>>>  484         if (disk == NULL) {
>>>  485                 PyErr_NoMemory();
>>>  486                 goto TgtDisk_Create_CLEANUP;
>>>  487         }
>>>  488 
>>
>>
>> disk.c:
>>
>> Seems like you could just return the PyErr_NoMemory() here. No need to 
>> do the 'goto'. I don't think you need to call the Py_XDECREF() on this.
>>
>>>   97         PyObject *blocks = NULL; /* Python2.4 missing uint64_t 
>>> fmt spec */
>>
>> This reference to an issue in python 2.4 should no longer be an issue, 
>> right?
>>
>>>  136         /* Python 2.4 has no scan code for a potentially 64-bit 
>>> value */
>>
>> So, does python 2.6 have scan code for a potential 64-bit value?
>>
>> instantiate.c:
>>
>> -General: I am a bit confused here. Why do we have libti code in the 
>> libtarget_pymod library? I know we need to translate the text 
>> installer objects to libti type of attributes, but in looking at the 
>> libti_pymod, it seems that there are already functions in there to do 
>> what we need to do. Specifically,  py_ti_create_target(). You would 
>> have to translate the text installer object tuples to the TI 
>> attributes and create a new tuple. Is there a reason you felt that 
>> setting up the nvlist and calling ti_create_target() here was 
>> required, instead of setting up the tuple and calling the libti_pymod 
>> functions? If there are gaps in the libti_pymod code, or you plan to 
>> merge this in, can you please file a bug to move/merge this code with 
>> that as we move forward?
>>
>>
>> partition.c:
>>> 33 /*
>>>   34  * NOTE: libdiskmgmt has labelled partition data incorrectly. We 
>>> correct it here
>>>   35  *       in the Python names. TgtPartition data structure still 
>>> use the
>>>   36  *       libdiskmgmt naming scheme. Here is the conversion:
>>>   37  *
>>>   38  * libdiskmgmt   | Python | example
>>>   39  * --------------+--------+----------------
>>>   40  * id            | number | 1
>>>   41  * type          | id     | 0xBF (Solaris2)
>>>   42  * typetypething | type   | ???  (Primary)
>>>   43  *
>>>   44  * libdiskmgt doesn't yet recognize anything but Primary 
>>> partitions but will
>>>   45  * soon change.
>>>   46  */
>>
>> Two things.. if there are bugs in libdiskmgt, please file a bug 
>> report. The last comment is no longer valid, so please remove.
>>
>>>  57  * XXX until extended partitions project goes back 1-4 are only 
>>> partition
>>>   58  *     "id" libdiskmgmt understands.
>>>   59  */
>>>   60 #define MAXID           4
>>>   61 #define STR_MAXID       STRINGIZE(MAXID)
>>
>> This needs to be changed. And, we should use the fdisk defines for 
>> this, not our own. Extended partition support has been integrated into 
>> libdiskmgt.
>>
>>>  502         assert(result != NULL);
>>
>> We are asserting here that there are always slice objects as children 
>> of a partition. Is this always true?
>>
>> General question:
>> -Is it possible to have more than one 'label' in python for goto's? It 
>> seems like the answer is no, but I see that we have errors handled 
>> sometimes inline and sometimes with a 'goto'.  I actually find this 
>> confusing. Especially, when we have an error label but we don't always 
>> use it. For example:
>>> f (newblk % geo->cylsz != 0) {
>>>  603                         PyErr_SetString(PyExc_ValueError,
>>>  604                             "\"blocks\" must be a multiple of "
>>>  605                             "tgt.Geometry.cylsz");
>>>  606                         return (-1);
>>>  607                 }
>>
>> Is there anyway to combine this with the other label and use a goto?
>>
>> Another general comment: Sometimes in the code we comment the 
>> reference counting manipulation that is done, and sometimes we don't. 
>> Perhaps we should be more liberal in the areas where it might be 
>> confusing. For example:
>>
>>> 663 static PyObject *
>>>  664 TgtPartition_get_id(TgtPartition *self, void *closure)
>>>  665 {
>>>  666         PyObject *result = PyInt_FromLong((long)self->id);
>>>  667         if (result == NULL)
>>>  668                 return (PyErr_NoMemory());
>>>  669         return (result);
>>>  670 }
>>
>> The call to PyIn_FromLong returns a new reference, but this may not be 
>> obvious to other folks. Not a deal breaker, just a suggestion.
>>
>>>   40 #define MAXNUM          15
>>
>> Is there a define somewhere we can use that is more 'official'. Kind 
>> of like what is provided in fdisk.h?
>>
>> slice.c:
>>
>> It looks like the definition for
>>>  200 #define SET_BOOL(nm) self->nm = (nm == Py_True) ? 1 : 0
>>
>> SET_BOOL is the same wherever it is used. I think it would be cleaner 
>> to use #defines in the header files as required and only if the macro 
>> is really different to the #define and #undef inline.
>>
>>>  214  *     type:    type object, do *NOT* assume it is TgtSliceType!
>>
>> This comment implies you are going to do some checking with regard to 
>> the 'type' value passed in,but in the code it is simply
>> assumed to be a slice object:
>>  225         self = (TgtSlice *)type->tp_alloc(type, 0);
>>
>> But, it's certainly possible I misunderstand how tp_alloc() works.
>>>  439         if (self->user != NULL)
>>
>> This check isn't required.
>>>  518         return (PyLong_FromLongLong(self->blocks));
>>
>>
>> Sometimes you return the value from these calls, and sometimes you 
>> check for NULL and return PyErr_NoMemory():
>>
>>>  550         if (result == NULL)
>>>  551                 return (PyErr_NoMemory());
>>
>> It would be good if this was consistent, unless there is a specific 
>> reason that this is different in some cases.
>>
>> zpool.c:
>> -The printfs are for debugging I presume? It would probably be better 
>> ro have an explicit debug value that can be set and print accordingly.
>>> 114                 if (self->mountpoint == NULL) {
>>>  115                         PyErr_NoMemory();
>>>  116                         return (-1);
>>>  117                 }
>>
>> This type of error in this file seems like a good candidate for a goto.
>>
>> Nit:
>>>  219  *     type:    type object, do *NOT* assume it is TgtDiskType!
>>
>> This comment is wrong, it is a TgtZFSDataset type.
>>
>> libtd/td_dd.c:
>>> if (errn != 0 || slice_stats == NULL) {
>>> 1965             DDM_DEBUG(DDM_DBGLVL_ERROR,
>>> 1966                 "ddm_get_slice_stats(): Can't get slice inuse 
>>> data, "
>>> 1967                 "for %s, err=%d\n", name, errn);
>>> 1968             return (errn);
>>> 1969         }
>>
>> Shouldn't this be a && here? If the err == 0, then returning and error 
>> seems incorrect, even if the slice_stats are NULL. Not sure if this 
>> can happen.
> 
> Per our chat, will change this to just check errn != 0 here.
> 
>> libzoneinfo_pymod/libzoneinfo.c:
>>
>> -Kind of an unfortunate name for this, at first I thought that this 
>> code had to do with Solaris Zones. maybe consider renaming. Not a huge 
>> deal, just a thought. I suppose you modeled the name after the system 
>> libzoneinfo?
> 
> Yes. Although I am also not enamored with the name libzoneinfo for the 
> reason you mentioned, I felt the consistency in naming with the system 
> library was important.
> 
> Thanks for the comments,
> Sue
> 
>> sarah
>> ****

Reply via email to