Date: Fri, 16 Apr 1999 23:59:27 -0400 Message-Id: <9904170359.AA23444@tantalum> From: "Geoffrey M. Clemm" <gclemm@tantalum.atria.com> To: jamsden@us.ibm.com Cc: ietf-dav-versioning@w3.org In-Reply-To: <85256756.0000DF62.00@d54mta03.raleigh.ibm.com> Subject: Re: WeDAV Versioning Summary From: jamsden@us.ibm.com See <jra> below. Geoff, you didn't have any issues with the section on locking? Ooops. Yes, I did, but just noticed I forgot to mention them, thanks for the reminder! I'll add them below. ... Perhaps "creates an initial revision that is a copy of that resource". <jra> I changed it to "creates a versioned resource and converts the resource into the initial revision". I didn't want to use copy because that would imply a WebDAV copy which would mean the original resource somehow still exists. Good point. I agree that your rewording is better. There is a distinguished, floating label called "latest" which always refers to the latest revision in a given activity. The default semantics of adding an activity to an RSR is "latest in the activity", so there is no need for a "latest" label. In addition, when there are multiple parallel activities adding revisions to a versioned resource, it would be ambiguous which one "latest" referred to. <jra> By "latest" I mean latest in time regardles of activity. I agree this has limited usefulness. Using some "mainline" activity (like DSEE) would probably be better. I had included it for servers that don't implement activities. Is this OK? I'd rather just have "latest" be a revision-selection-rule element, rather than requiring that there actually be a label named "latest". And when describing the semantics of this rsr element, you wouldn't want to use the phrase "in a given activity", since this is latest across all revisions, not latest in a given activity. Your wording in the subsequent "revision selection rule" section is just fine though. A revision of a collection is modified by adding or removing member URLs. Using the new "bind" semantics, "by adding and removing bindings to other versioned resources". <jra> Should be bindings to other revisions not versioned resources? I'd like to leave this description pretty generic where the "members" of the configuration are somehow revisions identified by some means. The term "member" has very specific semantics in the base WebDAV protocol, so we probably shouldn't use it to refer to some more generic concept. But I agree with your underlying point ... this is not a standard kind of binding, but rather a "versioning binding" which has the property that it is a binding to a versioned resource but that operations on that versioning binding are applied to the working resource or revision selected by the workspace for that working resource. Then we can cover the details in the model and protocol after bind/reference issues are resolved. OK? </jra> That makes sense, but lets use a different term than "member", to avoid confusion with the technical meaning of member as defined by WebDAV. How about "versioning reference" or "versioning binding" ? Probably worth noting here that "latest" is just based on modification time, and is independent of the predecessor/successor relations created by checkin/checkout. <jra> Done. See comments above about latest too. This looks like you agree with those concepts. Yes, definitely. I'd say "a default activity", rather than "the null activity". "Alternatively, the default workspace can contain the current-label "default", and with label=default in the version selection rule". <jra> Actually, the workspace could contain both. They're not mutually exclusive. I'd prefer to just have one or the other, to keep the label-based approach distinct from the activity-based approach, but I agree that you logically could have both. <jra> The default activity isn't the same as the null activity. Instead I sould have said no activity. I'm not sure there is a default activity anymore. Is there? No, so I agree that "no activity" would have been better. But I'd require that one have either a current activity or a current label in order to do a checkout/checkin. The server is allowed to use an existing workspace instead of creating a new workspace, so this should probably be "the server allocates a workspace for the checkout, possibly reusing an existing one, and returns this workspace as a `checkout token' for use by the client to identify the working resource." <jra> I dont' think this is the case. Only users can reuse workspaces (tokens or not) because reusing a workspace implies being able to see working revisions checked out in that workspace. You wouldn't want a server automatically making someone else's checkouts visible to you. </jra> I believe this *must* be the case to achieve interoperability between a "token-based" client and a "workspace-based" server. A workspace on a workspace-based server is far too expensive for it to have to create a new one on every checkout. Since a token-based client will only use that "workspace" to access the single URL that it checked-out, this shouldn't be a problem. Also, the "lock" that a token-based client will commonly put on the working resource will ensure that the working resource is not modified by another client. So the fact that other clients may have checkouts in that workspace would not be a problem. I'd avoid the word "contain" here, since I still believe we do not want to model configurations as collections, but rather as "opaque resources" that can be placed in a workspace to recover a saved configuration. This allows far greater flexibility in implementation by the server. But that is a topic of current discussion (:-). <jra> The words member and contain are intended to be generic and have their usual semantic meaning rather than implying a configuration is a kind of collection or not. Whether we make this distinction depends on whether or not we need to inherit collection semantics for configurations. One way to do this is to have the configuration members simply be URLs that are references to revisions of versioned resources. However, this is not the only way a configuration could be implemented. So I'm not that stuck on if its a collection or not. Its just nice to reuse concepts where possible as it is a good indication the original concept was useful. </jra> I'm concerned that if we say a "member", readers will assume that we are using the formal WebDAV meaning of the term. Probably "contain" is fine, since I don't believe that is a formally defined term in the base WebDAV spec. Locking Versioned Resources Locking a versioned resource prevents any revision from being checked out in any activity. That's fine. Locking a revision of a versioned resource prevents just that revision from being checked out in any activity. I don't think that is right. A lock is a combination of locking the state of a resource, and locking the identification of the URL with that resource. Locking the state of an immutable revision is redundant, since this is guaranteed by its being immutable. Locking the state of a mutable revision is a reasonable thing to do, so that's worth mentioning. Having the "single-checkout" property on a revision makes sense. This ensures that if you checkout that revision, nobody else can. But I see no important use case that is addressed by having a "nobody can check out this revision" semantics for a lock, and I see the bad effects of someone locking a resource (e.g. to prevent change to a mutable revision), and thereby mistakenly preventing any work to be done based on that revision. Locking an activity prevents any revisions from being checked out in that activity. Good. Locking a workspace prevents any checkouts in the current activity of that workspace (similar to locking the current activity), and prevents changes to the workspace revision selection rule. I wouldn't add the "prevents checkouts in the current activity" clause. The client can explicitly lock that activity if they want to, but shouldn't be forced to just because they wanted to lock the RSR. Cheers, Geoff