Open
Description
Steps
- 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>
- Create a folder "test"
- Set a breakpoint in FileCustomPropertiesBackend->updateProperties()
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