[zfs-discuss] User level transactional API

2010-08-12 Thread Jason
Has any thought been given to exposing some sort of transactional API
for ZFS at the user level (even if just consolidation private)?

Just recently, it would seem a poorly timed unscheduled poweroff while
NWAM was attempting to update nsswitch.conf left me with a 0 byte
nsswitch.conf (which when the system came back up, had rather
unpleasant results).

While not on opensolaris (though I suspect the problem exists there),
I've also encountered instances where a shutdown while the ldap_client
process is in the middle of updating /var/ldap/ldap_client_file has
left the file empty.

In both instances, additional outages were incurred while things had
to be recovered manually.

And in both instances, code could be added to each utility to try to
recover from such a situation.  An easier (and would seem more
elegant) solution would be for both utilities to simply be able to
mark the 'truncate; write new data' sequence as atomic, which is
possible with zfs.  It's possible other utilities could benefit as
well (and would prevent them from all having to implement recovery
mechanisms when transitioning data files from one state to another).
___
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss


Re: [zfs-discuss] User level transactional API

2010-08-12 Thread Norm Jacobs


For single file updates, this is commonly solved by writing data to a 
temp file and using rename(2) to move it in place when it's ready.


-Norm

On 08/12/10 04:51 PM, Jason wrote:

Has any thought been given to exposing some sort of transactional API
for ZFS at the user level (even if just consolidation private)?

Just recently, it would seem a poorly timed unscheduled poweroff while
NWAM was attempting to update nsswitch.conf left me with a 0 byte
nsswitch.conf (which when the system came back up, had rather
unpleasant results).
While not on opensolaris (though I suspect the problem exists there),
I've also encountered instances where a shutdown while the ldap_client
process is in the middle of updating /var/ldap/ldap_client_file has
left the file empty.
In both instances, additional outages were incurred while things had
to be recovered manually.

And in both instances, code could be added to each utility to try to
recover from such a situation.  An easier (and would seem more
elegant) solution would be for both utilities to simply be able to
mark the 'truncate; write new data' sequence as atomic, which is
possible with zfs.  It's possible other utilities could benefit as
well (and would prevent them from all having to implement recovery
mechanisms when transitioning data files from one state to another).
___
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss


___
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss


Re: [zfs-discuss] User level transactional API

2010-08-12 Thread Nicolas Williams
On Thu, Aug 12, 2010 at 07:48:10PM -0500, Norm Jacobs wrote:
 For single file updates, this is commonly solved by writing data to
 a temp file and using rename(2) to move it in place when it's ready.

For anything more complicated you need... a more complicated approach.

Note that transactional API means, among other things, rollback --
easy at the whole dataset level, hard in more granular form.  Dataset-
level rollback is nowhere need granular enough for applications).

Application transactions consisting of more than one atomic filesystem
operation require application-level recovery code.  SQLite3 is a good
(though maybe extreme?) example of such an application; there are many
others.

Nico
-- 
___
zfs-discuss mailing list
zfs-discuss@opensolaris.org
http://mail.opensolaris.org/mailman/listinfo/zfs-discuss