Hi Clay, Is this rc2 webrev supposed to be the latest and greatest with all of the changes? I am not seeing installadm.c anymore, though that was in an earlier webrev.
Sue Clay Baenziger wrote: > Hi Dave, > I've fixed the webrev, you'll find the newest one (with the head > merged at http://cr.opensolaris.org/~clayb/AI_server/webrev_final_rc2. > I've filed the following bugs to address comments not addressed in the > code at this time: > Bug 3953 Need protocol in A/I webserver/client > Bug 3954 Should limit queue sizes for programs interacting with AI_database > Bug 3955 Please use sanity in setting and getting variables from classes > > Please let me know what you think. > Thank you, > Clay > > On Wed, 15 Oct 2008, Dave Miner wrote: > >> Clay Baenziger wrote: >>> Hi Dave, >>> Thank you very much for taking the time to code review this! My my >>> please let me know if I'm okay to push as soon as you can. My current >>> webrev is at: >>> http://cr.opensolaris.org/~clayb/AI_server/webrev_final_rc0/. >>> >>> Thank you, >>> Clay >>> >> I started to re-review, but stopped, as there are significant >> discrepancies between your responses and what appears in the webrev, so >> I think there was an error in generating the webrev. Additionally, this >> needs to be merged against the current gate, proper bug numbers added to >> the commit comments, and a crying need to run cstyle. Please do all of >> these things before asking for another review, we won't get to closure >> without them. >> >> Some additional comments on your responses in-line below, and comments >> at the end on pieces I hadn't seen before. >> >>> On Thu, 9 Oct 2008, Dave Miner wrote: >>> >>>> General stylistic issues: >>>> >>>> - inconsistent with the existing python code in the project, which uses >>>> 8 character indent. >>> PEP 008 says to use 4 spaces, as a recommendation by the Python community >>> and I see some continuation indents in the distro constructor use 4 >>> spaces, however, most of the code uses tabs instead of spaces. Again the >>> PEP (and -t/-tt flags to Python) strongly discourage mixing tabs and >>> spaces. I'd like to defer to the Python community's recommendations here; >>> but have implemented the standard of tabs and 4 space continuation indents >>> which the DC and other AI Python code follows. >>> >> Establishing style is a collective decision, so you should work with the >> others on the team to sort out a recommendation for style going forward. >> I have no problem using the PEP standards, but I'm more interested in >> consistency among our own code. I also continue to see a lack of >> consistency in what you've don here; continuations are all over the map >> still in AI_database.py, for example. >> >>>> - use more vertical whitespace to separate stanzas within functions and >>>> methods to improve readability >>> I've tried to add some for readability's sake. >>> >> I'd like much more. Long functions such as findManifest, getCriteria, >> etc., need to be much more readable than they are. >> >>>> - much more commenting, especially of algorithms and assumptions. My >>>> feedback would likely be more extensive if I better understood the >>>> theory of operation in many of these functions. >>> After realizing I was misguided to have been told to tone my comments back >>> I went through commenting >>> >>>> AI_database.py >>>> >>>> 95: "needs" >>> Thank you >>> >>>> 104, 125: I don't understand the perceived advantage in combining both >>>> set and get in a single method, which is generally undesirable. This >>>> would be much clearer as separate methods, which is basically how it's >>>> written, anyway. >>> The difference between response and finished are for if success and we >>> have a response, or an error condition. They could probably be condensed >>> with a better more wholistic approach. I don't see the advantage to >>> breaking them out to be a set_response and get_response method though. It >>> seems to be a more traditional way of coding it up, versus a way using >>> Python's interesting control flow abilities. (Jack persuaded me that using >>> set and get methods would be advantageous for being able to init things >>> like _ans in the class initializer.) I think this can be done in an RFE >>> as it's a maintainability enhancement as I perceive it. >>> >> Bluntly, I don't regard maintainability issues as RFE's. I don't see >> any "interesting control flow abilities" here; the same thing could be >> done (equally badly) in any language I've used. Using presence or >> absence of an argument to completely switch the sense of a method from >> get to set is bad design anywhere. >> >>>> 137: is there a need to use timeouts to prevent the service from being >>>> unresponsive? >>> If we don't get a database response it won't be gracefully handled and >>> CherryPy will spawn a new thread per request (or publish_manifest will get >>> killed by the user). Though, to prevent stuck processes just hanging out >>> forever, I did change this to 15 seconds. >>> >> A comment as to why 15 seconds would be helpful. >> >>>> 166: please put errors on stderr >>> Ah yes; I would agree, but CherryPy doesn't seem to pass STDERR. I should >>> be using a more robust logging interface, but for the prototype there >>> simply isn't time. I've taken that out of the comment, however, as this is >>> a bigger problem. The print function shouldn't be used anywhere where it >>> shouldn't be replaced with a logging subsystem. >>> >> I need to see an RFE filed for that. Karen can probably help you with >> logging since she just overhauled this in DC. >> >>>> 170: a comment as to why IMMEDIATE would be useful >>> I added: >>> # use SQLite IMMEDIATE isolation to prevent any writers changing >>> # the DB while we are working on it (but don't use EXCLUSIVE since >>> # there may be persistent readers) >>> >>>> 184,190: there's no error information we can pass on from the execute() >>>> that would help diagnose the problem? >>> Hi Dave, I'm not sure but some exceptions raised will pass an error string >>> in. I've modified the function to pass that error string in case it's of >>> use. >>> >>>> 232ff: please add whitespace between comment delimiter and comment >>> Thank you >>> >>>> 238-end: lots of inconsistent (and excessive) continuation indents to >>>> clean up. this applies to other files and I won't repeat for them. >>> I've been trying to indent to the last parenthesis of the block above, >>> but now follow pretty strictly using a 4 space indent per Jack's >>> explanation of the standard. >>> >> As noted above, need to get more strict. >> >> at line 250: "instance" >> >>>> 272,312: a comment here seems necessary >>> I have commented the use of the SQL HEX() function in >>> getSpecificCriteria() and thoroughly commented getCriteria() >>> >> I see no comment related to HEX() in the webrev. >> >>>> 353: a boolean flag would be preferable to an indirect test on length of >>>> a string >>> I could test off getCriteria.next() != None instead of the string length. >>> It's equivalent to my intention of if queryStr != "SELECT " (as it was set >>> on 346). I've put in the test against getCriteria for now. >>> >> My comment was against the line: >> 353 if len(queryStr) > 7: >> >> which still remains, now as 361 in the new webrev. >> >>>> 371: you're not providing the default here, that would be at a higher >>>> level, whose behavior shouldn't be assumed here >>> Thank you for catching the layering error. I've changed the comment >>> appropriately. >>> >> I still see the original comment in this webrev. >> >> 399,410: the error messages here still are a layering violation >> >>>> webserver.py >>>> >>>> general comment here is that some versioning of the protocol should be >>>> considered, perhaps something like the IPS scheme >>> I think that's a good RFE that should be filed and done before this hits >>> 1.0 >>> >> It's a bug, actually. Please file it. >> >> this file also continues to need more vertical spacing in the larger >> functions. >> >>>> 174ff: excessively indented continuation here. >>> Yes, I was trying to align with the abspath, but shouldn't have for the >>> serve_files options. >>> >>>> 177,187: perhaps we should define a specific x- mime type for our usage? >>> The download is useful for admins testing with a web browser so that it >>> doesn't try to interpret it. I don't know if they would try downloading >>> the file were it a different type? Plus we intend to download this file >>> with the A/I client so it seems to make sense. Perhaps, I'm a bit confused >>> what advantages a specific MIME type could buy us though? >>> >> I think it would help to validate that you aren't directed to a server >> (perhaps due to admin mis-configuration) that's providing something >> other than what you're expecting. Any unknown x- type would seemingly >> provide the same web browser advantages you get from x-download. >> >>>> 192: so what are we attempting to return here? >>> This is the XML-ish criteria list for the AI client to know what's >>> requested of it. However, perhaps splitting this up wouldn't be a bad >>> idea. Also, this shouldn't be testing against the postData string, but >>> using cherrypy handlers for POST versus GET (as per >>> http://www.cherrypy.org/wiki/RequestObject). >>> >>> I've added a comment for now >>> >> Again, I don't see this comment in the posted webrev. >> >>>> 246: seems like a questionable redirection to me (218 seems a little >>>> less odd, though still somewhat questionable). A 404 seems more >>>> appropriate for what looks like a malformed request. >>> I agree for 246. I've changed not to a 404, but a 403 with the message >>> "Index listing denied". >>> >>>> 269,271: these should be configurable >>> I have made these command line options >>> >>>> Comments below are against revised version from >>>> http://cr.opensolaris.org/~clayb/AI_server/webrev1/ >>>> >>>> publish_manifest.py >>>> >>>> Will this support publishing via non-CLI interfaces as presently >>>> structured? >>> A U/I can import publish_manifest and the much of the work in >>> parseOptions() can be done by the U/I, but the main logic of publishing >>> the manifest would be in publish_manifest not the U/I. >>> >>>> 1: missing CDDL >>> CDDL'ized >>> >>>> 132,143,159,169: so what Python would that be? Is it one we actually >>>> need to run on? >>> The thought was that A/I could be independent of Solaris at some point >>> (i.e. run on Linux/OS X or Windows). It seems IEEE754 support in Python >>> is a bit unstable and I preferred to play it safe for now. >>> >>>> 135: Assuming we do actually need this, I don't really see the point in >>>> a separate upper-bound value for MAC vs. non-MAC. It's just a big number. >>> Good point I don't either. >>> >>>> 156ff: need much more commenting here about what's happening >>> Yes, checkCriteria() is a scary, scary function. I have broken it up to >>> make it much more approachable. >>> >>>> 214: "determine" >>> Thank you, I'll remember to aspell(1) more often >>> >>>> 303: not obvious why they must be the same; if so, why would we bother >>>> copying in the new one? >>> We don't have a way to support having two manifests with the same name, so >>> we warn the user that there's a difference but that the criteria was still >>> added to the database already. There was a bug, we shouldn't copy the >>> new manifest in if it's already (same or not). >>> >>>> 307ff: how about doing this join() once and not 5 times? >>> Yes, this does clean up the code nicely. >>> >>>> 401: this comment doesn't appear to match the code >>> My intention for the comment matches the code but it's unclear. I change >>> the comment and simplified it >>> >>>> 440: comment here, please >>> I changed tag to a more descriptive name and added comments >>> >>>> 539: "separate" >>> Yes late night my spelling goes down hill >>> >>>> 561: "validation" >>> A lot... >>> >>>> verifyXML.py >>>> >>>> 1: missing CDDL >>> CDDL'ized >>> >>>> 38: "receive" >>> Zzz... Zzz... Type... Type... Zzz... Zzz.. Thank you again for the idea to >>> run aspell against my code >>> >>>> Dave >>>> >> So what's the AI.db file? >> >> usr/src/cmd/Makefile: >> 36: Alphabetize lists such as this. This also hasn't been merged >> against the current version yet. >> >> usr/src/cmd/ai-webserver/Makefile: >> continuations in Makefiles conventionally are indented to align with the >> item they're continuing, and we don't spread content that fits in a >> single line across a continuation. Consult existing Makefiles for >> stylistic examples. Copying existing practice is much preferred over >> making up your own. >> >> 95 et al: 744 is a most unusual mode. 755 for executables, please, >> though in general we just don't bother with setting modes in these rules >> and do so on the install phase. >> >> default.xml >> why do we set swap size in the default manifest? Can't we use the >> algorithms in the orchestrator to compute this automatically in the >> default case? >> >> SUNWinstalladm-tools/prototype_com: >> I don't think the schema files belong in /var; something in /usr/share, >> perhaps, seems more appropriate. This would affect Makefile.cmd and >> Targetdirs. >> >> installadm.c: >> >> There are so many cstyle errors here I hardly know where to begin, but >> there are incorrect continuation indents in all of the new code. The >> rules are simple: 4 space indent on a continuation line, period. Style >> of switch statements is also incorrect: cases are to be at the same >> indent level as the switch. Please review a copy of the C style >> guidelines from http://www.opensolaris.org/os/community/on/, and run >> cstyle on your code before sending for review. >> >> 782,815: incorrect usage of MAXPATHLEN. These aren't path names, so use >> a constant specific to your usage. >> >> >> Dave >> _______________________________________________ >> caiman-discuss mailing list >> caiman-discuss at opensolaris.org >> http://mail.opensolaris.org/mailman/listinfo/caiman-discuss >> > _______________________________________________ > caiman-discuss mailing list > caiman-discuss at opensolaris.org > http://mail.opensolaris.org/mailman/listinfo/caiman-discuss