A couple of months ago we discussed the issues surrounding zfs properties
which have platform specific implementations. The example given was
“sharenfs” which has platform-specific syntax and platform-specific
implementations. Having platform-specific syntax for these types of
properties means that importing pools across platforms can lead to
unexpected behavior. In order to ensure cross platform safety, I would like
to propose the concept of platform-specific properties.


Here are some high level goals:


1. Platform-specific properties are only processed on their respective
platform. If a platform-specific property does not exist for the platform
where the pool is imported then it’s treated as an unset property and the
default setting is used.

2. Converting a property to a platform-specific property should not break
existing scripts.

Administrators may rely on property names, like sharenfs, so
platform-specific properties should continue to use the same naming
convention

3. Platforms should be able to read and set platform-specific properties
for other platforms


Proposed Implementation:


To accomplish this, I propose that we introduce a property alias to our
current property scheme. The “alias” would only exist if a property is a
platform-specific property. Platform-specific properties would append the
operating system name to the property. For example, “sharenfs_Linux”,
“sharenfs_SunOS”, or “sharenfs_FreeBSD”.


In the case of the “sharenfs” property, the alias would remain as
“sharenfs” and the real property name would be “sharenfs_Linux”, for
example. When a user wants to “get” the value of “sharenfs” the system will
automatically map the property name to the platform-specific property.
Administrators can use the alias or the real property name when setting or
getting the property:


# zfs set sharenfs=on tank (preferred)
# zfs set sharenfs_Linux=on tank


Both result in the “sharenfs_Linux” property being set to “on” on-disk.
Reading a property does the reverse mapping, allowing users to get
“sharenfs” without having to know about the underlying platform-specific
name:


# zfs get sharenfs tank

NAME  PROPERTY  VALUE     SOURCE

tank  sharenfs  on       default


Having this mapping allows pools to safely import across platforms since
only properties that exist for that platform will be read and evaluated.


Administrators may also want the ability to set another platform’s
property, so in those cases setting the real property name should be
allowed:


ZFS running on a Linux system:

# zfs set sharenfs_SunOS=off tank
# zfs get sharenfs tank

NAME  PROPERTY  VALUE     SOURCE

tank  sharenfs  on       default


#zfs get sharenfs_SunOS tank

NAME  PROPERTY  VALUE     SOURCE

tank  sharenfs_SunOS  on       default


How do people feel about this approach? If we are to adopt this model, then
how should we handle converting existing properties to platform-specific
properties? Feedback and suggestions are welcome.


Thanks,

George

------------------------------------------
openzfs: openzfs-developer
Permalink: 
https://openzfs.topicbox.com/groups/developer/T6b50d98b3cf62715-Mfaa3006a379f2c07eed0d10a
Delivery options: https://openzfs.topicbox.com/groups/developer/subscription

Reply via email to