- From: Geoffrey M. Clemm <gclemm@tantalum.atria.com>
- Date: Wed, 15 Sep 1999 17:01:47 -0400
- To: w3c-dist-auth@w3.org
From: "Slein, Judith A" <JSlein@crt.xerox.com>
<jas>
I do have trouble following your description of the fixup stage, though. I
take it you don't think we face the awkward situation Kevin described, where
there end up being 2 resources where there used to be only one. But how do
you avoid this?
<gmc/> That's right. That's what the "fixup" step takes care of.
Before the MOVE we have:
/a/b.html /x/y.html /c/d.html
\ / |
\ / |
\ / |
R S
and user1 has a lock on R through /a/b.html
<gmc/> Yup.
Now user2 attempts to MOVE /c/d.html to /x/y.html. First the binding y.html
is removed from collection /x/. Then S is duplicated, say to S' and a new
binding y.html is created in /x/ to S'. That's the COPY step. At this
point we have:
/a/b.html /x/y.html /c/d.html
| | |
| | |
R S' S
<gmc/> Yup again.
The DELETE step is to remove the binding d.html from /c/. It doesn't look
as if there needs to be any fixup, but we do have the awkward result that we
now have 2 resources R and S' where there used to be just R.
<gmc>
And that awkward result is exactly what the fixup step "fixes up",
namely before the DELETE on /c/d.html, it issues a DELETE on /x/y.html
and then creates a binding to S named "y.html" in the collection "/x".
So immediately after the fixup step you have:
/a/b.html /x/y.html /c/d.html
| \ /
| \ /
R S
A MOVE at the very least must guarantee that the GUID property of a
resource remains the same after a MOVE, and the only way that can be is
if /x/y.html is mapped to S (and not some copy of S) after the MOVE
successfully completes.
<gmc/>
Cheers,
Geoff
-----Original Message-----
From: Geoffrey M. Clemm [mailto:gclemm@tantalum.atria.com]
From: "Slein, Judith A" <JSlein@crt.xerox.com>
I like everything that you say here, but the MOVE / COPY
TO cases raise a
red flag for me. We claim in the bindings spec that the
MOVE semantics we
present is equivalent to the COPY + fixup + DELETE
semantics defined in RFC
2518. But I doubt it when I look at this case.
<gmc/> The author of the statement that "MOVE is logically equivalent
to COPY+fixup+DELETE" (who will remain nameless although we all know
who he is :-) has publicly renounced this statement. The problem of
course is the wonderfully undefined "fixup" stage. *ANY* semantics is
acceptable for MOVE, for some definition of "fixup". So let's see if
all is well for this case with some suitably defined value of "fixup".
Leave aside for a minute intuitions about what should
really happen, and
just see what would follow from the underlying semantic model:
Suppose we define MOVE as "remove the binding identified
by the Request-URI
and add the binding identified by the Destination header".
Now consider your case: /a/b.html and /x/y.html both point
to resource R,
and I have an exclusive write lock on /a/b.html. User2
tries to MOVE
/c/d.html (which points to some other resource S) to
/x/y.html. It seems
this should be possible, because all that is happening is
that the binding
y.html in collection /x/ is being replaced with one that binds to a
different resource. Nothing happens to resource R.
But if we use the COPY + fixup + DELETE semantics for
MOVE, resource S would
have to be duplicated, overwriting R. And this would not
be allowed,
because R is locked.
<gmc/> It doesn't overwrite R. A COPY to an existing resource will
either fail (if Overwrite=FALSE) or issue a DELETE on the destination
of the COPY. The DELETE of /x/y.html succeeds just fine (since DELETE
is properly defined to just remove the binding named "y.html" from the
collection "/x"), the COPY proceeds, and then the "fixup" step
replaces the binding to the new resource created by the COPY with a
binding to R, and then a DELETE is issued on the request URL of the
MOVE, which then deletes the binding named "d.html" from the
collection "/c".
Of course, we can legislate this problem away by, for
example, accepting
your proposal that a MOVE or COPY like this one fail no
matter which
semantics you use. But I'm afraid other cases will turn
up that reveal
inconsistencies between the 2 models of MOVE.
<gmc/> I believe there are no inconsistencies here ... just
suitably creative
definitions of "fixup" (:-).
Received on Wednesday, 15 September 1999 17:01:52 UTC