[Libreoffice-bugs] [Bug 132460] New: WebDav ephemeral lock timeout negotiation has a feedback-loop

bugzilla-daemon at bugs.documentfoundation.org bugzilla-daemon at bugs.documentfoundation.org
Mon Apr 27 14:21:57 UTC 2020


https://bugs.documentfoundation.org/show_bug.cgi?id=132460

            Bug ID: 132460
           Summary: WebDav ephemeral lock timeout negotiation has a
                    feedback-loop
           Product: LibreOffice
           Version: 7.0.0.0.alpha0+ Master
          Hardware: All
                OS: All
            Status: UNCONFIRMED
          Severity: normal
          Priority: medium
         Component: framework
          Assignee: libreoffice-bugs at lists.freedesktop.org
          Reporter: jean-louis.fuchs at adfinis-sygroup.ch

Description:
WebDAV servers do not return the lock-timeout the lock was set up with; they
have to return the remaining time. There are WebDAV servers that return a lower
timeout. Two examples [2] [3]. Other servers probably reuse the same timestamp
for the whole request and are therefore not subject to that problem. (This
might
even be incorrect if the request takes very long.)

Updating the lock-timeout with the value returned by the server decreases the
timeout until it reaches zero.

LibreOffice request               SERVER response
LOCK(180)         ->              LOCK(60)
LOCK(60)          ->              LOCK(59)
LOCK(59)          ->              LOCK(58)
...
0: no LOCK header ->              FAIL

If we do not update the timeout in NeonSession::LOCK() only the initial setup
updates the timeout.

LibreOffice request               SERVER response
LOCK(180)        ->               LOCK(60)
LOCK(60)         ->               LOCK(59)
LOCK(60)         ->               LOCK(59)
...

It is essential that lastChanceToSendRefreshRequest uses the timeout returned
by
the server; after it calculated the deadline, we reset the timeout.

The maintainer of neon confirmed that the timeout should stay the same after
the
initial setup. [4].

[1] https://tools.ietf.org/html/rfc4918#section-6.6
[2] https://www.alfresco.com/
[3] https://github.com/mar10/wsgidav
[4] https://github.com/notroj/neon/issues/12


Steps to Reproduce:
1. webdav-neon/webdavcontent.cxx to use a timeout of 12 seconds

diff --git a/ucb/source/ucp/webdav-neon/webdavcontent.cxx
b/ucb/source/ucp/webdav-neon/webdavcontent.cxx
index 3113b3c1f5f1..4a0a6b437fc3 100644
--- a/ucb/source/ucp/webdav-neon/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-neon/webdavcontent.cxx
@@ -3290,7 +3290,7 @@ void Content::lock(
             ucb::LockType_WRITE,
             ucb::LockDepth_ZERO,
             aOwnerAny,
-            180, // lock timeout in secs
+            12, // lock timeout in secs
             //-1, // infinite lock
             uno::Sequence< OUString >() );

Of course you can reproduce the problem without that patch, but you have to
wait very long. (180 * 180 / 2 seconds)

2. Run https://github.com/mar10/wsgidav

3. Connect and save a file

4. Close LibreOffice

5. Load the file and watch the wsgidav log

Actual Results:
The lock-request timeouts decrease.

Expected Results:
The lock-request timeout should stay the same.


Reproducible: Always


User Profile Reset: No



Additional Info:
Also observed on a version of Alfresco. I have no details on that.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libreoffice-bugs/attachments/20200427/d84ee2ce/attachment-0001.htm>


More information about the Libreoffice-bugs mailing list