Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Desktop syncing creates conflict file and locking miscountings #6570

Closed
4 of 8 tasks
smarinier opened this issue Mar 22, 2024 · 2 comments
Closed
4 of 8 tasks

Comments

@smarinier
Copy link

smarinier commented Mar 22, 2024

⚠️ Before submitting, please verify the following: ⚠️

Bug description

If i'm modifying a file from a synced folder, saving it, while there is an update (sync) coming from the server, then the save is broken. A conflict file is created and the sync has troubles, as the temporary InDesign file (wich is in the same folder syncs indefinitively)
Problem was pointed on using Adobe Indesign, as it saves quite important files (~40Mb), and its temporary file in same time (maybe linked to the problem or not).

Steps to reproduce

  1. Save a huge file on a synced folder
  2. In same time, push a file by an external way (through web interface by example) in the same folder
  3. Not happen every time, but often

Expected behavior

File should be synced in background, and no conflict file should be created

Which files are affected by this bug

09193319_002-064.indd

Operating system

Mac OS

Which version of the operating system you are running.

Mac OS Sonoma 14.1.2

Package

Compiled it myself

Nextcloud Server version

28.0.3.2

Nextcloud Desktop Client version

3.12.50

Is this bug present after an update or on a fresh install?

Fresh desktop client install

Are you using the Nextcloud Server Encryption module?

Encryption is Disabled

Are you using an external user-backend?

  • Default internal user-backend
  • LDAP/ Active Directory
  • SSO - SAML
  • Other

Nextcloud Server logs

