From: Jim Whitehead <ejw@ics.uci.edu> To: Versioning <ietf-dav-versioning@w3.org> Date: Thu, 1 Apr 1999 16:56:38 -0800 Message-ID: <003201be7ca3$aa294f20$d115c380@ics.uci.edu> Subject: Re: Version issues -----Original Message----- From: jamsden@us.ibm.com [mailto:jamsden@us.ibm.com] Sent: Thursday, February 18, 1999 9:17 AM To: 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 Subject: RE: Version issues ---------------------- Forwarded by Jim Amsden/Raleigh/IBM on 02/18/99 12:17 PM --------------------------- Jim Amsden 02/18/99 12:16 PM To: Chris Kaler <ckaler@microsoft.com> cc: Subject: RE: Version issues (Document link not converted) See below... Chris Kaler <ckaler@microsoft.com> on 02/18/99 11:49:53 AM To: Jim Amsden/Raleigh/IBM cc: Jim Amsden/Raleigh/IBM, gclemm@atria.com, ejw@ics.uci.edu, dgd@cs.bu.edu, Cragun.Bruce@GW.Novell.com, sridhar.iyengar@mv.unisys.com, Chris Kaler <ckaler@microsoft.com>, bradley_sergeant@intersolv.com Subject: RE: Version issues Not exactly. You are using the term "label" here which isn't in my scenario. I think of a revision label as a text string that I associate with a specific revision. In my example, I want to select revision 1 of foo.htm, revision 7 of bar.htm, revision 43 of bing.htm, and so on. I could go and set a label called "default" on each of those, and that is possibly a viable alternative to SETDEFAULT. However it means that portions of the label namespace are reserved. What I don't want to have to do is fetch an RSR, augment it to include revision 43 of bing.htm, and send it back to the server. This will not scale well (unless you use a label). <jra> You don't have to modify the RSR at all. Say you labeled revision 1 of foo.htm, revision 7 of bar.htm, revision 43 of bing.htm something like "Release1.0-beta". Then all you need in your workspace RSR is a label entry with "Release1.0-beta". Accessing any of these resources will match on the label Release.10-beta giving you what you want. Now say you have a new resource index.htm and you want your workspace to select revision 33. You would label revision 33 with "Release1.0-beta" and you're done. The revision selection rule doesn't change. Similarly, if you now want revision 44 of bing.htm, you just move the Release1.0-beta label to revision 44. Again, the RSR and workspace don't change. Alternatively, you could name revision 44 of bing.htm Release1.0-beta2 and put another label entry in your RSR. It all depends on what you want to do, and if you want to retain a workspace that maps to the old Release1.0-beta revisions. This brings out another primary benefit of workspaces: you can save and reuse them. For example, say you make a number of changes to the resources above, and label the ones that changed Release1.0. Now you can have one workspace that contains checkedout", Release1.0-beta, and latest.create and a new workspace that contains "checkedout", Release1.0, Release1.0-beta, and latest. Then just by changing the workspace, you can see a consistent set of resources in each release. All without configurations. There's no way to do this with simple default revisions. I think this is very simple, easy to use, easy to implement, and quite flexible for such a simple concept. I'm getting more and more convinced we need workspaces in level 1 to make level 1 useful. </jra> What Bruce and I are suggesting is that you can make Level 1 behave as if it has a default workspace (assuming we solve the multiple checkouts issue), and have it folding into Level 2 workspaces nicely without having Level 1 clients or servers have to understand what a workspace is. <jra> I think there are misunderstandings about how workspaces work that may be causing the our apparent disconnect. Using workspaces in level 1, and having some other mechanism that behaves like workspaces in level 1 doesn't make sense. Why not just support the workspaces? What would we be loosing? </jra> I agree with Bruce that workspaces belong in Level 2. <jra> Can't agree with this yet. </jra> Chris -----Original Message----- From: jamsden@us.ibm.com [mailto:jamsden@us.ibm.com] Sent: Thursday, February 18, 1999 5:15 AM To: Chris Kaler Subject: RE: Version issues Chris, I don't understand your example. I'll try to reword. You have 1001 versioned resources, 1000 of which have a revision labeled with a particular revision. Now you want the 1001'th resource to specify a revision. You have two choices. One, set the same label on the applicable revision of the 1001'th versioned resource. Your default workspace already contains this label (and maybe only this label, not 1000 other labels), so there's nothing more to do. Two, label the applicable revision of the 1001'th versioned resource with some other label and add that label to the front of the default workspace revision selection rule. In both cases, the default workspace will cause a URL to the any of the versioned resources to return the correct revision. This seems a lot simpler than setting the default revision on 1001 versioned resources! Chris Kaler <ckaler@microsoft.com> on 02/17/99 07:23:29 PM To: Jim Amsden/Raleigh/IBM, Bruce Cragun <BCragun.ORM2-1.OREM2@GW.Novell.com> cc: ietf-dav-versioning@w3.org Subject: RE: Version issues This is a great discussion! I used the word "complicated" and that probably isn't the right word. What I meant is that I have a store with 1001 files, 1000 of which have been set to specific versions and I want to set the last one to a specific revision, I'd rather issue a SETDEFAULT command for that specific URL than pull the full RSR which includes all 1000 rules, add one, and push the 1001 rules up to the server. Chris -----Original Message----- From: jamsden@us.ibm.com [mailto:jamsden@us.ibm.com] Sent: Wednesday, February 17, 1999 12:45 PM To: Bruce Cragun Cc: ietf-dav-versioning@w3.org Subject: RE: Version issues Bruce, I'm sorry to hear you weren't feeling well, but welcome back! No, you're getting it just fine. For your item 1 below, the default workspace does just what you want. You never even need to know its there. Recall the default workspace has a revision selection rule containing checkedout and latest. For item 2, the model currently allows access through a specific revision name which temporarily overrides the workspace, so this can be done too. If this was all you wanted, then probably workspaces for level 1 would be overkill. But, lets look at some other simple scenarios and see what would happen. Say a development organization finishes work on a milestone and wants some way to refer to the proper revisions. When work continues, these revisions won't necessarily be the latest revision because the resources may have changed in some appropriate way. Configurations solve this in level 2, but a common scenario for level 1 might be to come up with a label for the release and use this label on every revision that participates. So now every time you want to get the R1 revision for any of these resources, you have to remember the revision name and provide it on each access. That's not so bad though, and is the same thing as remembering a workspace that has checkedout, R1, and latest in its revision selection rule. So far this is a wash. Now say there's an R2 of the project as a whole. Some of the resources changed and some of them didn't. You could label all the participant revisions with R2 and that would work. But, after a while specific revisions might have a lot of labels on them making the revision history of many resource hard to manage. In addition users have to remember something new, use label R2 instead of R1. An alternative is to just label the ones that changed with R2 and put checkedout, R2, R1, and latest in the revision selection rule. Then you'll get the right versions without remembering R1, R2, ..., you only have to remember the same workspace you were using before the revisions changed. All users get updated just by updating their workspace. The default workspace revision selection rule can be changed to so that clients that can't or don't specify a revision will get the right revisions too. You could do this with default labels, but it would take a lot more work to update a property on every resource resetting its default when you can just add a single entry to a revision selection rule. Workspaces just provide flexibility and ease of use for level 1, not any new functionality. I think they make the clients simpler and simplify the user's interaction with the server. So they are useful for level 1 even though there aren't any activities or configurations. "Bruce Cragun" <BCragun.ORM2-1.OREM2@GW.Novell.com> on 02/17/99 03:10:40 PM To: ckaler@microsoft.com, Jim Amsden/Raleigh/IBM cc: ietf-dav-versioning@w3.org Subject: RE: Version issues It isn't that workspaces provide unneeded functionality for Level 1. It's just an abstraction that a) isn't in simple versioning models now, so would require learning and understanding, and b) isn't necessary. The way I envision it for a Level 1 implementation is this: 1. If I request a resource and specify nothing other than "get me this resource" the default is to give me the latest. Without branching and other Level 2 features, this is trivial. With Level 2 implementations, this is interpreted as the latest on the main line. 2. If I want something other than the latest, I include a Revision Id or a Label. This works fine for both levels, without any complexity whatsoever. Am I just not getting it? >>> <jamsden@us.ibm.com> 02/17/99 11:20AM >>> Comments below in <jra> tags. Chris Kaler <ckaler@microsoft.com> on 02/17/99 12:13:42 PM To: Jim Amsden/Raleigh/IBM cc: Subject: RE: Version issues I don't think level 1 servers want to deal with revision selection rules. I suspect they could be complicated. As well, we need to understand the semantics of parallel checkouts in the "default workspace". The current definition of a workspaces prohibits this and I think it is an important requirement for level 1. <jra> Level 1 revision selection rules don't need to be complicated at all. There are no activities or configurations, so the revision selection rule has checkedout and 0 or more labels. When a resource is accessed with a simple URL, this means, get the checked out revision if any, otherwise look for a revision that has a matchin label. It's hard to imagine anything simpler. </jra> Geoff and I started talking about the Revision-Id header yesterday. I think it is reasonable for a client to request version X of /foo/bar.htm. It seems a cumbersome requirement to have to set the revision of /foo/bar.htm in the default workspace to be X and get /foo/bar.htm. As well, this won't scale at all. Imagine one person trying to get version X and one trying to get version Y. We clearly need more discussion on this, but I don't yet see how we can eliminate a header that specifies a revision. I do believe that we could condense several headers into one... <jra> I also belive that users want to access specific revisions given the label. If they can assign a label, they should be able to access the resource that they assigned the label to. Recall that this capability is in the model. In the new version I moved the method to Repository.getResource(url : String, label : String = null) : Resource. There's also Repository.getResource(url : String, context Workspace) : Resource to access a resource in the context of a workspace. One reason you would want to do this is if you want to look at an old version, or compare two revisions, and don't want to change your workspace. My issue isn't that I didn't want access by labels, only that access when labels aren't specified should use Workspaces to resolve the URL. </jra> I, personally, think that RSR are interesting but probably too complicated for level 1 servers. We could say that the SETDEFAULT method is a "utility" method that modifies the workspace to use the specified revision of the specified resource. This allows us to still describe level 1 functionality in the context of level 2 workspaces. And for level 2, it provides a handy service for augmenting an RSR without having to pull it, modify it, and put it. <jra> Again, I don't think revision selection rules are complicate at all, especially for level 1 which doesn't have activities, merging, or configurations. The complexity results from introducing multiple revisions. Leaving workspaces out of level 1 will just move the complexity to the client or user who have to remember lots of labels on a resource by resource basis. This makes the server simpler, but not WebDAV. I stress again, what would anyone want to do with versioning level 1 that workspaces wouldn't support? What would workspaces include that would be considered too much for level 1? We need specific scenarios that address these issues. As you know, I am also keen to keep things simple. Its just I want the simplicity for the users and clients, not necessarily just for the server. </jra> Thoughts? Chris -----Original Message----- From: jamsden@us.ibm.com [mailto:jamsden@us.ibm.com] Sent: Tuesday, February 16, 1999 12:56 PM To: Chris Kaler Subject: RE: Version issues But if we keep the Revision-Id header and a SETDEFAULT method, this will conflict with level using a default workspace. I suggest we effectively use default workspaces for level 1. This doesn't mean servers have to implement them, only do something that makes them look like they work. Clients should be able to use level 1 services without being aware of workspaces. If activities and configurations are not in level 1, then the workspace only has to consider revision selection rules that include checkedout, latest, and revision labels. This should be pretty simple. Chris Kaler <ckaler@microsoft.com> on 02/16/99 03:21:30 PM To: Jim Amsden/Raleigh/IBM, ietf-dav-versioning@w3.org cc: Subject: RE: Version issues [CK] Comments below... A few issues came up at our last versioning working group meeting: 1. DAV versioning level 1 will still need to be a way of resolving access to versioned resources given just a URL (and not a label). If workspaces aren't supported, level 1 servers will have to provide some other way to resolve URLs to specific revisions, perhaps a default revision for each versioned resource. For level 2 servers that do support workspaces, this would result in two, potentially conflicting ways of performing URL mapping. This is a strong argument for including workspaces in level 1. What would anyone want to do with versioning level 1 that workspaces wouldn't support? What would workspaces include that would be considered too much for level 1? If there are no compelling answers to these questions, we should include workspaces in level 1, including the default workspace. [CK] I suggest we keep the Revision-Id header and the SETDEFAULT method. 2. Deleting a resource must explicitly state that the resource is removed from its parent collection; that is, the collection with which the resource is an internal member. Versioning complicates delete semantics. There are three things we might want to delete: an unversioned or working resource, a revision (and all its descendents?) of a versioned resource, a versioned resource and all its revision history. This must be done in the context of versioned and unversioned collections that contain the resource, or versioned resource as an internal member. The preferred way to do this would be to have add and remove methods on collections to create and delete resources as its the collection that controls the namespace. Unfortunately, DAV doesn't have those semantics, so we will have to find a work-around for versioning. [CK] I expect deleting a working resource to be the same as UNCHECKOUT. [CK] Deleting a versioned resource is up to the store. Some stores might [CK] just delete it. Some might create an "delete" version. I don't think [CK] we want to push a specific model on people. Especially since the [CK] DELETE method is about a resource and in no way describes the [CK] underlying repository actions. Actually, the current WebDAV spec is a little confusing about collections and their members. The current spec indicates collections contain URLs, not resources. But, there is the notion of internal members and referential members, and deleting a collection deletes all its internal members. So the collection behaves like it contains resources, not URLs. This issue will likely get more confusing when we add versioned resources, versioned collections, and multiple revisions. [CK]Your right -- some clarification here would be could. 3. It is not possible to automatically create workspaces or activities for either non-versioning clients, or versioning clients that don't specify them. Default workspaces and/or activities must be used. Creating a new workspace or activity on each request could cause resources that were manipulated in the previous request to disappear. [CK] If we say this is what "logically" happens on a Level 1 server then [CK] OK. But if the server must in fact do this, then I think the cost [CK] is too high since Level 1 clients don't care about this information.