Hello, I've updated the webrev a bit based on some review comments.
Please see the updated webrev: http://<http://alek_p.bitbucket.org/webrevs/2745/> alek_p.bitbucket.org <http://alek_p.bitbucket.org/webrevs/2745/>/<http://alek_p.bitbucket.org/webrevs/2745/> webrevs <http://alek_p.bitbucket.org/webrevs/2745/>/2745/<http://alek_p.bitbucket.org/webrevs/2745/> HTML version of the modified manpage: http://<http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html> alek_p.bitbucket.org <http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html>/<http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html> webrevs <http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html>/2745/<http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html> zfs <http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html>.1m.html<http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html> The biggest change from the earlier webrevs is that now the add_unique_option() call doesn't return anything, and will ignore duplicate props instead of failing. Again, this is Steven's FreeBSD patch with some slight modifications. -Alek > On Apr 8, 2014 2:03 PM, "Alek Pinchuk" <[email protected]> wrote: > >> Hello Matt, >> >> Thanks for taking a look. See response inline: >> >> >> On Sat, Apr 5, 2014 at 4:22 PM, Matthew Ahrens <[email protected]>wrote: >> >>> I just read the Oracle documentation. It sounds like they implemented >>> it so that "-o prop=val" implements the option C that I described: set >>> the property on the topmost filesystem, and "force inherit" it onto all >>> descendants (doing the equivalent of a "zfs inherit" on each of the >>> descendants). And I am guessing that they made "-x" do the equivalent of >>> "zfs inherit" after receiving the property. These semantics seems >>> reasonable, and I think *we should implement the same behavior*. I'm >>> also fine with dropping the "dataset#prop" stuff. >>> >>> >> In the interest of time I've dropped the "dataset#prop" stuff from the >> patch. If someone needs this features in illumos please post a webrev that >> adds it. >> >> >> >>> --matt >>> >>> >>> On Sat, Apr 5, 2014 at 4:14 PM, Matthew Ahrens <[email protected]>wrote: >>> >>>> Alek, thanks a lot for picking up these changes. I have a few comments >>>> / questions: >>>> >>>> ndmpd_zfs.c and be_create.c have Nexenta copyrights added to them. I >>>> just wanted to confirm that these changes were contributed by Nexenta. >>>> It's fine if so, it just stood out compared to the other files which have >>>> no copyright added (which is also fine). >>>> >>> >> Yes the changes in those two files are Nexenta sponsored work. I've made >> them while "on the clock". >> >> >>> >>>> zfs.1m: >>>> It looks like you've copied the documentation from the Oracle manpages. >>>> Are you sure that we are allowed to do that? I.e. what license grants us >>>> the right to reuse Oracle's documentation? >>>> >>>> >> I just ported what was in the FreeBSD patch. The manpage part was >> changing the FreeBSD markup to use the illumos manpage markup. Did not know >> that the manpage was lifted from Oracle. >> In light of this I "rewrote" the manpage for this patch. >> >> It is now probably too minimalistic but is not copied from Oracle. It >> would be great to get some feedback on what people would like to see in >> there. >> >> >>> I don't quite follow the documentation around the "-o" and "-x" flags: >>>> - if I specify "-o prop=value", it says it's as though I did "zfs set >>>> prop=value". So the property is marked as a "locally set" property, as >>>> opposed to a "received" property, right? >>>> - If I specify "-o prop=value", and it is an inheritable property and >>>> I am receiving a "-R" stream, is the behavior: >>>> - A. set the property on every filesystem (this seems bad) >>>> - B. set the property on the topmost filesystem that's part of the >>>> stream (descendants will inherit it or not depending on what their local >>>> settings are) >>>> - C. set the property on the topmost filesystem, and "force >>>> inherit" it onto all descendants (doing the equivalent of a "zfs inherit" >>>> on each of the descendants) >>>> - B or C seem OK, but you should document the behavior. >>>> Unfortunately, it looks like A is what was implemented. >>>> - if I specify "-x prop", it says it's as though the property was not >>>> present in the send stream. Given that, I don't understand the following >>>> sentences "If a received property needs to be overridden, the effective >>>> value will be set or inherited, depending on if the property is inheritable >>>> or not. In the case of an incremental update, -x leaves any existing local >>>> setting or explicit inheritance unchanged (since the received property is >>>> already overridden)." Why would a received property need to be overridden? >>>> The latter sentence implies that you're actually setting the property as a >>>> received property, and then overriding it with a "local inherit". Which is >>>> different from what would happen if the property was not present in the >>>> send stream. It sounds like it might be that "-x prop" for inheritable >>>> properties actually does the equivalent of "zfs inherit prop <every fs >>>> that's received>", unless there is already a local setting for that fs in >>>> which case it has no effect. It looks like what's implemented is that -x >>>> causes us to ignore that prop if it is in the stream. Please change the >>>> documentation to match. >>>> >>>> libzfs_sendrecv.c: >>>> 2043: should be "skipping receive of %s" >>>> >>> >> fixed >> >> 2935: can you explain the handling of has_exprops? It seems like (a) >>>> you could just inline nvlist_empty(exprops) where necessary, and (b) if >>>> (stream_wantsnewfs), has_exprops is uninitialized (dsname is also >>>> uninitialized) >>>> >>> >> fixed >> >> >>> 2567: I think that "props" is the properties from the send stream (not >>>> "current properties"), and "exprops" is the properties set on the command >>>> line (via -x and -o). I don't know what "external properties" means. >>>> >>> >> changed the comments, but the variable name is still exprops. I can >> change that (to cli_props?) if needed. >> >> Please see the updated webrev: http://alek_p.bitbucket.org/webrevs/2745/ >> HTML version of the modified manpage: >> http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html >> >> -Alek >> >> >>>> >>>> >>>> >>>> On Fri, Apr 4, 2014 at 9:11 PM, Alek Pinchuk <[email protected]>wrote: >>>> >>>>> Hello, >>>>> >>>>> I know members of the OpenZFS community (including my employer) would >>>>> really like to see this cross the goalline and be integrated. >>>>> >>>>> And since it looks like this effort has stalled (and I couldn't get a >>>>> hold of Steven) I've decided to port his FreeBSD patch to illumos and the >>>>> webrev is available at http://alek_p.bitbucket.org/webrevs/2745 >>>>> >>>>> I had to touch two files (ndmpd_zfs.c & be_create.c) that were not >>>>> part of the FreeBSD patch. >>>>> >>>>> The rest of the code is basically unchanged from Steven's. I think >>>>> I've addressed all of Matt's review comments from the previous email. >>>>> Please take a look at the webrev and let me know if there is anything else >>>>> that needs to be changed. >>>>> >>>>> This is what the illumos ZFS manpage looks like after the patch: >>>>> http://alek_p.bitbucket.org/webrevs/2745/zfs.1m.html >>>>> >>>>> I'll make sure Steven Hartland is the author of the patch submitted >>>>> for RTI. >>>>> >>>>> -Alek >>>>> >>>>> P.S. >>>>> git pbchk will complain since I didn't add any copyright to the files >>>>> changed by the FreeBSD patch since it didn't have any copyright additions >>>>> in it. >>>>> Copyrights: >>>>> usr/src/lib/libzfs/common/libzfs_impl.h: no copyright claim for >>>>> current year found >>>>> usr/src/lib/libzfs/common/libzfs_dataset.c: no copyright claim for >>>>> current year found >>>>> usr/src/cmd/zfs/zfs_main.c: no copyright claim for current year found >>>>> usr/src/lib/libzfs/common/libzfs.h: no copyright claim for current >>>>> year found >>>>> usr/src/lib/libzfs/common/libzfs_sendrecv.c: no copyright claim for >>>>> current year found >>>>> >>>>> >>>>> >>>>> On Mon, Feb 25, 2013 at 1:02 PM, Matthew Ahrens >>>>> <[email protected]>wrote: >>>>> >>>>>> Steven, thanks for following up on this. >>>>>> >>>>>> It would be really great if you could integrate this into illumos. I >>>>>> think all you would need to do is convert the manpage changes (illumos >>>>>> uses >>>>>> a different markup language for manpages), apply your diffs, build and >>>>>> test >>>>>> on illumos, and post a webrev for review on [email protected]. >>>>>> >>>>>> It would also be great if you could work with John Kennedy to >>>>>> integrate test for the new features into the zfs test suite. >>>>>> >>>>>> I took another look at your diffs and noticed just a few small things >>>>>> that could be improved: >>>>>> >>>>>> zfs.8 line ~2383 misspells "receive" >>>>>> line ~2420: >>>>>> +If a received property needs to be overridden, the effective value >>>>>> can be >>>>>> +set or inherited, depending on the property. >>>>>> I think you mean "will be set or inherited" (the user doesn't >>>>>> choose). You could also mention what it depends on ("depending on if the >>>>>> property is inheritable or not"). >>>>>> >>>>>> We shoud clarify that the filesystem/volume names must be specified >>>>>> as they existed on the sending system (as opposed to the names that they >>>>>> will be received into). >>>>>> >>>>>> zfs_main.c: >>>>>> since parsepropname() is used not just for properties (e.g. for -l), >>>>>> you might call it something like "addonce" and not have its error message >>>>>> use the term "property". >>>>>> >>>>>> props_override(): >>>>>> >>>>>> Can your calls to nvlist_add_*() ever fail? (e.g. due to the name >>>>>> already existing)? I don't think so, in which case you should >>>>>> VERIFY0(nvlist_add_*()), or better yet use the fnvlist_* routines. >>>>>> >>>>>> + char *sepp = strchr(propname, sepp); >>>>>> I don't think this will compile; you probably want "strchr(propname, >>>>>> sep)". Be sure to test this out. >>>>>> >>>>>> zfs_receive_one(): "skip" should be a boolean_t. >>>>>> >>>>>> Again, thanks for doing this Steven. Looking forward to having it in >>>>>> illumos and FreeBSD! >>>>>> >>>>>> --matt >>>>>> >>>>>> On Sat, Feb 23, 2013 at 6:02 PM, Steven Hartland < >>>>>> [email protected]> wrote: >>>>>> >>>>>>> Sorry its taken so long to get round to this, just had a really busy >>>>>>> number of months. Anyway all the changes have been made, see below >>>>>>> for individual details, patches are attached. >>>>>>> >>>>>>> ----- Original Message ----- From: "Steven Hartland" >>>>>>> >>>>>>>> ----- Original Message ----- From: "Matthew Ahrens" < >>>>>>>> [email protected]> >>>>>>>> >>>>>>>>> Here are some code-specific notes: >>>>>>>>> >>>>>>>>> >>>>>>>>> parsepropname(): I see that you're following the bad example set >>>>>>>>> by >>>>>>>>> parseprop() and parse_depth() of operating on optarg. It would be >>>>>>>>> better to explicitly pass the name of the property to parse, rather >>>>>>>>> than operating on the global optarg. To isolate the uglyness of >>>>>>>>> this >>>>>>>>> global variable, optarg should only be used within the function >>>>>>>>> that >>>>>>>>> calls getopt(). It would be great if you wanted to fix all of >>>>>>>>> these, >>>>>>>>> but if not that's OK. >>>>>>>>> >>>>>>>> >>>>>>>> I'll look into this thanks, as you said following the example ;-) >>>>>>>> >>>>>>> >>>>>>> Fixed this, and created a seperate patch for fixing the original >>>>>>> code too >>>>>>> see attached >>>>>>> >>>>>>> >>>>>>> zfs_receive() can't deal with an empty list of properties or >>>>>>>>> datasets? >>>>>>>>> >>>>>>>> >>>>>>>> Was just forward loading that logic at the time, will review and >>>>>>>> update >>>>>>>> if its doesn't make sense any more. >>>>>>>> >>>>>>> >>>>>>> Minor changes needed to faciliated this which have been done. >>>>>>> >>>>>>> >>>>>>> props_overrride(): >>>>>>>>> >>>>>>>>> this function could use some comments explaining what is doing. >>>>>>>>> >>>>>>>> >>>>>>>> Will do. >>>>>>>> >>>>>>> >>>>>>> Comment expanded to give more insite into what its doing >>>>>>> >>>>>>> >>>>>>> however I think that the following idiom for iterating over a nvlist >>>>>>>>> is more easily understood, because it keeps all the iteration >>>>>>>>> logic in >>>>>>>>> one place, and handles "continue" statements: >>>>>>>>> >>>>>>>>> for (nvpair_t *pair = nvlist_next_nvpair(nvl, NULL); >>>>>>>>> pair != NULL; >>>>>>>>> pair = nvlist_next_nvpair(nvl, pair)) { >>>>>>>>> ... >>>>>>>>> } >>>>>>>>> >>>>>>>> >>>>>>>> Not a problem will change. >>>>>>>> >>>>>>> >>>>>>> Changed >>>>>>> >>>>>>> >>>>>>> the variable you call "tods" would usually be named "atp" (the >>>>>>>>> pointer >>>>>>>>> to the "at" character). This is where you will have a bug when >>>>>>>>> someone does "-o userquota@username@pool/fsname=1g". >>>>>>>>> >>>>>>>> >>>>>>>> I wasn't aware that style of permissions existed, not sure they do >>>>>>>> in the version of FreeBSD I based this work on, but definitely >>>>>>>> something to get fixed. >>>>>>>> >>>>>>>> Any suggestions on an alternative syntax? >>>>>>>> >>>>>>> >>>>>>> Separator changed to # and code changes to sepp (the pointer to the >>>>>>> separator character) >>>>>>> >>>>>>> >>>>>>> It seems like the only way you could get a non-string, non-boolean >>>>>>>>> nvpair would be a programming error (i.e. bad user input could not >>>>>>>>> cause it). Therefore you should assert this is the case, rather >>>>>>>>> than >>>>>>>>> print an error message. >>>>>>>>> >>>>>>>> >>>>>>>> Yes I agree, will do. >>>>>>>> >>>>>>> >>>>>>> These are now asserts >>>>>>> >>>>>>> >>>>>>> It seems like you could omit the "if (!nvlist_exists([gd]xprops)" >>>>>>>>> check, because the -x props will be removed after this anyway. >>>>>>>>> >>>>>>>> >>>>>>>> It would but didn't want it going through all the effort of adding >>>>>>>> it >>>>>>>> only to remove it later for performance was my thinking. Do you >>>>>>>> believe >>>>>>>> this wouldn't result in any performance loss if removed? >>>>>>>> >>>>>>>> Likewise the "!nvlist_exists(doprops" check, because the dx props >>>>>>>>> will >>>>>>>>> be added after this anyway. So you can simplify the logic to: >>>>>>>>> >>>>>>>> >>>>>>> Given there will be little performance difference either way I've >>>>>>> decided >>>>>>> to keep it as it was so that the output in verbose case is what the >>>>>>> user >>>>>>> would expect. >>>>>>> >>>>>>> >>>>>>> Regards >>>>>>> Steve >>>>>>> >>>>>>> >>>>>>> >>>>>>> ================================================ >>>>>>> This e.mail is private and confidential between Multiplay (UK) Ltd. >>>>>>> and the person or entity to whom it is addressed. In the event of >>>>>>> misdirection, the recipient is prohibited from using, copying, printing >>>>>>> or >>>>>>> otherwise disseminating it or any information contained in it. >>>>>>> In the event of misdirection, illegible or incomplete transmission >>>>>>> please telephone +44 845 868 1337 >>>>>>> or return the E.mail to [email protected]. >>>>>>> >>>>>>> >>>>>>> ------------------------------------------- >>>>>>> illumos-developer >>>>>>> Archives: https://www.listbox.com/member/archive/182179/=now >>>>>>> RSS Feed: https://www.listbox.com/member/archive/rss/182179/ >>>>>>> 21175174-cd73734d >>>>>>> Modify Your Subscription: https://www.listbox.com/member/?&id_ >>>>>>> secret=21175174-792643f6 <https://www.listbox.com/member/?&> >>>>>>> >>>>>>> Powered by Listbox: http://www.listbox.com >>>>>>> >>>>>> >>>>>> *illumos-zfs* | >>>>>> Archives<https://www.listbox.com/member/archive/182191/=now> >>>>>> <https://www.listbox.com/member/archive/rss/182191/23976944-8a53fa63>| >>>>>> Modify <https://www.listbox.com/member/?&> Your Subscription >>>>>> <http://www.listbox.com> >>>>>> >>>>> >>>>> *illumos-zfs* | >>>>> Archives<https://www.listbox.com/member/archive/182191/=now> >>>>> <https://www.listbox.com/member/archive/rss/182191/21635000-ebd1d460>| >>>>> Modify <https://www.listbox.com/member/?&> Your Subscription >>>>> <http://www.listbox.com> >>>>> >>>> >>>> >>> *illumos-zfs* | >>> Archives<https://www.listbox.com/member/archive/182191/=now> >>> <https://www.listbox.com/member/archive/rss/182191/23976944-8a53fa63> | >>> Modify<https://www.listbox.com/member/?member_id=23976944&id_secret=23976944-d1dde2de>Your >>> Subscription >>> <http://www.listbox.com> >>> >> >>
_______________________________________________ developer mailing list [email protected] http://lists.open-zfs.org/mailman/listinfo/developer
