From: jamsden@us.ibm.com To: ietf-dav-versioning@w3.org Message-ID: <8525690E.005B7DC3.00@d54mta02.raleigh.ibm.com> Date: Fri, 30 Jun 2000 12:42:07 -0400 Subject: Issues from the May 25 Design Team meeting Here's the issues from the May 25 DeltaV design team meeting. Sorry about getting these out so late, I've been on vacation. - Discussion of the REPORT method. Text needs to be added to motivate the need for these reports (e.g., getting a history listing for a version tree, for DAV:property-report). Another scenario is getting a couple of properties off of just the predecessors of a particular resource in a tree that has a lot of revisions. The example for REPORT should have a description that lists, using ASCII art, the revision history that is being listed in the REPORT result. Discussion on making the marshalling for REPORT more consistent with PROPFIND. Discussion on whether REPORT should be optional. Discussion on how to add new reports in the future. Should property report be handled by extension to PROPFIND? Take to mailing list. - Can a server specify if PUT creates a versioned resource revision or not. Agreed yes, but Chris wants to have client control with failure if server can't support. - Some discussion on the marshalling & name of the SET-LABEL-TARGET method. Several people preferred to revert back to the name LABEL, which is applied to a versioned resource with the revision picked using a Target-Selector header. Discussion of using Depth with SET-LABEL-TARGET to set the label on all revisions in a collection. Need to define the interaction with Depth. Add an example showing what happens when a label is deleted. What response should removing a content return on success (200 OK). Issue results from multiple possible user views - taken from the versioned resource, or taken from the revision. Leave it as it is, and reraise the issue on the list. If method takes versioned resource, can't use revision URL to set a label. That's OK. Advanced versioning issues: - Issue: is it possible to have workspace-private unversioned resources (for example .o files, or other intermediate compilation files, created during a build). This issue was discussed, but was not resolved. One of the difficulties for DeltaV is the fact that workspaces are viewed as filters on the same portion of the namespace, as opposed to projections into different sections of the namespace. When workspaces are projections, then having unversioned, uncontrolled resources in a specific projection does not affect any other workspace/projection. But, when everyone is sharing the same portion of the namespace, it is possible that people's unversioned objects will end up overwriting each other. For example, since people are sharing the same portion of the namespace, then the .o files created during different user's compiles will overwrite each other. Workspace is a collection that must be able to contain unversioned resources - that's how you get things in them. The URL has the workspace as a resource. (Don't know that workspace target selector would mean). Baseline is a copy of the workspace that can't be changed. (i.e., a revision of a workspace). Workspace contains map of versioned resource relative URL segments (members of the workspace), to revisions. Need a way for a baseline to be able to reconstruct the namespace structure of the versioned resources in the workspace. - server side merge, merge states - Is it server defined whether a PUT creates a versioned resource in a versioned collection? No resolution. Chris want's client to override policy and have server fail if cannot perform the operation. This will require a new header on effected methods. - Issue: can versioned collection revisions contain non-versioned resources. - Issue: can baselines contain non-versioned resources. - Do we need any other reports? If so, how should the available reports be extended? - Do we need to introduce branches. Don't seem to need them. Activities provide more capability. Chris will see if there's a scenario he wants that activities don't support. RESOLVED: - Need to constraints on what characters can appears in an id. - Need to describe how ids are marshalled into a header - May need to separate labels from ids, since they may end up being handled separately. - Need to explicitly state whether ids and labels are case sensitive, and/or case preserving. Tentatively in favor of requiring case preservation. Will take this to the list. Concern that we need to be consistent with URL behavior. Recommend case preserving. - Need to state how whitespace is handled, especially for ids and labels marshalled within XML - Discussion of DAV:label-set. Issue: should the maximum length of the header be specified? HTTP is silent on the length of headers. There is the related issue of whether to restrict the length of labels. Discussion on whether it should be possible to discover the maximum label length. Raised the issue of whether there should be an error response for label too long on setting a label. Possibility to report the maximum length allowed in an error response to setting a label. Some reports that automatically generated labels can be long, and can run into label length limitations. No specified maximum lenght or report providing server restrictions. - Issue: need for a destination target selector for use with diadic methods (copy/move). With copy allowed, there now is a need for a destination target selector. Destination target selector was added. - Can you version a locked versionable resource. No - Issue: need to introduce an option for overwrite, overwrite="update", that allows copying of a source to destination with update instead of delete and put. Agreement to put the description of this into an Appendix that states that the functionality will be added into the WebDAV spec. once it is moved to draft standard status. - Discussion on whether a label should be able to automatically propagate (or "float") to the latest revision upon checkin, so as to simulate "latest" revision selection. General sentiment against adding this feature. Agreed to add DAV:latest target selector based on checkin date. Server may fail if it doesn't support reasonable dates. - Some discussion that there needs to be a new name for "private" checkin option. New wording needed for DAV:private (express using positive language "if DAV:private option is set then...") e.g., dont-update-default. - VERSION vs. CHECKIN: topic noted for future discussion Agreed that VERSION is ok as long as VERSION on an already versioned resource is not an error. The reason for this is to simplify clients for situations where servers may automatically create versioned resources on PUT. - Can we checkout using a revision URL. Working resource id you get back needs to be applied to the versioned resource URL, not the revision URL. Doing a checkout on the revision URL would require the revision to have a backpointer to its versioned resource. Sense of the room is that it should not be allowed. But the spec should not rule it out. Servers should disallow it. - Replace working resource with working revision. There are a number of properties and behaviors of a working resource that make it not a revision. e.g., it does not have a revision id, and the working resource id has different semantics. Resolution: continue to user working resource and attempt to unify the syntax and semantics between revisions and working resources where it makes sense. - Discussion about, for linear versioning, whether it is possible to check out from other than the tip version. Concerns: want to track that the checkout occurred from a specific revision, and this wouldn't be possible if you check out the tip, then get the previous revision, then check in to the tip. Agree, multiple checkouts are allowed. Checkin must result in a linear history. This implies that clients must be responsible for client-side merge before checkin. - Chould have an option to fail a checkout or checkin to fail if would result in a branch. - Should depth be allowed on SET-TARGET, LABEL? Best effort? Yes - How is the Target-Selector used for depth operations? Like all other depth methods, all headers are applied to all effected resources. - Discussion over what happens when a Target Selector is used to select a specific resource, and that resource is dynamic, and during its dynamic operation, it retrieves other resources. Should the value of the Target Selector be used to select a revision of those other resources? Or should the default target be used instead. This is related to the issue of, when there are versioned collections, and there is a path specified, what should the scope of the Target Selector header be? Should the Target Selector (using something other than a workspace as a selector, since workspaces do specifiy the revision of the collections) affect every collection in the path, or should it only affect the leaf node, with interior nodes selected using their default revision. Agreed to delete the last sentence of section 2.2. That is, what resources is the Target-Selector applied to in processing a request? By default, the Target-Selector is applied to all versioned resources encountered in the request, including those in entity request bodies. New entity request bodies (i.e., SEARCH for DASL) may include more complex href's that include a Target-Selector element that overrides the default. Another alternative to consider is to use the default target selector. - Discussion on whether a versioned resource should have a stable URL as well. Currently a versioned resource can only be accessed by using Target-Selector header. Yes. - Should a working resource have a stable URL. Yes. - Do we allow a structured versioned resource type? No. - Discussion of extensibility of options for checkin and checkout. Need to add some general language stating that these can have extra elements added to them in the future. General issue of when to ignore unknown elements, and when unknown elements cause method failure. How are unknown XML elements in entity request bodies handled? Do they ever cause the request to fail. WebDAV and XML extensibility currently specify they are ignored. Agreed to add some mechanism (an attribute) to indicate that an element is manditory. - What does it mean to delete a versioned resource? Just means the member is removed from the parent collection. No statement about what happens with respect to garbage collection. May result in broken references in workspaces and baselines. - Is it possible to delete a revision? If so, what effect does it have on predecessor/successor properties, target selection for a workspace, default target selector for the versioned resource, activities, and baselines. What happens to the history? Could allow it and leave broken links. But then couldn't use links to recreate history. Could just marked deleted and not show in history. Could copy all predecessor links to successors. But this would be a lie. Can't delete if there are merge links, or it is a member of a baseline or a workspace. Could allow delete when no successors (tip only). (Someone checked in a version with a virus). Could leave this as an out of band administrative function. Can fail the delete. If server supports delete, spec doesn't say what happens. May result in broken references and partitioned histories. Delete has to be done through revision URL. Using versioned resource URL and target selector would remove the versioned resource from its parent collection. - Is the property report optional? Core versioning must provide an efficient mechanism for providing a history report. Property report is not a minimal way to do this. Agree that there will be a history report, not optional. Property report is optional.