From: jamsden@us.ibm.com To: ietf-dav-versioning@w3.org Message-ID: <8525676A.004C29F3.00@d54mta03.raleigh.ibm.com> Date: Fri, 7 May 1999 09:51:22 -0400 Subject: Re: Configurations: A Compromise Proposal Geoff, This is where we were headed as the result of our meeting in Cary. I think there are some issues with this approach that bothered me then, and might still now. First a couple of questions: So a collection could have revisions and baselines? Revisions would specify the members of the collection and baselines would specify the members and selected revisions? One could add either a revision or a baseline of a collection to a configuration? The problems are: 1. How does one distinguish between revisions and baselines of a collection? Do they have different names? Belong to different collections of the versioned resource? Have a property indicating depth? Introducing a new concept introduces the need to distinguish it from existing concepts. 2. What does it mean to add a revision of a collection to a configuration? That would select members, but the user would have to have put each member into the configuration too or the configuration wouldn't select a revision for them and you'd get not found on every request for a member. This is why we did the recursion when putting a collection in a configuration. Configurations aren't that useful without it. 3. What's the difference between a configuration and a baseline collection? Looks like either could be used in a revision selection rule as they both map versioned resources to revisions. Looks like a configuration containing one collection and recursively all its members (whether the user put them in one at a time, or a method did them all at once) is exactly the same as a baseline of a collection. In summary, it looks like this solution introduces some issues and doesn't seem to add very much. What problem does it solve other than establishing when the revisions are selected? It seems like putting a single collection in a configuration recursively adding its members provides the same capability as baseline collections without introducing a new concept and a new object that has to be distinguished from collection revisions. I don't see any scaleability problems with this approach, and it seems simpler than the combined approach. Am I missing something? "Geoffrey M. Clemm" <gclemm@tantalum.atria.com> on 05/07/99 06:23:12 AM To: ietf-dav-versioning@w3.org cc: (bcc: Jim Amsden/Raleigh/IBM) Subject: Configurations: A Compromise Proposal Jim, Sankar, Chris, and others have made a good case for having a simple "collection" style configuration, where revisions are explicitly added and removed by a client. Jeff and I are firm believers in "a deep revision of a collection" as the approach that is also simple (in a different way) and scales up to handle large configurations. I think this is a case where "we're both right". These are two distinct approaches with different advantages, and our current attempt to force them into a single resource-type may be a mistake. So I'd like to propose the following: ---------------------------------------------------------------------- A "configuration" is just a "a collection of revisions". The user uses standard advanced collection protocol to add and remove revisions from this collection. The name of a member of a configuration is the "versioned-resource-id" of that revision. This guarantees that at most one revision of a versioned-resource can be a member of a given configuration. (Note: there is no "recursively adding members of a collection" semantics -- the only constraint on the revision set is one revision per versioned-resource). A "baselined-collection" is a special kind of "versioned-collection" which has a "baselines" property in addition to the "revisions" property that all versioned-resources have. The "baselines" are the "deep revisions" of the collection, while the "revisions" are the standard "shallow revisions". A new revision of a baselined-collectin is created in the standard way with a CHECKIN operation. A new baseline of a baselined-collection is created by adding a "Baseline" (or perhaps "Deep") header to the CHECKIN request. A "Baseline CHECKIN" creates a new baseline of a baselined-collection that contains the revisions of the members of the baselined-collection that are currently selected by the Workspace. ---------------------------------------------------------------------- A configuration is then the simple "set of revisions" that Jim, Sankar, Chris, et. al. have advocated. A baselined-collection provides the deep-revision semantics Jeff and I have advocated. These two concepts fit nicely together, in that adding a baseline of a collection into a configuration lets you mix and match deep revisions just as you would mix and match shallow revisions. This also gets back to a question that was raised in the design meeting about 7 months ago about whether a revision of a collection was deep or shallow ... the answer would now be "we support both". How does this sound? Cheers, Geoff