On Sat, Apr 5, 2014 at 4:22 PM, Matthew Ahrens <mahr...@delphix.com> 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*.
>
>
Do you have a response to the above comment?  I would like to see a strong
argument for why we should implement a feature that on the surface appears
to be the same as an Oracle ZFS feature, but is actually subtly different.


On Thu, Apr 17, 2014 at 11:33 AM, Alek Pinchuk
<develo...@lists.illumos.org>wrote:

> 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.
>
Since the behavior is pretty obvious (the identical options are useless but
harmless, just like if I specify any other option multiple times, e.g.
-ee), how about not printing anything in this case?


> Again, this is Steven's FreeBSD patch with some slight modifications.
>
>
> -Alek
>
>> On Apr 8, 2014 2:03 PM, "Alek Pinchuk" <pinchuk.a...@gmail.com> wrote:
>>
>>> Hello Matt,
>>>
>>> Thanks for taking a look. See response inline:
>>>
>>>
>>> On Sat, Apr 5, 2014 at 4:22 PM, Matthew Ahrens <mahr...@delphix.com>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 <mahr...@delphix.com>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 
>>>>> <pinchuk.a...@gmail.com>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 
>>>>>> <mahr...@delphix.com>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
>>>>>>> z...@lists.illumos.org.
>>>>>>>
>>>>>>> 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 <
>>>>>>> kill...@multiplay.co.uk> 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" <
>>>>>>>>> mahr...@delphix.com>
>>>>>>>>>
>>>>>>>>>> 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 postmas...@multiplay.co.uk.
>>>>>>>>
>>>>>>>>
>>>>>>>> -------------------------------------------
>>>>>>>> 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/?&;> Your Subscription
>>>> <http://www.listbox.com>
>>>>
>>>
>>>
> *illumos-developer* | 
> Archives<https://www.listbox.com/member/archive/182179/=now>
> <https://www.listbox.com/member/archive/rss/182179/21175174-cd73734d> |
> Modify<https://www.listbox.com/member/?member_id=21175174&id_secret=21175174-792643f6>Your
>  Subscription
> <http://www.listbox.com>
>
_______________________________________________
developer mailing list
developer@open-zfs.org
http://lists.open-zfs.org/mailman/listinfo/developer

Reply via email to