From: jamsden@us.ibm.com To: ietf-dav-versioning@w3.org Message-ID: <8525682E.00664910.00@d54mta03.raleigh.ibm.com> Date: Tue, 16 Nov 1999 15:56:55 -0500 Subject: Delta-V Breakout Sessions at IETF The Delta-V working group held two breakout session held at the Washington IETF November 10 and 11. There were 11 members present: Jim Amsden, Pete Carlson, Mike Chihaya, Jeff McAffer, Tim Ellision, Geoff Clemm, Brad Seargant, Chris Kaler, James Hunt, Jim Whitehead, and Jason Crawford. I would like to thank everyone involved for the excellent work and the high degree of collaboration achieved in the meetings. Thanks to your good work, we are on, or even a little ahead of our charter schedule. I am also very pleased with the progress that was made in resolving the issues. Finally, it is interesting to note that we haven't made any significant changes to the versioning semantics since sometime before our meeting in Concord in July. This is a real good indication of progress. Great work guys! The next meeting of the working group design team is tentatively scheduled for Feb 16 and 17, 2000 in Seattle. Any member of the Delta-V working group is invited to attend. We'll have more meeting details when they are available. We hope to cover the remaining issues, finish walking through the versioning scenarios and how they are supported by the protocol, and review the updated versioning spec. Action items: - Geoff will produce a versioning protocol scenarios appendix similar to what we did in the Delta-V working group to show how the protocol supports the goals scenarios. - Jim Whitehead will provide some details on how URLs are internationalized. - Everyone will submit a list of timestamps they think are required. Here's a list of issues covered. They are ordered roughly by the appearance of the associated semantics in the goals document scenarios. All decisions reached in the Delta-V Working Group and these unsanctioned breakout sessions are recommendations that are subject to the scrutiny of the complete Delta-V Working Group through the mailing list. I invite anyone who has issues with any of these recommendations to make them known through the mailing list and we will reconsider or re-open the issue. ---------------------------------- How are the versioning options communicated to clients, and what are they? We discussed extending OPTIONS to take an entity request body and return an entity response body containing the versioning options marshalled in XML. But after some discussion we opted to extend the REPORT method to play this role rather than extend OPTIONS. This seemed more extensible and less intrusive to the existing OPTIONS method. --------------------------------- Do we need MKRESOURCE, or will allowing PROPPATCH on a null resource do? This was discussed in the WebDAV Working Group meeting, and we decided to not allow PROPPATCH on a null resource and stick with the MKRESOURCE method. --------------------------------- How is a versionable resource put under version control? There were suggestions to use CHECKIN or CHECKOUT, but neither of these were quite right. They both had headers or entity body elements that weren't appropriate to something that wasn't checked out, or didn't have a predecessor. So we decided to use a new VERSION method that puts a versionable resource under version control. The VERSION method can take a Depth header to put all the members of a collection under version control in a single request. As with CHECKIN, VERSION requires a workspace specified in the target-selector which provides a current label or activity for identifying the newly created revision. Note that neither CHECKIN or VERSION apply a user-specified label to the newly created revision. If this is necessary, either use the current-label of the workspace, or use the revision id as a target-selector and apply the label using the LABEL method. ------------------------------- Are revision names URL segments? We decided that this was required in order to marshall revision names in HTTP headers, and to use them to construct URLs. Revision names that are not valid URL segments can user URL encoding techniques. ------------------------------ How are labels internationalized? By using URL encoding. Jim Whitehead will provide details in a separate note. ----------------------------- Are revision ids and labels in the same namespace? After much discussion, most of which was already given on the mailing list, we decided to keep them in separate namespaces and use a "namespace indicator" of id: or label: in the header. The issue that convinced the holdouts (mostly me) was that a client could use a label that would clash with some server generated id at some time in the future. This would restrict the server's ability to generate revision ids. There was some discussion about leaving off the namespace indicator for convenience and returning a error if the revision name was both an id and a label. ---------------------------- What is the semantics of locking on versioning artifacts like versioned resources, revisions, working resources, workspaces, activities, configurations, and baselines? We decided to defer this issue until Jason Crawford has had a chance to explore locking in the current WebDAV specification. However, since we are no longer using "property collections" to specify WebDAV versioning semantics (see below), there is no need to lock any of the versioning artifacts in order to execute the versioning methods. Therefore the versioning semantics will likely be able to accept standard WebDAV locking semantics without requiring any changes. --------------------------- Do we need a CHECKPOINT method/capability? CHEKCPOINT creates a new revision, but keeps the resource checked out to allow further changes. It is effectively an atomic CHECKIN followed by a CHECKOUT of the newly created revision. That is, the old revision is no longer checked out, and the working resource has the newly created revision as its predecessor. It was decided to make this a parameter of CHECKIN rather than introduce a new method. This was primarily because all of the CHECKIN semantics must be followed. --------------------------- Should the target selector be returned in a header for all requests? Echoed on requests that specify it? The concern is that certain WebDAV versioning unaware proxies might strip off the target selector header causing the server to return an unexpected revision without any error. We agreed that the target selector should be echoed on any request that specifies it, and the client can use this information to be sure it got the right version. However, this does not address the larger issue of proxy compatibility with WebDAV extensions. We assume that where WebDAV semantics must be protected by proxy servers, suitably update proxy servers will be provided and configured to achieve the desired results. --------------------------- What timestamps do we need to collect? We'll move this to the mailing list for the details. Everyone will submit a list of what they think is needed. All dates use ISO format. --------------------------- Is depth available on CHECKOUT? No. --------------------------- How is the workspace overridden to access a particular revision? If the server supports versioned collections, there are times when a workspace is used for revision selection, and times where the workspace needs to be overridden with a specific label in the same request. For example, say you want to examine an old version of /projects/401k/index.html without changing your workspace revision selection rule. If you just specify a revision label of "beta2" for index.html, what revisions of the projects and 401k collections are used? There are two possible solutions. One is to use both path-selector and target-selector headers in the request. The path-selector is a revision selector (usually a workspace) that is used to resolve all the URL path segments. The target-selector specifies the revision of the leaf resource (or collection). This is reasonable simple, but relies on there being more stability in the namespaces than the contents or properties of a leaf resource. Another approach is to provide a revision path header that has a segment for each segment in the target URL. This is more complicated, but allows specification of a revision for every segment in the URL path. --------------------------- What are the versioning levels? We decided at Concord to eliminate the notion of versioning levels, and have core versioning with a number of optional capabilities. Geoff noticed that a number of the capabilities fell into logical groupings both from the semantics and from the protocol specification that could be used to describe higher levels. We concluded that we would revisit this issue after the protocol is more complete and look to see if it is possible to define a small number of levels that represent a set of capabilities (not necessarily methods) that address a cohesive set of use cases the we could identify as important to achieving interoperability. --------------------------- Can CHECKIN have depth? Yes. We also need to be able to specify if the CHECKIN should fail if the resource is not checked out, or be ignored. --------------------------- Should the semantics of the protocol be specified by using "property collections/resources"? This issue resulted in a long and complex discussion. The conclusion was that property collections would not be used to specify WebDAV semantics, but that we would introduce new methods that specify the semantics in simpler, more flexible, and method specific ways. This eliminated the locking issues with the versioning artifacts, simplified the protocol, eliminated most of the use of server-generated URLs, and resolved long-standing issues in the working group. We arrived at the conclusion be first examining a simple operation that used property collections - labeling a revision. It became clear in the Delta-V working group meeting that we were relying entirely too much on server-generated URLs and property collections that weren't really collections. For example adding a label to a revision required the following steps: - Access the labels property of the revision and get its server-generated URL. - Using this URL, BIND a new member whose segment name is the label. - The server updated other property collections of the versioned resource We explored a number of alternatives for specifying labels: - Use BIND and server-generated URLs for a labels property collection (requires locking the property collection) - Use PROPPATCH on a labels property (requires locking the revision) - Extend PROPPATCH to support incremental add/delete of collection properties (collection in the generic sense of set, bag, list, ordered list, etc.). - Introduce a LABEL method - Perform operations on the versioned resource with a new XML entity request body Of all of these approaches, introducing a LABEL method was the simplest and most straightforward. It didn't require locking the revision, didn't introduce integrity issues resulting from PROPPATCH to update a composite property, didn't require extensions to PROPPATCH, didn't require the use of any server-generated URLs, and was very easy to explain. We then examined all the places where property collections were used in the specification: 1. label (on a revision) M (LABEL) 2. merge predecessor (of a revision) M (MERGE) 3. merge successor (of a revision) M (MERGE) 4. revisions (of a versioned resource) RO 5. labeled revisions (of a versioned resource) M (LABEL) 6. successors (of a revision) RO 7. workspaces (of a revision) RO 8. working resources (in a workspace) RO 9. activities (of a repository) R 10. required activities (of another activity) M (ACTIVITY) 11. activity revisions (revisions modified in that activity) RO 12. configurations (of a repository) R 13. workspaces (of a repository) R 14. (missing) required (configurations of a configuration) M After examining all of these cases, we determined that they fell into a number of groups: RO - read only, no update required, simply a live property set as a result of some other method R - associated with a repository and created by MKRESOURCE M - better handled by a separate method because of rich semantics Since only three methods were being introduced (LABEL, MERGE, and ACTIVITY), we are already beyond 16 methods (a current Apache restriction), and these methods simplified the protocol, we decided to not use property collections. The justification is that there are semantics in the server that are viewed through live properties and must therefore be set by new methods. --------------------------- Do working resources have server-generated URLs that can be used to access the working resource without a workspace? Yes, but the protocol design will minimize the places where server-generated URLs are required. -------------------------- Should there be a default current-label and RSR for a newly created workspace? Often the current label for a workspace will be the same as the name of the workspace, and this label is the only entry in the workspace RSR. However, this would not be a safe default because users could have the same workspace name in a different collection causing the different workspaces to have the same current-label. --------------------------- Currently Remaining Issues: --------------------------- Can a revision selector be a compound name? For example, a specific revision of a configuration to add to the workspace revision selection rule. --------------------------- Are baselines a kind of configuration or a separate concept? The issue is that if they are configurations, how do we prevent them from being edited? --------------------------- How are configurations created and members added, removed, or changed? Current approach is a configuration is a kind of collection created with MKRESOURCE and members are added/removed using BIND. --------------------------- Are repositories necessary? --------------------------- Do members of a versioned collection have to be versioned resources? --------------------------- How and when is the checkin policy specified? --------------------------- Can different workspaces use the same activity? --------------------------- Should we support "frozen" labels? --------------------------- How do we report the history of a versioned resource? Could use REPORT or just get the properties of be versioned resource and let the client do what they want. The issue is performance vs. efficient access of versioning meta-data. Many of the versioning properties are hrefs to other resources. This exposes a lot of server-generated URLs and requires lots of round trips to gather all the information required for a history report. On the other hand, casting the output in an XML document generated by the REPORT method limits client flexibility. --------------------------- How do we delete a revision? --------------------------- How does the server determine when it should resolve a URL segment with a workspace RSR, and when the segment is part of some server-specific namespace containing versioning meta-data? Servers are free to specify what portion of the namespace is reserved for their use for server-generated URLs. The collections in these namespaces need not be subject to workspace revision selection rules. --------------------------- Do we need to separate merge predecessor from predecessor? Yes. Merge successor/predecessor is mutable and can change to reflect the actual merge that was performed. Successor/predecessor cannot as it is a result of checkout/checkin. --------------------------- How is the namespace protected on CHECKOUT? Say you have /a/b.html checked out, someone deletes /a, and you don't have versioned collections. What happens to /a/b.html? We may need to apply some of the same logic used by LOCK to protect the namespace of locked resources. --------------------------- What reports provided by the REPORT method will be part of versioning core? --------------------------- Creating a workspace requires write access on a server. How will this be accomplished to get read-only access to a set of revisions when the user does not have sufficient permission. The server can provide different access permissions for workspace creation, or access to a controlled collection where they can be created. This may result in a denial of service security issue though.