Re: Review of protocol 04.3

From: Geoffrey M. Clemm (geoffrey.clemm@rational.com)
Date: Thu, Apr 27 2000

  • Next message: Tim Ellison/OTT/OTI: "DAV:auto-version"

    Date: Thu, 27 Apr 2000 17:30:25 -0400 (EDT)
    Message-Id: <200004272130.RAA05181@tantalum.atria.com>
    From: "Geoffrey M. Clemm" <geoffrey.clemm@rational.com>
    To: ietf-dav-versioning@w3.org
    Subject: Re: Review of protocol 04.3
    
    
       From: "Tim Ellison/OTT/OTI" <Tim_Ellison@oti.com>
    
       Review of:
    	draft-ietf-deltav-versioning-04.3
    	Clemm, Kaler
    	April 7, 2000
    
    Thanks for the detailed review, Tim!
    
    Note: Tim was actually reviewing an "04.25" draft that I had mailed
    him for his scenarios work, which is different from the 04.3 draft
    that I uploaded a couple of days ago.  I'll upload an 04.4 draft with
    Tim's suggested changes, to minimize confusion.
    
       Here's a few comments from reading the protocol doc.   This is by far the
       most coherent and readable version!  The comments are mostly nits.
    
    Great!
    
       ---------------------------------------
    
       1.2 Terms
       Revision Label
    
       Remove second period at end of sentence.
    
    Done.
    
       - - - - - - - -
       2.1 Creating and Modifying...
       para 4.
    
       The description of checkin/out and locking is making a misleading lack og
       distinction between client and workspace.  There are many models without a
       1:1 client and workspace, which makes this description invalid.
    
    Got rid of it.
    
       - - - - - - - -
       2.3 Naming a Revisions: ... -> Naming a Revision:...
    
    Done.
    
       - - - - - - - -
       2.4 Accessing a Versioned...
    
       Discussion of default revision is excluding the posibility of working
       resources being selected.
    
    Yes, the default target is always a revision in core versioning.
    
       - - - - - - - -
       3 Versioning Properties...
       Sentence two:  "When a property cannot.."
    
       Duplication of description in section 1.3 -- (but you may be inclined to
       leave it in to reinforce the point.)
    
    Yes, I had questions about what "protected" meant when it was only defined
    in one place.
    
       - - - - - - - -
       3.1.2 id Syntax
       Sentence two: "The id characters..."
    
       Should read something like.  "An id is a sequence of characters.
       When an id is marshaled in the header of a HTTP request the
       characters are encoded using the UTF-8 encoding scheme."  Since
       when ids are in the body they should use the encoding defined by
       the enclosing XML doc.
    
    Done.
    
       - - - - - - - -
       3.1.5 stable URL
       Sentence two: "A MOVE request..."
    
       This sentence is out of place here.  This should be moved to the
       description of the MOVE method, and replaced by something like
       "A stable URL is represented by an href element as defined in section 12.3
       of [RFC2518].  "
    
       The terms section (1.2) should include "Stable URL" along the lines of:
       "A stable URL is a server-defined URL that identifies either a versioned
       resource or a revision of a versioned resource.  Clients cannot control the
       target selection for a stable URL using the Target-Selector header."
    
    Added it to the terms section, but used somewhat different language.
    Let me know if the new language is OK.
    
       - - - - - - - -
       3.2 Versioned Resource...
       Sentence two: The DAV:versioned-resource element may -> MAY
    
       I believe this means 'optionally' rather than 'in some cases'.
    
    Done.
    
       - - - - - - - -
       3.2 Versioned Resource...
       Consider putting the last sentence in a new paragraph.
    
    Done.
    
       - - - - - - - -
       3.2.4 DAV:auto-version
       Sentence one.
    
       I know that I've lobbied for this unsuccessfully before, but...
       I would strike out the words 'without a Target-Selector header' since I
       don't see that it is relevant.  It should just work.
    
    When a client uses a Target-Selector header, it means that they are
    aware of versioning, which means they should know that a versioned
    resource should be checked out before it is modified.  So I think that
    it would be better to make this an error.
    
       - - - - - - - -
       3.3 Revision Properties
       Sentence two.
    
       The sentence is unnecessary, however, if you choose to keep it I recommend
       using 'protected' in place of 'immutable' to be consistent.
    
    An immutable property can only be changed by checking out the versioned
    resource, while a protected property is one that cannot be changed with
    a PROPPATCH.  I rewrote this paragraph.  Let me know if it still
    is unclear.
    
       - - - - - - - -
       3.3.4 DAV:predecessor-set
       Sentence one.
    
       Rather than say 'contains a stable URL' should say 'contains zero or more
       stable URLs'.
    
    That doesn't quite work with the rest of the sentence, i.e. "for the
    revision that was checked out ...".  Let me know how you'd like the
    whole sentence to read.
    
       - - - - - - - -
       3.3.8 DAV:working-resource-id-set
    
       Why do we need this?  The id's themselves are not interesting unless you
       also have the workspace context, e.g. {0, 0, 1, 45, 45}
    
    The working resource id is all you need (in addition to the versioned
    resource URL) to locate a paraticular working resource.  An advanced
    versioning server will use workspace URL's as working resource id's,
    but in either case, it is the working resource id that identifies the
    working resource.
    
       - - - - - - - -
       3.3.9 DAV:single-checkout
    
       Should state that the default value for a newly created revision is "F".
    
    Done.
    
       - - - - - - - -
       4.1 Target-Selector
       Para. 4: A Target-Selector header...
    
       Consider changing the second sentence to simply say 'In particular, it has
       no effect on the target of a stable URL.'
    
    I rewrote this paragraph ... let me know if the rewrite is OK.
    
       - - - - - - - -
       5.1.1 DAV:property report -> DAV:property-report
    
    Done.
    
       - - - - - - - -
       6 Versioning and...
    
       Is it true that all existing methods are invalid for stable URLs?
    
    OPTIONS, PROPFIND, and PROPPATCH work, but most of the rest will fail
    due to the immutability of revisions.
    
       - - - - - - - -
       6.1  Automatic versioning...
    
       Consider deleting 'and no Target-Selector header has been specified'  as
       described above.
    
    Rationale for not doing so given above.
    
       What does 'performed atomically' mean?
       If the update fails, is the server required to act as though the checkout
       never happened?  i.e. if the PROPPATCH fails you would get the 207 back and
       there would be no extra revision in the history.
    
    Yes.
    
       I think this is
       desirable, but may be awkward to specify since what is the definition of
       update success (the multistat example shows that saying 'a 200 series
       response' is insufficient).
    
    I'm not sure I follow you here.  It would be the same kind of failure you
    would get if ACL's didn't let you do the update.  Perhaps I'm missing the
    point you are making?
    
       - - - - - - - -
       6.2 Propfind
    
       Why is this a good thing?
    
    A versioning unaware server will expect that a PUT to a resource would
    not change its DAV:urn.  I believe it is important that we satisfy that
    expectation.
    
       - - - - - - - -
       7.1 Version
       Sentence one.
    
       This sentence is quite a mouthful<g> ... and should say 'to convert it'
    
    Done.
    
       What happens if you say VERSION to a versioned resource?
    
    It's not a versionable resource, so it fails.
    
       Maybe then
       results from VERSION should not be cached ...
    
    Added this requirement.
    
       Postcondition three: default target -> default revision.
    
    I agree we should use the phrase consistently, but I'd make the
    arrow go the other way, since default workspaces allow the default
    target to be a working resource.
    
       - - - - - - - -
       7.1.1 Example - Version
    
       The status code in the example is 201 Created, in the description it was
       200 OK.
       I think 200 ok is more appropriate, but whatever.
    
    I agree.  Done.
    
       - - - - - - - -
       7.2 Checkout
       postconditions
    
       'A new working resource is created that is a copy of the revision.' sounds
       more natural (to me).
    
    Done.
    
       - - - - - - - -
       7.3 Checkin
       response codes
    
       Consider precondition failed if the checkin policy is overwrite and the
       predecessor set has multiple entries.
       405 seems inappropriate if the check-in policy is not supported?
       Unsupported media type (c.f. MKCOL),yuk?
    
    
    Response codes ... always a fun topic (:-).  I'll defer a final "response
    code consistency pass" until we're done with the semantics.
    
       postconditions
    
       'The working resource id ...' should additionally end with 'and the
       selected versioned resource.'
    
    Done.
    
       It sure would be helpful if there was some way to indicate that the newly
       checked in revision should NOT become the default revision.  Maybe part of
       the check-in policy?
    
    What use case would motivate this?
    
       - - - - - - - -
       Should be a description of what OPTIONS would return if the resource
       supports basic versioning.
    
    Done.
    
       - - - - - - - -
       8.1 Advanced versioning terms
       Activity
    
       Should be described as an unversionable resource.
    
    Done.
    
       I wonder why the ascii-art implies that activities are associated with the
       "arcs" between revisions, whereas the text describes activities as
       references to the revisions themselves.  Am I reading too much into the
       diagram?
    
    Well, they semantically do correspond to the arcs, so the diagram is
    correct, but our semantics aren't really affected much by this.
    
       - - - - - - - -
       Should be a description of the valid OPTIONS that an advanced versioning
       resource may answer.
    
    Done.
    
       - - - - - - - -
       9.1 Revision Selecion and Workspace
       Consider the following rearrangement:
       ...
    
    I rewrote this whole section.  Let me know if the result is acceptable.
    
       - - - - - - - -
       9.1 Revision selection...
    
       What does this mean?
       " a lock on a mutable revision controls an override CHECKIN from any
       workspace"
       what is an override checkin?
    
    This was just confused ... I deleted it.
    
       - - - - - - - -
       9.2 Parallel Development...
       para. 1
    
       talks about 'multiple authors' followed by 'results in two parallel
       revisions'
       Should be consistent.
    
    Fixed.
    
       - - - - - - - -
       9.3 Baselines
       Sentence two: "When a workspace... created to captures" -> "created to
       capture"
    
    Done.
    
       - - - - - - - -
       9.4 Versioned Collections
       para. 1
    
       There seems to be an unwritten subtext here<g>.  Disallowing unversioned
       resources in a versioned collection is primarily for an (important)
       implementation optimization.  Allowing any resource would break the
       semantics of the versioning system per se.  I would be happier if this was
       more explicit.
    
    I added the statement that "this is restriction is required to allow
    essential implementation optimizations".  Probably don't want to spend
    too much space in the protocol on this issue though.  Folks that are
    implementing them will appreciate the restriction, and folks that aren't
    probably don't care (:-).
    
       - - - - - - - -
       10.3.1 DAV:working-resource-set
    
       Why does this contain stable Href's and not workspace id's since the
       workspace context is known (this is particularly ironic given that the
       versioned resource has ids where the workspace is unknown!)
    
    The "stable" qualifier was an error.  I rewrote this paragraph ...
    let me know if it is now clearer.
    
       - - - - - - - -
       10.3.2 DAV:revision-set
    
       I'm hoping that this is a typo<g>
    
    Nope ... most implementations will compute this property rather
    than store it as flat text (:-).
    
       If it really contains all the stable URLs for ALL revisions that it selects
       then that could be potentially a very large number (thousands).
    
    Yup.  This means that only small workspaces should ever be asked for their
    DAV:revisions.
    
       Imagine
       merging a baseline and getting all the members of the baseline in this set.
       Consider re-writing this to be the stable URLs of the default revisions set
       in the workspace.   We would then say (elsewhere) that when a clients sets a
       default revision that is a container (i.e., baseline, activity, etc.) the
       effect on target selection is as though each member of the container had
       been set individually in the workspace (though servers are not expected to
       implement it that way).
    
    This doesn't work well in the context of merging, since parts of each of
    the various entities merged in will be selected.
    
    But for large workspaces, I agree that the baselines and activities that
    have gone into the workspace are what the client is more likely to ask
    for, but that information is available in the DAV:predecessor-set and
    DAV:activity-set properties of a workspace.
    
       - - - - - - - -
       11.1 Workspace
    
       There is something about having "Workspace:" be the metadata area that
       doesn't sit right with me -- but I can't put my finger on it.
       I think I would expect that to indicate the server's default workspace.
       I propose that we (revert to?) have "Workspace: metadata" instead.
    
    I'm inclined to use Jim Amsden's suggestion, and use:
    
    Target-Selector: versioned-resorce
    
    instead of "metadata".
    
       - - - - - - - -
       12 Advanced Versioning...
       Sentence one: for clarification, consider ending the sentence with  (see
       Section 9.4)
    
    Done.
    
       Last para: remove the condition "...and no Workspace header has been
       specified"
       I guess that I'd like to use this, even as a versioning aware client, as a
       short-cut when auto-version is set.
    
    OK, here I agree with you, because a core versioning aware client
    (who therefore is using Target-Selector headers) would not be aware
    of collection versioning, and therefore would want auto-versioning
    behavior for collections.  So I agree that this should be changed
    for versioned collections.
    
       - - - - - - - -
       12.2 Checkin
       para. two
    
       I read this several times, and still don't understand what it means.
       How can a DAV:working-resource-id be a workspace, it's just an id?
    
    Fixed this.  It should have said "Workspace URL".
    
       last para.
       Should state that if the workspace has any working resources then the
       CHECKIN MUST fail.
    
    Done.
    
       - - - - - - - -
       12.3 Set-Default-Revision
       first occurrance of SET-DEFAULT_REVISON -> ...REVISION
    
    Done.
    
       - - - - - - - -
       13.1.1 Example - Merge
       Response should include
    	Vary: Workspace
    
    Fixed this by stating that the results of MERE cannot be cached,
    which means that a Vary header is no longer needed by MERGE.
    
       - - - - - - - -
       13.3 Merge
    
       Since merge is such a powerful operation, and certainly one that would not
       be undertaken lightly by clients, I'd like to see it contain some options
       in the body that allow clients some control over the server behavior.
       The semantic description of the merge creating a working resource for all
       conflicts should be optional--the alternative is to fail the merge.
    
    That's what the DAV:conflict-report is for.  If you want to "scope out"
    the number of merges that will be required, the DAV:conflict-report will
    get that for you.  You'd only run the MERGE after you were sure that the
    MERGE would succeed.
    
       If it
       always creates working resources then backing out of the effects of the
       merge will be potentially very expensive/troublesome.  And of course there
       is no guarantee that requesting a report first is going to be sufficient.
    
    For immutable merge arguments (such as revisions and baselines), the
    DAV:conflicts-report will tell you exactly what you need to know.
    The activity might change a bit between the report and the MERGE,
    but I don't think that is a problem.  In either case, you can just scan
    the working resources of the workspace to see all the merges.
    
    When you have activities, it's even easier, since you can create a
    "merge" activity, and all new working resources created by the MERGE
    will be associated with that activity.
    
       The description that states that if a working resource exists a request
       revision is added as a predecessor is also dubious, mostly because it is
       going to be very difficult to detect that this condition happened, but also
       it may just not make sense in terms of the resource history.
    
    I agree.  I changed it so this is an error.
    
       - - - - - - - -
       14.1 DAV:default-workspace-report
    
       What is the metadata dtd line about?
    
    Got rid of it.
    
       - - - - - - - -
       14.2 DAV:workspace-url-report
    
       This seems odd.  As a client, I think it's great.  As a server I'm unsure
       how I'd implement this.
    
    Note: this is now called the "versioned-resource-URL-report", and
    gets you the versioned resource URL for a stable revision URL.
    I believe all servers will be able to do this.
    
       - - - - - - - -
       14.2.1 Example - DAV:workspace-url-report
       and
       14.3.1 Example - DAV:conflict-report
    
       Response should include
    	Vary: Workspace
    
    Done.
    
       - - - - - - - -
       14.4 DAV:compare-report
    
       Again, I would assume that the compare reports differences in terms of the
       containers that were merged, rather than the individual revisions that are
       selected by the entire workspace.  The alternative is a very expensive
       transitive walk of the entire namespace.
    
    A server can decide how to structure the response, i.e. in terms of
    revisions, baselines, or even activities.  At some point we could define
    specific flavors of the DAV:compare-report, but we can probably hold off
    on that for now.
    
       - - - - - - - -
       As mentioned before on the list, the different reports should probably be
       different methods, so they can be discovered through options and
       selectively implemented and administered.
    
    Chris was the strongest proponent of an extensible REPORT method (because
    he wants to define a variety of specialized reports that his server
    will support), so I'll let him answer this one.
    
       - - - - - - - -
       14.5 DAV:repository-report
       Last para.
    
       states that the reponse contains the URL of a collection in which the
       resource can be created.
       What if there are multiple collections in which it can be created...are
       they enumerated? probably not, since if you ask about <DAV:collection/> you
       may get lots of answers -- so how about the answer means, 'or any
       collection reachable from there' -- probably not that either since some
       servers may need to be more restrictive.
    
    I think it is sufficient for the server to return one place where 
    these kinds of resources can be put.  If there are others, that's fine,
    but I don't think we need to enumerate all of them.
    
       - - - - - - - -
       15 Non-versioning WebDAV...
       "are not specific versioning"   ->  "are not specific to versioning"
    
       What is meant by: they are not specific to versioning but are needed by
       versioning extensions?
    
    Got rid of this section, and moved the various methods into the core
    versioning section.
    
       - - - - - - - -
       15.3 Mkresource
    
       Strike: "other than standard data containers and collections" since later
       text illustrates how to create a standard data container, and collections
       should be allowed too.
    
    Replaced this with MKACTIVITY and MKWORKSPACE, so the issue no longer
    arises.
    
       - - - - - - - -
       15.4 Report
       Sentence two.
    
       Dynamic with respect to what?  and why can't options handle it?
    
    I agree that "dynamic" was not the point, so I rewrote this section.
    OPTIONS can't handle it because OPTIONS is required to be about
    communication issues, not about random information such as doing
    a "compare".
    
    And again, many thanks for the detailed review, Tim!
    
    Cheers,
    Geoff