Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 28 Apr 2001 11:19:22 -0700
From:      Bakul Shah <bakul@bitblocks.com>
To:        Terry Lambert <tlambert@primenet.com>
Cc:        fs@FreeBSD.ORG
Subject:   Re: versioned files via snapshot evilness. 
Message-ID:  <200104281819.OAA00877@glatton.cnchost.com>
In-Reply-To: Your message of "Fri, 27 Apr 2001 17:28:25 -0000." <200104271728.KAA01251@usr07.primenet.com> 

next in thread | previous in thread | raw e-mail | index | archive | help
> > Likely my example was not clear.  The user gets both views:
> > as a file and a dir, depending on the open mode.  For
> > example, as a file when you do open("foo",...) and as a dir
> > when you do open("foo/", ...).  Either a trailing slash or
> > with an open mode or something to select between the two.
> 
> This is not permitted by POSIX.

Please see my previous response.  I already said posix won't
like this.  Not sure it would like kernel globbing either
(needed to expand "<file>;*" ).

> How would you enforce version limits on these trees?  In a flat
> space in VMS, it is rather trivial to set up an ACL that will
> limit you to 6 versions simultaneously, and delete version 9 when
> you create version 16.

I wouldn't.  When I used VMS I didn't find version limits
useful except to save space and for that I'd rather just use
the quota system.

> In your approach, there is no way to delete the tree out from
> under yourself safely.  You end up having to keep all versions
> (at least those with children) for all time.

rm foo/1/2/3    	# delete the latest version of foo 1.2.3
rm -rf foo/1/2/3/	# delete all sub-versions of foo 1.2.3

But undoubtedly there are other holes. I am well aware that
to turn this on-the-spur-of-the-moment idea into reality
requires a proper, careful design that handles all the
boundary conditions and corner cases.  And it may turn out to
be a non-trivial task.  I simply wanted to point out that the
concept of file namespace can be extended in a uniform manner
to cover this and other cases -- of course, it is a lot
harder to extend a well defined interface naturally than to
simply add another incompatible interface.

Doesn't Atria or Clearcase or Rational have a versioning
filesystem?  Though I know nothing about it.

> For a UNIX version of this, without a new FS type that internally
> implemented record-oriented storage (and the concommitant ability
> to defragment the FS space), you would need to copy the entire
> file.

That is why in my example I envisioned a `cvs' filesystem.
I would simply use foo,v (rcs) or s.foo (sccs) or something
like it.  I wouldn't want this facility to be pervasive where
every filesystem must provide this support.

> You can't even break it up on disk blocks and share them, since
> you can never tell when a user space program has implied a
> multi-stage commit operation and gathered it into itself, and
> had data change -- and then change back.

I believe the trend is to divorce the on-disk representation
of a file (or a filesystem) from a *view* provided on it.
This is already the case in a limited sense -- ffs, ex2fs,
xfs and so on all provide pretty much the same interface.
A single file ala rcs or sccs provides one way to store the
data -- certainly not as efficient as VMS.  But as long as
the _view_ is the same one should allow any representation,
including caching whole files for frequently used versions of
a file.

> Further, opening a file for write implied the versioning operation.
> Only the last close indicated that subsequent opens would result
> in a new version (this was overridden, in the case of opening a
> specific version).  Your implication of a tree of versions _must_
> necessarily destroy the ability to open without creating a new
> version, when closing following a write/trucate operation.

If the view semantics are to not create a new version until
there is an actual write (a reasonable expectation), one can
implement that though it would be more complex.

-- bakul

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-fs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200104281819.OAA00877>