From: Jim Whitehead <ejw@ics.uci.edu> To: Versioning <ietf-dav-versioning@w3.org> Date: Fri, 2 Apr 1999 11:03:41 -0800 Message-ID: <000901be7d3b$85a0c140$d115c380@ics.uci.edu> Subject: Re: snapshots -----Original Message----- From: jamsden@us.ibm.com [mailto:jamsden@us.ibm.com] Sent: Thursday, April 01, 1999 8:23 AM To: Geoffrey M. Clemm Cc: jamsden@us.ibm.com; gclemm@atria.com; ejw@ics.uci.edu; dgd@cs.bu.edu; Cragun.Bruce@gw.novell.com; sridhar.iyengar@mv.unisys.com; ckaler@microsoft.com; bradley_sergeant@intersolv.com; ABabich@filenet.com; Jeff_McAffer@oti.com Subject: Re: snapshots See <jra> tags below. "Geoffrey M. Clemm" <gclemm@tantalum.atria.com> on 03/31/99 11:41:22 PM To: ckaler@Exchange.Microsoft.com cc: Jim Amsden/Raleigh/IBM, ejw@ics.uci.edu, dgd@cs.bu.edu, Cragun.Bruce@gw.novell.com, bradley_sergeant@intersolv.com, Jeff_McAffer@oti.com Subject: Re: snapshots I agree that a configuration should be a versioned resource, and that a configuration revision is a key element in a revision selection rule. I agree with Chris that it is worth having a simple term for "configuration revision" (if nothing else, those 8 syllables are quite a mouthful :-). I continue to strongly resist defining a snapshot as being just a special kind of collection that you can check out, freely add and delete members, and then check-in. This resistance is completely based on pragmatic implementation concerns, not on any logical problem. <jra> A snapshot isn't a collection, its a configuration created by taking a snapshot of a workspace. This might be a collection, and I suggest we make configuration a subclass of collection in the model as it has lots of collection semantics. However I think a configuration should ALSO be able to be created just like any other resource: create an empty one, add revisions to it, check it in if desired, etc. If a configuration is a kind of collection whose members must be references to revisions, then it would seem that updating a configuration is trivial. </jra> In particular, some key snapshots will commonly be very large, i.e. a snapshot of the entire web site. There are several important use cases where these snapshots will be taken frequently. For example, I update my web site several times a day, and I want to snapshot the web site immediately following each update, so that I can quickly roll back to any such state. <jra> Conversely there will be a number of small configurations that represent reusable collections of components that make up specific libraries or web applications. Users should have the freedom to create configurations either way depending on their needs. </jra> Now as a branch-based or activity-based CM provider, I have a very convenient mechanism for quickly creating a snapshot: I can just supplement the current RSR with a time-constraint, i.e. "the latest revision on branch-xxx before 3am on June 3". I can create lots of these snapshots very fast and very cheaply. But I *cannot* efficiently implement an arbitrary "put this revision in" or "take this revision out" operation, only a "snapshot the current state of the workspace" operation. <jra> How efficient does creating an empty configuration and adding revisions to it have to be? This is not something I think users will be doing on a minute-by-minute basis. Its more like something they do when a merge was done and its time to create a baseline for testing, distribution, archiving, etc. This is often done on a daily basis by many organizations. The actual operations should be no different than creating a collection and adding members. In fact, that's probably a fine implementation. </jra> Given the power and flexibility of revision selection rules, I don't see that the client is at all constrained by requiring that they snapshot the state of the workspace instead of directly manipulating the snapshot. In particular, you can use a label revision selection rule, and move labels around if you want to select an arbitrary set of revisions. <jra> Editing a revision selection rule and doing a snapshot is not a convenient or flexible way to create configurations. It is only one way, one that assumes everything visible in the workspace needs to be in the configuration. In my experience, this is generally not the case. Most work is done in a larger context of reuse libraries, reference materials, experimentation, incomplete work, etc. The workspace provides a view for all of these resources in the context of developing a web site, application, or document. When the work reaches a stable state, it is useful to select from this wider context the resources that make up the deliverable the user or users were trying to create. This is often very simple when updating a revision of a configuration that just needs to change a few revisions. The primary motivation for flexibility in creating configurations is to support effective reuse of resources. The usage model is you look around at all the things that are available (in your workspace view), and pick the ones that meet your needs. Then some modifications are done to update reusable resources to meet particular requirements (the deltas between what a resource does and what a reuser of that resource needs it to do). One can use a configuration as a grab-bag to put the revisions of the things they need to make up their application. </jra> So I will need a compelling set of use cases that can't be easily handled by existing protocol functionality before I am willing to accept an addition to the protocol that requires me to support something I cannot efficiently implement. <jra> See the Envy repository manager for Smalltalk. Configurations were one of its better features. </jra> Cheers, Geoff