Date: Sat, 11 Dec 1999 00:48:01 -0500 Message-Id: <9912110548.AA03577@tantalum> From: "Geoffrey M. Clemm" <geoffrey.clemm@rational.com> To: ietf-dav-versioning@w3.org In-Reply-To: <85256840.00125213.00@D51MTA03.pok.ibm.com> (ccjason@us.ibm.com) Subject: Re: versioning lock From: ccjason@us.ibm.com Could you provide a concrete example with URI's. I'm not sure I followed all of what you said. Suppose I had a workspace "//my-machine/ws/geoff", whose revision selection rule is "<rsr-label> foo </rsr-label>". Suppose "//host/a" was bound to the versioned collection "//host/repo/vr/157". Suppose revision "//host/repo/vr/157/rev/5" of "//host/repo/vr/157" is labeled "foo". Suppose "//host/repo/vr/157/rev/5" contains a binding of segment "b" to the versioned resource "//host/repo/vr/197". Suppose the revision "//host/repo/vr/197/rev/2" of "//host/repo/vr/197" is labeled "foo". This all implies that: GET //host/a/b Target-Selector: workspace "//my-machine/ws/geoff" would return the body of "//host/repo/vr/197/rev/2". Now suppose I requested: LOCK //host/a/b Target-Selector: workspace "//my-machine/ws/geoff" This would imply that only the holder of the lock-token should be able to make "//host/a/b" identify anything other than "//host/repo/vr/197/rev/2". But if anyone moved the label "foo" from either "//host/repo/vr/157/rev/5" or "//host/repo/vr/197/rev/2", then this lock could be violated, because the revision selection rule would pick whatever revision was now labeled with foo. But the workspace //my-machine/ws/geoff might not be accessible when the move-label request was issued, so the server at //host wouldn't know whether it could move the label or not. Even if all workspaces were somehow known and accessible, it would still be far too expensive to compute the effect of each metadata modification (like a label move) against every workspace that has a lock that might be affected by that modification. So this is where versioning locks come into play. A versioning lock (induced by any WebDAV lock that protects the locked URL) says that revision selection is computed and frozen for the duration of the lock for any versioned resource identified by any segment of the lock. In the preceding example, this means that "//my-machine/ws/geoff" will select revision "//host/repo/vr/157/rev/5" for "//host/repo/vr/157" and revision "//host/repo/vr/197/rev/2" for "//host/repo/vr/197" for the duration of the lock, and ignore any movement of the label "foo" for those versioned resources. When the lock is removed, normal dynamic revision selection becomes active. Also note... to protect a URI in a conventional fashion, it sounds like a version lock would actually not lock the resource... The term "the resource" is somewhat ambigous in this context, since we have multiple versioned resources and multiple revisions that are relevant. In any case, a version lock doesn't lock the resource, but rather freezes revision selection for the versioned resource and any parent versioned collections. but a set of version locks would be used to lock the parentage of the resource. Yes. Cheers, Geoff