On Thu, Dec 6, 2018 at 11:17 AM Matthew Ahrens <mahr...@delphix.com> wrote:

>
>
> On Thu, Dec 6, 2018 at 10:06 AM Josh Paetzel <j...@tcbug.org> wrote:
>
>>
>>
>>
>> On Thu, Dec 6, 2018, at 11:40 AM, Matthew Ahrens wrote:
>>
>>
>>
>> On Wed, Dec 5, 2018 at 9:21 PM Josh Paetzel <j...@tcbug.org> wrote:
>>
>> There was a proposal on this mailing list a week or so ago that sparked
>> some good discussion regarding setting feature flags at pool creation.  We
>> discussed this proposal on the last OpenZFS call and while we all agreed it
>> was a good idea, we felt the UI could use a little workshopping.
>>
>>
>> Thanks for leading this discussion, Josh!
>>
>>
>>
>> This proposal is simply a starting point for a discussion.
>>
>> The proposal is to add an optional flag at zpool create time.  -o
>> features=
>>
>> which can be set to one of the following 4 settings:
>>
>> all:  The default and the current behavior of zpool create.  This setting
>> enables all features supported by the in use OpenZFS version.
>>
>> compat: Enable async_destroy, empty_bpobj, filesystem_limits,
>> lz4_compress, spacemap_histogram, extensible_dataset, bookmarks,
>> enabled_txg, and hole_birth. This set of features is supported by
>> FreeBSD/FreeNAS 9.3 (July of 2014), ZoL 0.6.4 ( 0.6.5.6 was used in Ubuntu
>> 16.04 LTS), and Illumos in the early to mid 2014 era.
>>
>>
>> I think the term "portable" is more specific than "compat[ible]", so "-o
>> features=portable" is probably a better name.  Thanks to whoever suggested
>> that at the meeting Tuesday.
>>
>>
>> +1
>>
>> I think that the definition of "-o features=portable" needs to change
>> over time, as features become more widely available.  Do you have thoughts
>> on how specifically we should do that?
>>
>>
>> One thought would be:  As a delivery vehicle drops out of support we can
>> remove it from the list.  So say we have -o features=portable include
>> Ubuntu 16.04 LTS.  When support for Ubuntu 16.04 LTS expires we remove it
>> from the portable list.  Now, that directly contradicts the first pass at
>> this.  For instance FreeBSD (and FreeNAS) 9.3-R have long been out of
>> support by the "vendor"
>>
>
> I think that's a very conservative way to define it - essentially: you
> "portable means you can take this pool to any FreeBSD or Ubuntu that's
> supported by the vendor".  I would suggest we look at it from the other
> direction: "portable means that there's some version of FreeBSD, ZoL, and
> illumos that you can take your pool to".  More specifically we could say
> "it's in a released version of FreeBSD (e.g. FreeBSD 11.1), a released
> version of ZoL (e.g. Zol 0.7.2), and in the illumos master branch" (since
> there's no "releases" of illumos).  That said, I'm open to variations on
> this (e.g. should we say it's in a SmartOS release rather than illumos
> master?  Or it's in FreeBSD-STABLE vs a numbered release?)
>
>>
>>
Here's a more detailed proposal:

Add new options to "zpool create", "zpool upgrade", and "zpool set":
 - zpool create -o features=portable-20XX (yearly values)
 - zpool create -o features=portable
 - zpool upgrade -o features=portable-20XX
 - zpool upgrade -o features=portable
 - zpool set feature@portable=20XX
 - zpool set feature@portable=enabled

"-o features=portable-2016" means features that were supported by all
tier-1 platforms at the beginning of 2016.  This definition will not change
over time.  Specifically, on January 1, 2016, the following all supported
the features:
 - a numbered release of FreeBSD (specifically FreeBSD 10.2 for
portable-2016)
 - a numbered release of ZFSonLinux (specifically ZoL 0.6.5.3 for
portable-2016)
 - the code in illumos-gate as of 1 year prior (specifically Jan 1 2015 for
portable-2016).

Similar yearly portable values will be created at the beginning of each
year.

"-o features=portable" means that features that are currently supported by
all tier-1 platforms.  This definition will change over time.
Specifically, as of the current date, the following all supported the
features:
 - a numbered release of FreeBSD (currently FreeBSD 11.2)
 - a numbered release of ZFSonLinux (currently ZoL 0.7.12)
 - the code in illumos-gate as of 1 year prior (currently December 7, 2017,
commit b8e5ecd6 for bug 8895).

>From these definitions, users can make the following conclusions:
 - I upgraded this machine sometime in 2017, therefore if I want to bring a
pool to it, I can use "-o features=portable-2017" or earlier.
 - I case of an emergency or change in strategy, I want to be able to bring
this pool to another operating system.  I can upgrade or install the other
OS when I need to.  Therefore I can use "-o features=portable".

I think a reasonable addition to this would be to remember the last
"features=" value that was used with "zpool create" or "zpool upgrade".  If
it's a static value (portable-20XX), "zpool upgrade" would not do anything
unless you give a force flag.  If it's the dynamic value
("features=portable") then "zpool upgrade" would require a force flag
unless we're enabling a feature that's allowed by the current definition of
"portable".  So running "zpool upgrade <pool>" or "zpool upgrade -a" would
always be "safe" in that it respects the "features=portable*" setting last
made.

For now, I would be most comfortable with the default behavior of "zpool
create" remaining the same.  If we find something that we think works well
then I'd consider making "zpool create" imply "-o features=portable" by
default, and "zpool upgrade <pool>|-a" imply "-o features=portable" by
default.

--matt

------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/T562a2f6ecf883736-M9860ca063c98d9793c5434cc
Delivery options: https://openzfs.topicbox.com/groups/developer/subscription

Reply via email to