{"reqId":"apIMDM9PxjMD1gpayi4v","level":3,"time":"2024-03-22T09:40:25+00:00","remoteAddr":"82.64.134.49","user":"smarinier","app":"webdav","method":"PROPFIND","url":"/remote.php/dav/uploads/smarinier/1507517002","message":"Error executing \"ListParts\" on \"https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0\"; AWS HTTP error: Client error: `GET https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0` resulted in a `404 Not Found` response:\n<Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the uploa (truncated...)\n NoSuchUpload (client): The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. - <Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.</Message><RequestId>txg65c851b81f164ca5bf17-0065fd5209</RequestId><HostId>txg65c851b81f164ca5bf17-0065fd5209</HostId><Resource>/com.cgi37.recette.partage/urn%3Aoid%3A4688052</Resource></Error>","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.12.50git (Nextcloud, osx-23.1.0 ClientArchitecture: x86_64 OsArchitecture: x86_64)","version":"28.0.3.2","exception":{"Exception":"Aws\\S3\\Exception\\S3Exception","Message":"Error executing \"ListParts\" on \"https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0\"; AWS HTTP error: Client error: `GET https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0` resulted in a `404 Not Found` response:\n<Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the uploa (truncated...)\n NoSuchUpload (client): The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. - <Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.</Message><RequestId>txg65c851b81f164ca5bf17-0065fd5209</RequestId><HostId>txg65c851b81f164ca5bf17-0065fd5209</HostId><Resource>/com.cgi37.recette.partage/urn%3Aoid%3A4688052</Resource></Error>","Code":0,"Trace":[{"file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/WrappedHttpHandler.php","line":96,"function":"parseError","class":"Aws\\WrappedHttpHandler","type":"->","args":["*** sensitive parameters replaced ***",["GuzzleHttp\\Psr7\\Request"],["Aws\\Command"],[]]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":204,"function":"Aws\\{closure}","class":"Aws\\WrappedHttpHandler","type":"->","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":169,"function":"callHandler","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":[2,"*** sensitive parameters replaced ***",null]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/RejectedPromise.php","line":42,"function":"GuzzleHttp\\Promise\\{closure}","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php","line":48,"function":"GuzzleHttp\\Promise\\{closure}","class":"GuzzleHttp\\Promise\\RejectedPromise","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php","line":159,"function":"run","class":"GuzzleHttp\\Promise\\TaskQueue","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php","line":184,"function":"tick","class":"GuzzleHttp\\Handler\\CurlMultiHandler","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":248,"function":"execute","class":"GuzzleHttp\\Handler\\CurlMultiHandler","type":"->","args":[true]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":224,"function":"invokeWaitFn","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":269,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":226,"function":"invokeWaitList","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":269,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":226,"function":"invokeWaitList","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":62,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php","line":58,"function":"wait","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php","line":86,"function":"execute","class":"Aws\\AwsClient","type":"->","args":[["Aws\\Command"]]},{"file":"/var/www/html/lib/private/Files/ObjectStore/S3.php","line":77,"function":"__call","class":"Aws\\AwsClient","type":"->","args":["listParts",[["com.cgi37.recette.partage","urn:oid:4688052","OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm",1000,0]]]},{"file":"/var/www/html/apps/dav/lib/Upload/UploadFolder.php","line":91,"function":"getMultipartUploads","class":"OC\\Files\\ObjectStore\\S3","type":"->","args":["urn:oid:4688052","OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php","line":218,"function":"getChildren","class":"OCA\\DAV\\Upload\\UploadFolder","type":"->","args":[]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":900,"function":"getChildren","class":"Sabre\\DAV\\Tree","type":"->","args":["uploads/smarinier/1507517002"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":982,"function":"generatePathNodes","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\DAV\\PropFind"],[["Sabre\\DAV\\PropFind"],["OCA\\DAV\\Upload\\UploadFolder"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1662,"function":"getPropertiesIteratorForPath","class":"Sabre\\DAV\\Server","type":"->","args":["uploads/smarinier/1507517002",["{DAV:}resourcetype","{DAV:}getcontentlength"],1]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1647,"function":"writeMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\Xml\\Writer",[],"/remote.php/dav/",["d","s","oc","nc"],[]],["Generator"],false]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[["Generator"],false]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PROPFIND",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":373,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/aws/aws-sdk-php/src/WrappedHttpHandler.php","Line":195,"Previous":{"Exception":"GuzzleHttp\\Exception\\ClientException","Message":"Client error: `GET https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0` resulted in a `404 Not Found` response:\n<Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the uploa (truncated...)\n","Code":404,"Trace":[{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Middleware.php","line":69,"function":"create","class":"GuzzleHttp\\Exception\\RequestException","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":204,"function":"GuzzleHttp\\{closure}","class":"GuzzleHttp\\Middleware","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":153,"function":"callHandler","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":[1,"*** sensitive parameters replaced ***","*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/TaskQueue.php","line":48,"function":"GuzzleHttp\\Promise\\{closure}","class":"GuzzleHttp\\Promise\\Promise","type":"::","args":["*** sensitive parameters replaced ***"]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php","line":159,"function":"run","class":"GuzzleHttp\\Promise\\TaskQueue","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php","line":184,"function":"tick","class":"GuzzleHttp\\Handler\\CurlMultiHandler","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":248,"function":"execute","class":"GuzzleHttp\\Handler\\CurlMultiHandler","type":"->","args":[true]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":224,"function":"invokeWaitFn","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":269,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":226,"function":"invokeWaitList","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":269,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":226,"function":"invokeWaitList","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/guzzlehttp/promises/src/Promise.php","line":62,"function":"waitIfPending","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php","line":58,"function":"wait","class":"GuzzleHttp\\Promise\\Promise","type":"->","args":[]},{"file":"/var/www/html/3rdparty/aws/aws-sdk-php/src/AwsClientTrait.php","line":86,"function":"execute","class":"Aws\\AwsClient","type":"->","args":[["Aws\\Command"]]},{"file":"/var/www/html/lib/private/Files/ObjectStore/S3.php","line":77,"function":"__call","class":"Aws\\AwsClient","type":"->","args":["listParts",[["com.cgi37.recette.partage","urn:oid:4688052","OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm",1000,0]]]},{"file":"/var/www/html/apps/dav/lib/Upload/UploadFolder.php","line":91,"function":"getMultipartUploads","class":"OC\\Files\\ObjectStore\\S3","type":"->","args":["urn:oid:4688052","OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Tree.php","line":218,"function":"getChildren","class":"OCA\\DAV\\Upload\\UploadFolder","type":"->","args":[]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":900,"function":"getChildren","class":"Sabre\\DAV\\Tree","type":"->","args":["uploads/smarinier/1507517002"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":982,"function":"generatePathNodes","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\DAV\\PropFind"],[["Sabre\\DAV\\PropFind"],["OCA\\DAV\\Upload\\UploadFolder"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1662,"function":"getPropertiesIteratorForPath","class":"Sabre\\DAV\\Server","type":"->","args":["uploads/smarinier/1507517002",["{DAV:}resourcetype","{DAV:}getcontentlength"],1]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":1647,"function":"writeMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\Xml\\Writer","*** sensitive parameters replaced ***","/remote.php/dav/",["d","s","oc","nc"],"*** sensitive parameters replaced ***"],["Generator"],false]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":346,"function":"generateMultiStatus","class":"Sabre\\DAV\\Server","type":"->","args":[["Generator"],false]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpPropFind","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:PROPFIND",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":373,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/3rdparty/guzzlehttp/guzzle/src/Exception/RequestException.php","Line":113},"message":"Error executing \"ListParts\" on \"https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0\"; AWS HTTP error: Client error: `GET https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0` resulted in a `404 Not Found` response:\n<Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the uploa (truncated...)\n NoSuchUpload (client): The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. - <Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.</Message><RequestId>txg65c851b81f164ca5bf17-0065fd5209</RequestId><HostId>txg65c851b81f164ca5bf17-0065fd5209</HostId><Resource>/com.cgi37.recette.partage/urn%3Aoid%3A4688052</Resource></Error>","exception":{},"CustomMessage":"Error executing \"ListParts\" on \"https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0\"; AWS HTTP error: Client error: `GET https://s3.fr-par.scw.cloud/com.cgi37.recette.partage/urn%3Aoid%3A4688052?uploadId=OTFmZTQwYjMtNWU0NS00YTJiLWI2ZjktMmRiOWRkM2RlMWJm&max-parts=1000&part-number-marker=0` resulted in a `404 Not Found` response:\n<Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the uploa (truncated...)\n NoSuchUpload (client): The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed. - <Error><Code>NoSuchUpload</Code><Message>The specified upload does not exist. The upload ID may be invalid, or the upload may have been aborted or completed.</Message><RequestId>txg65c851b81f164ca5bf17-0065fd5209</RequestId><HostId>txg65c851b81f164ca5bf17-0065fd5209</HostId><Resource>/com.cgi37.recette.partage/urn%3Aoid%3A4688052</Resource></Error>"}}
{"reqId":"3GxhdoefnDFgfOZ4EHcB","level":3,"time":"2024-03-22T09:40:40+00:00","remoteAddr":"82.64.134.49","user":"smarinier","app":"webdav","method":"MOVE","url":"/remote.php/dav/uploads/smarinier/581487567/.file","message":"\"Fashion2021.indd\" is locked, existing lock on file: 3 shared locks","userAgent":"Mozilla/5.0 (Macintosh) mirall/3.12.50git (Nextcloud, osx-23.1.0 ClientArchitecture: x86_64 OsArchitecture: x86_64)","version":"28.0.3.2","exception":{"Exception":"OCP\\Lock\\LockedException","Message":"\"Fashion2021.indd\" is locked, existing lock on file: 3 shared locks","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Files/View.php","line":912,"function":"changeLock","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd",2]},{"file":"/var/www/html/lib/private/Files/Node/Node.php","line":434,"function":"copy","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd","/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":351,"function":"copy","class":"OC\\Files\\Node\\Node","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":238,"function":"completeChunkedWrite","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMove","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":603,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMove",["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpMove","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:MOVE",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":373,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/Files/View.php","Line":1984,"Previous":{"Exception":"OCP\\Lock\\LockedException","Message":"\"files/1b1d1f43d6b3e1974db58b0296233e9e\"(\"files/Fashion2021.indd\") is locked, existing lock on file: 3 shared locks","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php","line":629,"function":"changeLock","class":"OC\\Files\\Storage\\Common","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php","line":629,"function":"changeLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/View.php","line":1975,"function":"changeLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/View.php","line":912,"function":"changeLock","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd",2]},{"file":"/var/www/html/lib/private/Files/Node/Node.php","line":434,"function":"copy","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd","/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":351,"function":"copy","class":"OC\\Files\\Node\\Node","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":238,"function":"completeChunkedWrite","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMove","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":603,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMove",["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpMove","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:MOVE",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":373,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/Files/Storage/Common.php","Line":833,"Previous":{"Exception":"OCP\\Lock\\LockedException","Message":"\"files/1b1d1f43d6b3e1974db58b0296233e9e\" is locked, existing lock on file: 3 shared locks","Code":0,"Trace":[{"file":"/var/www/html/lib/private/Files/Storage/Common.php","line":831,"function":"changeLock","class":"OC\\Lock\\MemcacheLockingProvider","type":"->","args":["files/1b1d1f43d6b3e1974db58b0296233e9e",2]},{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php","line":629,"function":"changeLock","class":"OC\\Files\\Storage\\Common","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/Storage/Wrapper/Wrapper.php","line":629,"function":"changeLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/View.php","line":1975,"function":"changeLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["files/Fashion2021.indd",2,["OC\\Lock\\MemcacheLockingProvider"]]},{"file":"/var/www/html/lib/private/Files/View.php","line":912,"function":"changeLock","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd",2]},{"file":"/var/www/html/lib/private/Files/Node/Node.php","line":434,"function":"copy","class":"OC\\Files\\View","type":"->","args":["/smarinier/files/Fashion2021.indd","/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":351,"function":"copy","class":"OC\\Files\\Node\\Node","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/apps/dav/lib/Upload/ChunkingV2Plugin.php","line":238,"function":"completeChunkedWrite","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["/smarinier/files/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"beforeMove","class":"OCA\\DAV\\Upload\\ChunkingV2Plugin","type":"->","args":["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/CorePlugin.php","line":603,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["beforeMove",["uploads/smarinier/581487567/.file","files/smarinier/Fashion2021.indd"]]},{"file":"/var/www/html/3rdparty/sabre/event/lib/WildcardEmitterTrait.php","line":89,"function":"httpMove","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":472,"function":"emit","class":"Sabre\\DAV\\Server","type":"->","args":["method:MOVE",[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":253,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[["Sabre\\HTTP\\Request"],["Sabre\\HTTP\\Response"]]},{"file":"/var/www/html/3rdparty/sabre/dav/lib/DAV/Server.php","line":321,"function":"start","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/lib/Server.php","line":373,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/apps/dav/appinfo/v2/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"/var/www/html/remote.php","line":172,"args":["/var/www/html/apps/dav/appinfo/v2/remote.php"],"function":"require_once"}],"File":"/var/www/html/lib/private/Lock/MemcacheLockingProvider.php","Line":145}},"message":"\"Fashion2021.indd\" is locked, existing lock on file: 3 shared locks","exception":{},"CustomMessage":"\"Fashion2021.indd\" is locked, existing lock on file: 3 shared locks"}}

Additional info

It worked fine before (3.9.4 client, NC Server 26).

First occurrence of this bug was pointed by my client after moving to ~3.10 and higher.

Note: this was reproduced on a Windows client too

See the movie of what is happening (better i think than screenshots) (if i can join it)

@smarinier
Copy link
Author

smarinier commented Mar 22, 2024

NextCloud logs:
Nextcloud3_sync.log.zip

Screen recording (video starts after the conflict has been made, during sync repeats)

Enregistrement.de.l.ecran.2024-03-22.a.11.11.04.mov

@smarinier smarinier changed the title [Bug]: Syncing creates conflict file and sync loops indefinitively [Bug]: Desktop syncing creates conflict file and locking miscountings Mar 30, 2024
@smarinier
Copy link
Author

In fact, we fixed the problem:

Saving a file during a synchronisation may have these effects:

  • creation of a conflict file (and the saved file corrupted)
  • locking count problems

Without locking files on the server, all the synchronisation may fail. That's why we have "filelocking.enabled' => true" in configuration, as recommended default setup.

But we had two extra elements:

  • application "Temporary File Locking"
  • memcache.locking with redis

What we found, with combinations of these settings is:

  • with (our) redis memcache locking : locking miscountings and conflicts
  • with (our) redis memcache locking + "Temporary File Locking" : locking miscountings only
  • without any of these tools (locking by database only) : everything is fine

So mainly, there is a problem with the redis memcache locking, and we probably need to investigate on this. Either there is a problem with it, either it is our configuration. But nothing comes up in the logs concerning this. That's why we removed this memcache locking.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant