You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@httpd.apache.org by Mike Henry <mi...@elementaltechnologies.com> on 2010/11/02 23:01:02 UTC

[users@httpd] webdav failure when using LOCKS from multiple threads to the same folder

Hi all,

I have discovered a problem with webdav. If multiple processes or threads
are writing to unique files in the same folder on a webdav server using
LOCKS, intermittent webdav errors will occur during the UNLOCK request.

Server configuration: Centos 5.5. Tested with Apache/2.2.3, Apache/2.2.17
and Apache/2.3.8.

I have a custom application that uses libcurl to upload files to a webdav
server. However, I have reproduced the same problem using cadaver, a simple
script and a locally hosted Apache webdav server.

The error occurs during an UNLOCK. A 400 (bad request) is returned. Once
this
failure occurs, the file remains locked. I used several methods over several
days to ensure the LOCK/PUT/UNLOCK sequences being issued are valid and
contain the correct lock token (wireshark, added custom logging to dav,
etc.).
 
I used a patched version of cadaver that adds scripting ability so I could
automate the test.

Here is what the test does:

One shell script is repeatedly running this:

1. LOCK webdav/test/a.bin
2. PUT a.bin webdav/test/a.bin
3. UNLOCK webdav/test/a.bin

At the same time, a second shell script is repeatedly running this (same
webdav folder, but accessing a different file):

1. LOCK webdav/test/b.bin
2. PUT b.bin webdav/test/b.bin
3. UNLOCK webdav/test/b.bin

The test repeats anywhere from a few times to several hundred times before
the failure occurs. Below is the output from cadaver at the failure point:

Locking `webdav/test/a.bin': succeeded.
Lock token <opaquelocktoken:7ca6e55d-1bf6-4ce0-a8a4-7d97117db8af>:
  Depth infinity on `http://localhost:81/webdav/test/a.bin'
  Scope: exclusive  Type: write  Timeout: infinite
  Owner: 
Uploading a.bin to `/webdav/test/a.bin': [.......... succeeded.
Unlocking `webdav/test/a.bin': failed:
400 Bad Request

At the failure point, this message is in the Apache error_log:

(11)Resource temporarily unavailable: The locktoken specified in the
"Lock-Token:" header is invalid because this resource has no outstanding
locks.  [400, #0]

I tried adding additional debug messages to dav, but have not been able to
track down why the lock is not valid. I also tried to make a debug build of
Apache so I could use gdb to help debug at least one of the scripts to
better
understand the flow of the lock data, but was unable to get debug symbols in
the binary (I used the --enable-maintainer-mode configure option).

I'll wait a few days to hear back before submitting a bug.

Regards,
Mike


---------------------------------------------------------------------
The official User-To-User support forum of the Apache HTTP Server Project.
See <URL:http://httpd.apache.org/userslist.html> for more info.
To unsubscribe, e-mail: users-unsubscribe@httpd.apache.org
   "   from the digest: users-digest-unsubscribe@httpd.apache.org
For additional commands, e-mail: users-help@httpd.apache.org