Skip to content

PROPPATCH updates same properties multiple times #32660

Open
@PVince81

Description

@PVince81

Steps

  1. Create a file "proppatch.xml"
<?xml version="1.0" encoding="utf-8" ?>
<D:propertyupdate xmlns:D="DAV:"><D:set><D:prop><somename xmlns="http://example.com/alpha">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/beta">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/gamma">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/delta">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/epsilon">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/zeta">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/eta">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/theta">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/iota">manynsvalue</somename></D:prop></D:set>
<D:set><D:prop><somename xmlns="http://example.com/kappa">manynsvalue</somename></D:prop></D:set>
</D:propertyupdate>
  1. Create a folder "test"
  2. Set a breakpoint in FileCustomPropertiesBackend->updateProperties()
  3. curl -u admin:admin -X PROPPATCH -H "Content-Type: text/xml" --data-binary "@proppatch.xml" "http://localhost/owncloud/remote.php/webdav/test"

Expected result

Only a single call to updateProperties()

Actual

Multiple calls, despite the fact that we already have all properties in the first call.
It seems that there are as many callback as there are properties.

0  OCA\DAV\DAV\FileCustomPropertiesBackend->updateProperties() /srv/www/htdocs/owncloud/apps/dav/lib/DAV/FileCustomPropertiesBackend.php:157
1  OCA\DAV\DAV\FileCustomPropertiesBackend->OCA\DAV\DAV\{closure}() /srv/www/htdocs/owncloud/apps/dav/lib/DAV/AbstractCustomPropertiesBackend.php:206
2  Sabre\DAV\PropPatch->doCallBackMultiProp() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/PropPatch.php:317
3  Sabre\DAV\PropPatch->commit() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/PropPatch.php:245
4  OCA\DAV\Connector\Sabre\Server->updateProperties() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/Server.php:1265
5  Sabre\DAV\CorePlugin->httpPropPatch() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/CorePlugin.php:385
6  call_user_func_array:{/srv/www/htdocs/owncloud/lib/composer/sabre/event/lib/EventEmitterTrait.php:105}() /srv/www/htdocs/owncloud/lib/composer/sabre/event/lib/EventEmitterTrait.php:105
7  OCA\DAV\Connector\Sabre\Server->emit() /srv/www/htdocs/owncloud/lib/composer/sabre/event/lib/EventEmitterTrait.php:105
8  OCA\DAV\Connector\Sabre\Server->invokeMethod() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/Server.php:479
9  OCA\DAV\Connector\Sabre\Server->exec() /srv/www/htdocs/owncloud/lib/composer/sabre/dav/lib/DAV/Server.php:254
10 require_once()  /srv/www/htdocs/owncloud/apps/dav/appinfo/v1/webdav.php:64
11 {main}          /srv/www/htdocs/owncloud/remote.php:165

Version

OC 10.0.10 RC1

Doing this could reduce performance. However, updating file properties with PROPPATCH is hopefully rare. I do wonder if mounting Webdav as Windows drive have more property updates...

Found while investigating Oracle issue: #32639 (comment)

cc @VicDeo

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions