owncloud / owncloud/core

Folders get lost when performing the batch deletion

Open
#40,782 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Type:Bug
Dominant language
PHP
Stars
8.8k
Forks
2.1k
Avg merge
20h 7m
Merged PRs (30d)
41

Description

Steps to reproduce
  1. Make around 50 folders
#!/usr/bin/env bash
for (( c=1; c<=50; c++ ))
do 
    folderName="test$c"
    echo ${folderName}
    curl -X MKCOL -u admin:admin http://host.docker.internal:8080/remote.php/dav/files/admin/${folderName}
done
  1. Go to the UI and use batch action to delete all the folders
  2. Error messages is shown that certain folders weren't deleted
  3. Try deleting them again with batch action
  4. Error message is again displayed but upon reloading it shows that the folders are gone
  5. Go to the trashbin
Expected behaviour

All the deleted 50 folders should be in the trash bin

Actual behaviour

The folders that were deleted the second time aren't there

Server configuration

Operating system: Ubuntu 22.04.2 LTS

Web server: started server with this config https://github.com/owncloud/web/blob/master/docker-compose.yml

ownCloud version: (see ownCloud admin page) 10.12.1.3

ownCloud log (data/owncloud.log)
web_oc10  | {"reqId":"gRb6KHtxX5kr846MajiF","level":4,"time":"2023-05-11T05:09:07+00:00","remoteAddr":"172.20.0.1","user":"admin","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/files\/admin\/test3","message":"Exception: An exception occurred while executing 'UPDATE \"oc_filecache\" SET \"storage\" =  ?, \"path\" = ?, \"path_hash\" = ?, \"name\" = ?, \"parent\" =? WHERE \"fileid\" = ?' with params [2, \"files_trashbin\\\/files\\\/test3.d1683781747\", \"0e9bc4e4c7a9ecb2b6b254101173feab\", \"test3.d1683781747\", 384, 387]:\n\nSQLSTATE[HY000]: General error: 5 database is locked: {\"Exception\":\"Doctrine\\\\DBAL\\\\Exception\\\\LockWaitTimeoutException\",\"Message\":\"An exception occurred while executing 'UPDATE \\\"oc_filecache\\\" SET \\\"storage\\\" =  ?, \\\"path\\\" = ?, \\\"path_hash\\\" = ?, \\\"name\\\" = ?, \\\"parent\\\" =? WHERE \\\"fileid\\\" = ?' with params [2, \\\"files_trashbin\\\\\\\/files\\\\\\\/test3.d1683781747\\\", \\\"0e9bc4e4c7a9ecb2b6b254101173feab\\\", \\\"test3.d1683781747\\\", 384, 387]:\\n\\nSQLSTATE[HY000]: General error: 5 database is locked\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(182): Doctrine\\\\DBAL\\\\Driver\\\\AbstractSQLiteDriver->convertException()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(159): Doctrine\\\\DBAL\\\\DBALException::wrapException()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(2226): Doctrine\\\\DBAL\\\\DBALException::driverExceptionDuringQuery()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(1313): Doctrine\\\\DBAL\\\\Connection->handleExceptionDuringQuery()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/DB\\\/Connection.php(191): Doctrine\\\\DBAL\\\\Connection->executeQuery()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(620): OC\\\\DB\\\\Connection->executeQuery()\\n#6 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(570): OC\\\\Files\\\\Cache\\\\Cache->moveFromCache()\\n#7 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Updater.php(195): OC\\\\Files\\\\Cache\\\\Cache->move()\\n#8 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Trashbin.php(346): OC\\\\Files\\\\Cache\\\\Updater->renameFromStorage()\\n#9 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(199): OCA\\\\Files_Trashbin\\\\Trashbin::move2trash()\\n#10 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(135): OCA\\\\Files_Trashbin\\\\Storage->doDelete()\\n#11 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1225): OCA\\\\Files_Trashbin\\\\Storage->rmdir()\\n#12 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(370): OC\\\\Files\\\\View->basicOperation()\\n#13 \\\/var\\\/www\\\/owncloud\\\/lib\\\/public\\\/Events\\\/EventEmitterTrait.php(50): OC\\\\Files\\\\View->OC\\\\Files\\\\{closure}(*** sensitive parameters replaced ***)\\n#14 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(381): OC\\\\Files\\\\View->emittingCall()\\n#15 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(357): OC\\\\Files\\\\View->rmdir()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(179): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->delete()\\n#17 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(281): Sabre\\\\DAV\\\\Tree->delete()\\n#18 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpDelete()\\n#19 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#20 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#21 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#22 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#23 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#24 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/AbstractSQLiteDriver.php\",\"Line\":39}"}
web_oc10  | {"reqId":"gRb6KHtxX5kr846MajiF","level":4,"time":"2023-05-11T05:09:07+00:00","remoteAddr":"172.20.0.1","user":"admin","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/files\/admin\/test3","message":"Caused by: {\"Exception\":\"Doctrine\\\\DBAL\\\\Driver\\\\PDO\\\\Exception\",\"Message\":\"SQLSTATE[HY000]: General error: 5 database is locked\",\"Code\":\"HY000\",\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/PDOStatement.php(119): Doctrine\\\\DBAL\\\\Driver\\\\PDO\\\\Exception::new()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(1304): Doctrine\\\\DBAL\\\\Driver\\\\PDOStatement->execute()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/DB\\\/Connection.php(191): Doctrine\\\\DBAL\\\\Connection->executeQuery()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(620): OC\\\\DB\\\\Connection->executeQuery()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(570): OC\\\\Files\\\\Cache\\\\Cache->moveFromCache()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Updater.php(195): OC\\\\Files\\\\Cache\\\\Cache->move()\\n#6 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Trashbin.php(346): OC\\\\Files\\\\Cache\\\\Updater->renameFromStorage()\\n#7 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(199): OCA\\\\Files_Trashbin\\\\Trashbin::move2trash()\\n#8 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(135): OCA\\\\Files_Trashbin\\\\Storage->doDelete()\\n#9 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1225): OCA\\\\Files_Trashbin\\\\Storage->rmdir()\\n#10 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(370): OC\\\\Files\\\\View->basicOperation()\\n#11 \\\/var\\\/www\\\/owncloud\\\/lib\\\/public\\\/Events\\\/EventEmitterTrait.php(50): OC\\\\Files\\\\View->OC\\\\Files\\\\{closure}(*** sensitive parameters replaced ***)\\n#12 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(381): OC\\\\Files\\\\View->emittingCall()\\n#13 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(357): OC\\\\Files\\\\View->rmdir()\\n#14 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(179): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->delete()\\n#15 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(281): Sabre\\\\DAV\\\\Tree->delete()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpDelete()\\n#17 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#18 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#19 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#20 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#21 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#22 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/PDO\\\/Exception.php\",\"Line\":18}"}
web_oc10  | {"reqId":"gRb6KHtxX5kr846MajiF","level":4,"time":"2023-05-11T05:09:07+00:00","remoteAddr":"172.20.0.1","user":"admin","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/files\/admin\/test3","message":"Caused by: {\"Exception\":\"PDOException\",\"Message\":\"SQLSTATE[HY000]: General error: 5 database is locked\",\"Code\":\"HY000\",\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/PDOStatement.php(117): PDOStatement->execute()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(1304): Doctrine\\\\DBAL\\\\Driver\\\\PDOStatement->execute()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/DB\\\/Connection.php(191): Doctrine\\\\DBAL\\\\Connection->executeQuery()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(620): OC\\\\DB\\\\Connection->executeQuery()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(570): OC\\\\Files\\\\Cache\\\\Cache->moveFromCache()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Updater.php(195): OC\\\\Files\\\\Cache\\\\Cache->move()\\n#6 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Trashbin.php(346): OC\\\\Files\\\\Cache\\\\Updater->renameFromStorage()\\n#7 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(199): OCA\\\\Files_Trashbin\\\\Trashbin::move2trash()\\n#8 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(135): OCA\\\\Files_Trashbin\\\\Storage->doDelete()\\n#9 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1225): OCA\\\\Files_Trashbin\\\\Storage->rmdir()\\n#10 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(370): OC\\\\Files\\\\View->basicOperation()\\n#11 \\\/var\\\/www\\\/owncloud\\\/lib\\\/public\\\/Events\\\/EventEmitterTrait.php(50): OC\\\\Files\\\\View->OC\\\\Files\\\\{closure}(*** sensitive parameters replaced ***)\\n#12 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(381): OC\\\\Files\\\\View->emittingCall()\\n#13 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(357): OC\\\\Files\\\\View->rmdir()\\n#14 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(179): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->delete()\\n#15 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(281): Sabre\\\\DAV\\\\Tree->delete()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpDelete()\\n#17 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#18 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#19 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#20 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#21 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#22 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/PDOStatement.php\",\"Line\":117}"}
web_oc10  | 172.20.0.1 - - [11/May/2023:05:09:07 +0000] "DELETE /remote.php/dav/files/admin/test3 HTTP/1.1" 500 1052 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36"
web_oc10  | {"reqId":"B9aGwbuUzxWkmUt4hRKP","level":4,"time":"2023-05-11T05:09:07+00:00","remoteAddr":"172.20.0.1","user":"admin","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/files\/admin\/test4","message":"Exception: An exception occurred while executing 'UPDATE \"oc_filecache\" SET \"storage\" =  ?, \"path\" = ?, \"path_hash\" = ?, \"name\" = ?, \"parent\" =? WHERE \"fileid\" = ?' with params [2, \"files_trashbin\\\/files\\\/test4.d1683781747\", \"2d3b579bb2c341540e887c53e578e823\", \"test4.d1683781747\", 384, 388]:\n\nSQLSTATE[HY000]: General error: 5 database is locked: {\"Exception\":\"Doctrine\\\\DBAL\\\\Exception\\\\LockWaitTimeoutException\",\"Message\":\"An exception occurred while executing 'UPDATE \\\"oc_filecache\\\" SET \\\"storage\\\" =  ?, \\\"path\\\" = ?, \\\"path_hash\\\" = ?, \\\"name\\\" = ?, \\\"parent\\\" =? WHERE \\\"fileid\\\" = ?' with params [2, \\\"files_trashbin\\\\\\\/files\\\\\\\/test4.d1683781747\\\", \\\"2d3b579bb2c341540e887c53e578e823\\\", \\\"test4.d1683781747\\\", 384, 388]:\\n\\nSQLSTATE[HY000]: General error: 5 database is locked\",\"Code\":0,\"Trace\":\"#0 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(182): Doctrine\\\\DBAL\\\\Driver\\\\AbstractSQLiteDriver->convertException()\\n#1 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/DBALException.php(159): Doctrine\\\\DBAL\\\\DBALException::wrapException()\\n#2 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(2226): Doctrine\\\\DBAL\\\\DBALException::driverExceptionDuringQuery()\\n#3 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Connection.php(1313): Doctrine\\\\DBAL\\\\Connection->handleExceptionDuringQuery()\\n#4 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/DB\\\/Connection.php(191): Doctrine\\\\DBAL\\\\Connection->executeQuery()\\n#5 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(620): OC\\\\DB\\\\Connection->executeQuery()\\n#6 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Cache.php(570): OC\\\\Files\\\\Cache\\\\Cache->moveFromCache()\\n#7 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/Cache\\\/Updater.php(195): OC\\\\Files\\\\Cache\\\\Cache->move()\\n#8 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Trashbin.php(346): OC\\\\Files\\\\Cache\\\\Updater->renameFromStorage()\\n#9 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(199): OCA\\\\Files_Trashbin\\\\Trashbin::move2trash()\\n#10 \\\/var\\\/www\\\/owncloud\\\/apps\\\/files_trashbin\\\/lib\\\/Storage.php(135): OCA\\\\Files_Trashbin\\\\Storage->doDelete()\\n#11 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(1225): OCA\\\\Files_Trashbin\\\\Storage->rmdir()\\n#12 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(370): OC\\\\Files\\\\View->basicOperation()\\n#13 \\\/var\\\/www\\\/owncloud\\\/lib\\\/public\\\/Events\\\/EventEmitterTrait.php(50): OC\\\\Files\\\\View->OC\\\\Files\\\\{closure}(*** sensitive parameters replaced ***)\\n#14 \\\/var\\\/www\\\/owncloud\\\/lib\\\/private\\\/Files\\\/View.php(381): OC\\\\Files\\\\View->emittingCall()\\n#15 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Connector\\\/Sabre\\\/Directory.php(357): OC\\\\Files\\\\View->rmdir()\\n#16 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Tree.php(179): OCA\\\\DAV\\\\Connector\\\\Sabre\\\\Directory->delete()\\n#17 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/CorePlugin.php(281): Sabre\\\\DAV\\\\Tree->delete()\\n#18 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/event\\\/lib\\\/WildcardEmitterTrait.php(89): Sabre\\\\DAV\\\\CorePlugin->httpDelete()\\n#19 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(472): Sabre\\\\DAV\\\\Server->emit()\\n#20 \\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/sabre\\\/dav\\\/lib\\\/DAV\\\/Server.php(253): Sabre\\\\DAV\\\\Server->invokeMethod()\\n#21 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/lib\\\/Server.php(348): Sabre\\\\DAV\\\\Server->start()\\n#22 \\\/var\\\/www\\\/owncloud\\\/apps\\\/dav\\\/appinfo\\\/v2\\\/remote.php(31): OCA\\\\DAV\\\\Server->exec()\\n#23 \\\/var\\\/www\\\/owncloud\\\/remote.php(165): require_once('\\\/var\\\/www\\\/ownclo...')\\n#24 {main}\",\"File\":\"\\\/var\\\/www\\\/owncloud\\\/lib\\\/composer\\\/doctrine\\\/dbal\\\/lib\\\/Doctrine\\\/DBAL\\\/Driver\\\/AbstractSQLiteDriver.php\",\"Line\":39}"}

Video

https://github.com/owncloud/core/assets/41103328/604ff9c3-85c1-4c88-b423-c1ddac8a0483

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the batch deletion with about 50 folders, then inspect the SQLite lock trace through apps/files_trashbin/lib/Trashbin.php, apps/files_trashbin/lib/Storage.php, and lib/private/Files/Cache/Updater.php. Compare the batch behavior with the individual DELETE path. Done means all 50 deleted folders appear in the trash bin without folders being lost after retrying.

Written by the indexing model from the issue text.

Assessment

Tech stack
php, sqlite
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.