Difference between revisions of "Feature Flags"
Behlendorf (talk | contribs) |
(osx has no project quota) |
||
Line 709: | Line 709: | ||
| style="background-color:lightsalmon" | no | | style="background-color:lightsalmon" | no | ||
| style="background-color:lightsalmon" | no | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color:lightgreen" | yes | | style="background-color:lightgreen" | yes | ||
| style="background-color:lightsalmon" | no | | style="background-color:lightsalmon" | no | ||
Line 731: | Line 731: | ||
| style="background-color:lightsalmon" | no | | style="background-color:lightsalmon" | no | ||
| style="background-color:lightsalmon" | no | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color: | | style="background-color:lightsalmon" | no | ||
| style="background-color:lightgreen" | yes | | style="background-color:lightgreen" | yes | ||
| style="background-color:lightgreen" | yes | | style="background-color:lightgreen" | yes |
Revision as of 07:14, 13 February 2020
ZFS on-disk formats were originally versioned with a single number, which increased whenever the format changed. The numbered approach was suitable when development of ZFS was driven by a single organisation.
For distributed development of OpenZFS, version numbering was unsuitable. Any change to the number would have required agreement, across all implementations, of each change to the on-disk format.
OpenZFS feature flags – an alternative to traditional version numbering – allow a uniquely named pool property for each change to the on-disk format. This approach supports:
- format changes that are independent
- format changes that depend on each other.
Compatibility
Where all features that are used by a pool are supported by multiple implementations of OpenZFS, the on-disk format is portable across those implementations.
Features that are exclusive when enabled should be periodically ported to all distributions.
Reference materials
ZFS Feature Flags (Christopher Siden, 2012-01, in the Internet Archive Wayback Machine) in particular: "… Legacy version numbers still exist for pool versions 1-28 …".
zpool-features(5) – illumos
zpool-features(7) – FreeBSD
Feature flags implementation
Feature Flag | Read-Only Compatible |
DragonFlyBSD | FreeBSD | Illumos | Joyent | NetBSD | OmniOSCE | OpenZFS | OpenZFS on OSX | ZFS on Linux | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
zfsport | 11.2.0 | 11.3.0 | 12.0.0 | head | master | master | main | r151028 | r151030 | master | master | 1.9.0 | 1.9.1 | 1.9.1-rc1 | master | 0.7.13 | 0.8.1 | master | ||
bookmark_v2 | no | no | no | no | no | no | yes | yes | no | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes |
encryption | no | no | no | no | no | no | yes | yes | no | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes |
resilver_defer | yes | no | no | no | no | no | yes | yes | no | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes |
async_destroy | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
bookmark_written | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
bookmarks | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
device_removal | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
embedded_data | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
empty_bpobj | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
enabled_txg | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
extensible_dataset | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
hole_birth | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
livelist | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
log_spacemap | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
obsolete_counts | yes | no | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
redacted_datasets | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
redaction_bookmarks | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes |
spacemap_histogram | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
spacemap_v2 | yes | no | no | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
zpool_checkpoint | yes | no | yes | yes | yes | yes | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes | no | yes | yes |
filesystem_limits | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
multi_vdev_crash_dump | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
edonr | no | no | no | no | no | no | yes | yes | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
lz4_compress | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
sha512 | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
skein | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
large_blocks | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
allocation_classes | yes | no | no | no | no | no | yes | yes | no | no | no | yes | yes | yes | yes | yes | yes | no | yes | yes |
large_dnode | no | no | no | no | no | no | yes | yes | no | no | yes | yes | yes | yes | yes | yes | yes | yes | yes | yes |
project_quota | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | no | yes | yes |
userobj_accounting | yes | no | no | no | no | no | no | no | no | no | no | no | no | no | no | no | yes | yes | yes | yes |
Table legend
- no = not implemented
- yes = implemented
Source: [1] as of 20190726