Date: Thu, 9 Dec 1999 17:03:43 -0500 Message-Id: <9912092203.AA02694@tantalum> From: "Geoffrey M. Clemm" <geoffrey.clemm@rational.com> To: ietf-dav-versioning@w3.org In-Reply-To: <1999Nov15.105439.1250.1384867@otismtp.ott.oti.com> Subject: Re: Comments on draft-ietf-deltav-versioning Great review, Tim! Comments below. (If anyone things anything in here merits a discussion thread, please generate a separate thread per discussion topic, with an appropriate new title). From: Tim_Ellison@oti.com (Tim Ellison OTT) -------------------- draft-ietf-deltav-versioning-01.1 October 22, 1999 Clemm & Kaler Section 1.2 Terms Revision Label "The same revision label may be assigned to many different versioned resources." Being pedantic, the label is assigned to a revision of the versioned resource. Fixed. Section 1.2 Terms Default Workspace "workspace may be a modifiable" should read "workspace may be modifiable" Fixed. Section 1.2 Terms Baseline 1) "the revision of every members of" should read "the revision of every member of" Fixed. 2) So this implies that all reachable resources must be revisions, not non-versioned resources, not working resources. Yes. 3) Should state that only the top-level namespace is captured in a baseline. Not sure what you mean by this ... please explain. Section 2.1 Creating versioned resources "When a resource is created in a versioned collection ... it is created as a versioned resource." Why? So that a versioned collection only contains versioned resources. Otherwise various key optimizations cannot be applied to reflecting versioned collections in multiple workspaces. Section 2.2 Modifying a Versioned Resource 1) I think the comparison drawn in paragraph 2 is unhelpful, since lock and checkout semantics are so different. It doesn't help to explain anything about checkout. In the past, folks have asked for a compare/contrast between using locking and using versioning. 2) para 2. last sentence. "an update to a checked out resource is only visible to" should say that it may be visible to other clients, i.e. it is not necessarily visible since it depends upon their RSR's. Changed this to say "only visible to clients using that workspace". Section 3.4 Versioned Resource Properties 1) In general it would be useful to declare the default values, where they exist, throughout this section (i.e. single-checkout, auto-version, etc.) 2) "the following additional properties" additional to what? guess=resource Removed the term "additional". Section 3.4.5 DAV:single-checkout "when the ... property ... is set" should read "when the ... property ... is true" Fixed. 3.4.7 DAV:baselines Would be helpful to define the members of the collection. Will do (not done yet). 3.5 Revision Properties Additional properties to what? guess = versioned resource Removed the term "additional". 3.5.2 DAV:predecessor 3.5.3 DAV:successors Would be helpful to state that the href value is workspace independent. Probably be worth doing a pass to make sure this is made clear in all contexts where it is true. Perhaps define a term like "stable-href", and use it consistently? 3.5.8 DAV:activity "href)" should read "(href)" Fixed. 3.6 Working Resource Properties Additional properties to what? guess = revision Removed the term "additional". 3.6.2 DAV:checkin-policy 1) "if the resource is identical to" How is identical going to be defined? That there has been no PUT/PROPPATCH's successfully applied to the resource, or that props and content are bytewise indistinguishable ... or server defined? Got rid of the "identical-..." checkin policies. 2) The DTD allows for ANY element as a checkin-policy. The spec should state what a server should do if it does not support the checkin policy, and which are mandatory. Added "must fail if not recognized". 3.7 Workspace Properties Additional properties to what? guess = resource Removed the term "additional". 3..2 DAV:revision-selection-rule 1) para. 1 first sentence "versioned resource is selected" should read "versioned resource that is selected" Fixed. 2) para 2 "If it selects a particular revision, it may also detect a conflict" IMHO an RSR that is in conflict should not select any revision. Done. 3) last para. but 3 re: DAV:rsr-latest. Here latest means chronologically latest, in section 1.2 Terms Activity latest means last in the succ/pred lineage. It should be consistent (and IMHO it should be succ/pred lineage). If DAV:rsr-latest referred to succ/pred lineage, it would be ambiguous whenever there was branching, and wouldn't achieve the desired effect, namely "the last revision anyone ever created". 3.8 Activity Properties 3.9 Baseline Properties Additional properties to what? guess = resource Removed the term "additional". 3.9.2 DAV:predecessor "baseline is the baseline that selected by" ?? does not make sense. Why are all these baseline properties maintained anyway? So that you can determine baseline history, and branch/merge them. 3.10 Repository Properties Additional properties to what? guess = resource Removed the term "additional". 3.10.4 DAV:configurations "creation of new activities" should read "creation of new configurations" Fixed. 3.10.6 DAV:default-workspace Should be the default for all versioned resources that do not specify their own default workspace (ref. 3.4.2) i.e. the default default. I was tempted to do this, but I thought it might be simpler to just say that all versioned resources in a single repository must have the same default workspace (i.e. the one specified by their repository). I'll go with whatever people want here. 4.1 GET Should define the effect of GET on new types introduced by versioning, if only to say that it is unspecified. Added "it MUST fail". 4.2 PUT para. 2 "PUT MUST fail unless the versioned resource has a DAV:auto-version property and no Target-Selector has been specified." Why is it conditional on no Target-Selector being specified? this seems strange. The idea here is that if someone that is specifying a Target-Selector, they should know about versioning and it probably is an error on the part of the client/user if they are trying to modify something that is not checked out. 4.2 PUT para 3. "... whose initial revision ..." Why would the initial PUT cause a revision to be made, and not a working resource? In principle, there is nothing special about the first PUT that means it should be preserved in version history. To ensure that only versioned resources are members of versioned collections. 4.2 PUT para 4. "... and no Workspace or Revision-Selection header ..." 1) We should agree on the terms for the header, be it 'Target-Selector' or 'Revision-Selection' (of course this will likely be split into separate headers soon.) Put back as "Target-Selector" for now. 2) Why must the PUT fail if the workspace and revision-selection have not been specified? Which sentence in 4.2 does this refer to? 4.3 PROPFIND I found this section confusing. I didn't understand what it was trying to say. This is the "property resource" report functionality. We agreed to move this into a separate REPORT, so I'll try to make it clearer when it is rewritten there (not done yet). 4.5 COPY para 2. Why can't we allow COPY to succeed for all but versioned resources? I predict clients and servers will interpret the COPY differently no matter how hard we try to specify it, so I think we're better off just disallowing it. 4.6 DELETE para. 2 Should specify what happens if the DELETE does not specify 'all bindings' --> fail? The Adv. Col group got rid of the AllBindings header, so I just deleted this sentence. 4.9 LOCK "A write lock on a versioned resource checks out the target ... into the default workspace" No -- this cannot be true. OK, it's gone. 4.10 UNLOCK "An UNLOCK ... checks in ..." No, please, no! Lock/unlock, checkin/checkout should be orthogonal. Also gone. 5.1 MKRESOURCE 1) para. 1 "... standard data containers ..." Can we give these a friendlier name, I suggest 'ordinary resource'. Jim Whitehead suggested this name ... Jim: is this change OK? 2) precondition #2, "a DELETE request ... MUST succeed" there is no explicit DELETE request in this case. Same comments for the semantics section. It was implied by the Overwrite. The Adv. Col team decided to get rid of the Overwrite header for MKRESOURCE, so I just did the same for us, and this precondition goes away. 3) postconditions. The properties on the resource will be those specified AND default values. Are we going to give servers some flexibility as to what the default values of the properties are? 4) response marshaling. Change 412 (precondition failed) to 405 (method not allowed) so that it is the same as MKCOL. No longer have this error case, so just deleted it. 5.1.1 New DAV:resourcetype Values 1) should state that the values MUST be (i.e. caps) Done. 2) why do the values all end in '-resourcetype' this seems redundant? We have other elements with the name "workspace", "activity", etc, which have different DTD's. 3) what is the new type "DAV:versioned-resource-resourcetype" refer to? Does a resource change type when it is put under version control? Can we no longer distinguish collections and ordinary resources? The type of a versioned resource is DAV:versioned-resource-resourcetype. The type of a revision of a versioned resource will be collection, or whatever. 5.1.2 Example - MKRESOURCE 1) Given that the resource types are elements line 10 should read <D:resourcetype><D:workspace-resourcetype/></D:resourcetype> Fixed. 2) The Request-URI was /project1, the response href is bar.html ;-| Fixed. 3) The response description is strange. The response is a conflict on the property setting, and the description says that the existing resource could not be deleted. This description would cause the entire response to return 412 (or 405 proposed). Replaced this with a "200 OK". (Why make life complicated :-) 5.2.1 DAV:report-request 1) The DTD is wrong, it should be as follows: <!ELEMENT report-request (available-reports-request | ... )> <!ELEMENT available-reports-request EMPTY> etc. Fixed. 2) The document is inconsistent about the name of the element 'available-reports-request' often calling it ''...-report-...' (singular). All references need to be fixed up. Fixed. 5.3 Available REPORT Heading level too high within the document, since 5.1 is MKRESOURCE and 5.2 is REPORT, this section should be 5.2.x I cheated in a few places to avoid 4 levels of section nesting ... this was one such place (:-). 5.3.2 DAV:available-report-response 1) The available reports are not a comma separated list Fixed. 2) The DTD should be re-written as shown above for 5.2.1 Fixed. 3) The available reports DTD should have a '*' on the end since a server may support multiple report types. Fixed. 5.4.2 DAV:conflict-report-response The DTD calls it conflict(s) plural. All references in the document need to be fixed up. Fixed. 5.4.3 to 5.4.5 are logical subparts of 5.4.2 so should be subordinate heading levels. Another 4 level avoidance result. 5.4.4 DAV:common-ancestor Should spec what is returned if there is no common ancestor. All revisions of a versioned resource have a common ancestor (the root revision, if nothing else). 5.5.1 DAV:compare-request First line ends with two periods. Fixed. 5.5.3 DAV:added 5.5.4 DAV:deleted 5.5.5 DAV:changed What is the ANY directive for? If it is for expansion maybe should be multiple ANYs. Fixed. 5.5.6 Example - Compare REPORT The response indicates that the target 'myOtherCollection' was both added and deleted. What does that mean (for a target)? I just deleted the "delete" of 'myOtherCollection'. 6.1 CHECKOUT 1) para. 1 line 3. should not imply that the server may select a random workspace, but explicitly state that the server will choose the default workspace of the versioned resource, or if none, the default workspace of the repository. This is the "workspace token" usage of a workspace. If the client requests a checkout with no workspace, the server allocates one for it. 2) Precondition #4. Why do we have this precondition? Otherwise the working resource will disappear when it is checked in. 3) Precondition #5 How can this be true? see 3.8.3 for a contradiction. I have no idea what I had in mind here ... just deleted it. 4) Request marshaling should mention body marshaling? I believe we agreed in Washington to get rid of the property update aspect of CHECKOUT, so I fixed it by removing the body. 5) Semantics -- now the server is allocating a workspace for the new working resource ... ? If the request did not specify one, yes. 6) Postcondition #4 There is no such property defined (DAV:checked-out). Fixed (should be DAV:working-resources). 7) Response marshaling, should not be DAV:href (just href) Fixed. 8) Consider changing the 201 created response to 200 ok? I'm happy either way. It does create a new working resource, which could imply a 201 is better? 9) Does the entire CHECKOUT fail if a property update (in the request body) fails? Got rid of the property update. 6.1.1 Example - CHECKOUT 1) Groovy example, with the resource on a different server to the workspace. I thought this was out of scope for this spec. Otherwise we need new and interesting failure conditions. The protocol should work just fine with the workspace and versioned resource being on different servers, but I didn't see this in the example?? In any case, what failure conditions would you like to see for this case? 2) Response shows <d:workspace> property ... there is no such property on a working resource. Should it be workspaces (plural) in which case that is a collection. Added the DAV:workspace property to working resources (it should have been there from the start). 6.2 CHECKIN 1) Precondition #1. Why? why not allow "default", c.f. checkout or explicit working resource URL Replaced this with "must identify a working resource". 2) Precondition #3. should read "if DAV:identical-abort is the DAV:checkin-policy" 3) Semantics para. 3 should read "... if the selected working resource is not a copy ..." Got rid of identical-abort. 4) Postconditions #3. "... a selected activity ..." should read "... a current activity ..." I think "selected activity" is right. A version is checked in as part of the activity it was checked out to, not the one that is current at checkin time. 5) Postconditions should mention current label. Done. 6) Consider changing status code 201 created to 200 ok? I could go either way. (It does create a new revision resource.) Any other votes? 6.2.1 Example - CHECKIN Maybe the response should return the revision URL or at least the revision ID? Fixed it to return the revision URL of the new revision. 7.1 Target-Selector para. 3 should acknowledge that there may be no revision selected. This is true for all the paragraphs ... why do you think it is important to point it out in para. 3? (Not disagreeing with you, just asking for clarification). Again, great review! Cheers, Geoff