- From: Clemm, Geoff <gclemm@rational.com>
- Date: Thu, 21 Nov 2002 13:23:29 -0500
- To: "'Webdav WG'" <w3c-dist-auth@w3c.org>
- Message-ID: <E4F2D33B98DF7E4880884B9F0E6FDEE25ED567@SUS-MA1IT01>
From: Julian Reschke [mailto:julian.reschke@gmx.de]
> From: Clemm, Geoff
>
> One of the topics discussed at this weeks WebDAV working group
> meeting was how to provide a mechanism that would allow a client
> to submit a set of lock tokens without a validity check (i.e. the
> request could succeed even if some or all of those lock tokens
> have expired). Note that a client needs to submit an If header
> with etags with such a request, to avoid lock protection. There
> are currently two alternative proposals for this (the semantics
> of these two proposals are identical, so this is a marshalling
> question):
Checking: the desired semantics are that the request succeeds
independently of the lock still being present or not?
Yes.
> Proposal One: Extend the If header so that it can take a comma
> separated list of arguments (and therefore can be split into
> multiple If statements). To submit a set of lock tokens without
> a validity check, the following pattern would be used:
>
> If: urlA (tokenA [etagA]) (Not tokenA [etagA])
> If: urlB (tokenB [etagA]) (Not tokenB [etagB])
> ...
I think this can be minimized to:
If: urlA (tokenA [etagA]) (Not (<DAV:no-lock>) [etagA])
(<DAV:no-lock> is the URI of a known not-to-be-present lock, so the
second List always evaluates to true).
Good point! That makes the benefit of the second approach only
a 25% decrease in non-constant strings per resource, rather than
a 40% decrease.
> Proposal Two: Add a new header for a comma separated list of lock
> tokens that indicate possession of the lock token but do not
> cause the request to fail if they are invalid (I neglected to
> write down the proposed name, so I'll just call it New-Header).
> Since the etag list can be long when the client holds a large
> number of locks, the extension defined in alternative one is also
> required, to handle the possibly large number of etags. The
> pattern of usage for this proposal would be:
>
> New-Header: tokenA
> If: urlA ([etagA])
> New-Header: tokenB
> If: urlB ([etagB])
> ...
Is ordering relevant here? So would
New-Header: tokenB
If: urlA ([etagA])
New-Header: tokenA
If: urlB ([etagB])
mean the same thing?
Yes, that would mean the same thing, and ordering is not relevant.
> I am particularly disinclined to optimize this kind of request,
> because I believe that it is significantly simpler for a client
> to use a standard If header, and if locks have expired, the
> request fails, the client deletes from its state those expired
> locks, and then resubmits the request, replacing the expired
> locks with etags. This allows the client to just issue very
> simple If header requests, i.e. if the lock token for urlA is
> still valid but the lock token for urlB has expired:
>
> If: urlA (tokenA)
> If: urlB ([etagB])
Maybe we should discuss enhancements for error reporting for
precondition failures on if headers? That would probably make it
easier for a client to recover.
Excellent point! Currently, I believe the spec is rather vague
on how a client reports a violation of a clause in an If header,
and it would be of great value to clarify this.
Cheers,
Geoff
Received on Thursday, 21 November 2002 13:24:02 UTC