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

Permanently deleting/restoring multiple files from trash results in OCP\Lock\LockedException #16491

Closed
csware opened this issue Jul 21, 2019 · 66 comments · Fixed by #28438
Closed
Labels
2. developing Work in progress bug

Comments

@csware
Copy link
Contributor

csware commented Jul 21, 2019

Steps to reproduce

  1. Delete multiple files; make sure mp3, pdf, and jpegs are deleted
  2. Go to trash on the web frontend
  3. Select all files and select delete permanently

Expected behaviour

All files are removed without errors.

Actual behaviour

I see the error "Fehler beim Entfernen von Dateien aus dem Papierkorb".

Sometimes a few files are removed (from the disk and from the list). On all still visible files there are spinners visible.

I had similar problems with ownCloud before, however, there such errors were fixed.

Server configuration

Operating system: Debian 9.8

Web server: Apache 2.4

Database: MariaDB 10.1.38

PHP version: 7.3.7

Nextcloud version: 16.0.3.0 (was also in 16.0.1.1)

Updated from an older Nextcloud/ownCloud or fresh install: Upgraded from ownCloud 10.0.1 to NC12,13,14,15,16

Where did you install Nextcloud from: https://nextcloud.com/install/#instructions-server, tar.bz2

Signing status:

Signing status
No errors have been found.

List of activated apps:

App list
Enabled:
  - accessibility: 1.2.0
  - activity: 2.9.1
  - announcementcenter: 3.5.1
  - cloud_federation_api: 0.2.0
  - comments: 1.6.0
  - dav: 1.9.2
  - federatedfilesharing: 1.6.0
  - federation: 1.6.0
  - files: 1.11.0
  - files_external: 1.7.0
  - files_pdfviewer: 1.5.0
  - files_rightclick: 0.13.0
  - files_sharing: 1.8.0
  - files_texteditor: 2.8.0
  - files_trashbin: 1.6.0
  - files_versions: 1.9.0
  - files_videoplayer: 1.5.0
  - firstrunwizard: 2.5.0
  - gallery: 18.3.0
  - logreader: 2.1.0
  - lookup_server_connector: 1.4.0
  - nextcloud_announcements: 1.5.0
  - notifications: 2.4.1
  - oauth2: 1.4.2
  - provisioning_api: 1.6.0
  - serverinfo: 1.6.0
  - sharebymail: 1.6.0
  - systemtags: 1.6.0
  - text: 1.0.1
  - theming: 1.7.0
  - twofactor_backupcodes: 1.5.0
  - updatenotification: 1.6.0
  - viewer: 1.0.0
  - workflowengine: 1.6.0
Disabled:
  - admin_audit
  - encryption
  - password_policy
  - privacy
  - recommendations
  - support
  - survey_client
  - user_ldap

Nextcloud configuration:

Config report
{
    "system": {
        "instanceid": "***REMOVED SENSITIVE VALUE***",
        "passwordsalt": "***REMOVED SENSITIVE VALUE***",
        "datadirectory": "***REMOVED SENSITIVE VALUE***",
        "dbtype": "mysql",
        "version": "16.0.3.0",
        "dbname": "***REMOVED SENSITIVE VALUE***",
        "dbhost": "***REMOVED SENSITIVE VALUE***",
        "dbtableprefix": "oc_",
        "dbuser": "***REMOVED SENSITIVE VALUE***",
        "dbpassword": "***REMOVED SENSITIVE VALUE***",
        "installed": true,
        "forcessl": true,
        "loglevel": 2,
        "integrity.check.disabled": false,
        "apps_paths": [
            {
                "path": "\/var\/www\/nextcloud\/apps",
                "url": "\/apps",
                "writable": true
            }
        ],
        "maintenance": false,
        "theme": "",
        "overwrite.cli.url": "https:\/\/MYSERVER",
        "overwriteprotocol": "https",
        "activity_expire_days": 31,
        "trusted_domains": [
            "MYSERVER"
        ],
        "secret": "***REMOVED SENSITIVE VALUE***",
        "trashbin_retention_obligation": "auto",
        "htaccess.RewriteBase": "\/",
        "mail_smtpmode": "smtp",
        "mail_domain": "***REMOVED SENSITIVE VALUE***",
        "appstore.experimental.enabled": false,
        "singleuser": false,
        "log_rotate_size": 104857600,
        "logtimezone": "Europe\/Berlin",
        "mail_sendmailmode": "smtp",
        "app_install_overwrite": [
            "admin_notifications"
        ],
        "redis": {
            "host": "***REMOVED SENSITIVE VALUE***",
            "port": 0,
            "dbindex": 1,
            "timeout": 0
        },
        "updater.secret": "***REMOVED SENSITIVE VALUE***"
    }
}

Are you using external storage, if yes which one: no

Are you using encryption: no

Are you using an external user-backend, if yes which one: no

Client configuration

Browser: Mozilla Firefox 68.0.1 (but also experienced with older Firefox)

Operating system: Win 7 x64

Logs

Web server error log

Web server error log
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/1.mp3.d1563726267 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/2.mp3.d1563726292 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/3.mp3.d1563726267 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/4.mp3.d1563726267 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/5.mp3.d1563726269 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/6.mp3.d1563726274 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/7.mp3.d1563456500 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/8.mp3.d1563726273 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/9.mp3.d1563533419 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/10.mdzip.bak.d1563193662 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/11.zip.gpg.d1563624216 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/12.mp3.d1563456509 HTTP/2.0" 500 238 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:40 +0200] "DELETE /remote.php/dav/trashbin/USER/trash/13.mp3.d1563726266 HTTP/2.0" 204 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:25:46 +0200] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 200 81 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"
XXXX - - [21/Jul/2019:18:26:16 +0200] "GET /ocs/v2.php/apps/notifications/api/v2/notifications HTTP/2.0" 200 81 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko/20100101 Firefox/68.0"

Nextcloud log (data/nextcloud.log)

Nextcloud log
{"reqId":"fNBablojNgbdf3aUisgu","level":4,"time":"2019-07-21T18:25:41+02:00","remoteAddr":"XXXX","user":"USER","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/trashbin\/USER\/trash\/1.mp3.d1563726267","message":{"Exception":"OCP\\Lock\\LockedException","Message":"\"files\/763a2e578bf5646da6c362952851c861\" is locked","Code":0,"Trace":[{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Common.php","line":715,"function":"acquireLock","class":"OC\\Lock\\DBLockingProvider","type":"->","args":["files\/763a2e578bf5646da6c362952851c861",2]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Common","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Cache\/Scanner.php","line":331,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":868,"function":"scan","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["files_trashbin\/versions"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":614,"function":"getVersionsFromTrash","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/1.mp3",1563726267,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":579,"function":"deleteVersions","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":[{"__class__":"OC\\Files\\View"},"\/1.mp3.d1563726267","\/1.mp3",1563726267,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/LegacyTrashBackend.php","line":90,"function":"delete","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/1.mp3","USER",1563726267]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/TrashManager.php","line":69,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\LegacyTrashBackend","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Sabre\/AbstractTrash.php","line":83,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\TrashManager","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Tree.php","line":179,"function":"delete","class":"OCA\\Files_Trashbin\\Sabre\\AbstractTrash","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/CorePlugin.php","line":287,"function":"delete","class":"Sabre\\DAV\\Tree","type":"->","args":["trashbin\/USER\/trash\/1.mp3.d1563726267"]},{"function":"httpDelete","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/1.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/event\/lib\/EventEmitterTrait.php","line":105,"function":"call_user_func_array","args":[[{"__class__":"Sabre\\DAV\\CorePlugin"},"httpDelete"],[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/1.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":479,"function":"emit","class":"Sabre\\Event\\EventEmitter","type":"->","args":["method:DELETE",[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/1.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":254,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/1.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/lib\/Server.php","line":316,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/remote.php","line":163,"args":["\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php"],"function":"require_once"}],"File":"\/var\/www\/nextcloud\/lib\/private\/Lock\/DBLockingProvider.php","Line":209,"CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko\/20100101 Firefox\/68.0","version":"16.0.3.0"}
{"reqId":"z7ZbeNutfgwizofAkv8h","level":4,"time":"2019-07-21T18:25:41+02:00","remoteAddr":"XXXX","user":"USER","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/trashbin\/USER\/trash\/3.mp3.d1563726267","message":{"Exception":"OCP\\Lock\\LockedException","Message":"\"files\/763a2e578bf5646da6c362952851c861\" is locked","Code":0,"Trace":[{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Common.php","line":715,"function":"acquireLock","class":"OC\\Lock\\DBLockingProvider","type":"->","args":["files\/763a2e578bf5646da6c362952851c861",2]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Common","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Cache\/Scanner.php","line":331,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":868,"function":"scan","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["files_trashbin\/versions"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":614,"function":"getVersionsFromTrash","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/3.mp3",1563726267,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":579,"function":"deleteVersions","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":[{"__class__":"OC\\Files\\View"},"\/3.mp3.d1563726267","\/3.mp3",1563726267,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/LegacyTrashBackend.php","line":90,"function":"delete","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/3.mp3","USER",1563726267]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/TrashManager.php","line":69,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\LegacyTrashBackend","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Sabre\/AbstractTrash.php","line":83,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\TrashManager","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Tree.php","line":179,"function":"delete","class":"OCA\\Files_Trashbin\\Sabre\\AbstractTrash","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/CorePlugin.php","line":287,"function":"delete","class":"Sabre\\DAV\\Tree","type":"->","args":["trashbin\/USER\/trash\/3.mp3.d1563726267"]},{"function":"httpDelete","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/3.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/event\/lib\/EventEmitterTrait.php","line":105,"function":"call_user_func_array","args":[[{"__class__":"Sabre\\DAV\\CorePlugin"},"httpDelete"],[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/3.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":479,"function":"emit","class":"Sabre\\Event\\EventEmitter","type":"->","args":["method:DELETE",[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/3.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":254,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/3.mp3.d1563726267","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/lib\/Server.php","line":316,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/remote.php","line":163,"args":["\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php"],"function":"require_once"}],"File":"\/var\/www\/nextcloud\/lib\/private\/Lock\/DBLockingProvider.php","Line":209,"CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko\/20100101 Firefox\/68.0","version":"16.0.3.0"}
{"reqId":"LK5a5bBx8JX9ma95iDvm","level":4,"time":"2019-07-21T18:25:41+02:00","remoteAddr":"XXXX","user":"USER","app":"webdav","method":"DELETE","url":"\/remote.php\/dav\/trashbin\/USER\/trash\/2.mp3.d1563726292","message":{"Exception":"OCP\\Lock\\LockedException","Message":"\"files\/763a2e578bf5646da6c362952851c861\" is locked","Code":0,"Trace":[{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Common.php","line":715,"function":"acquireLock","class":"OC\\Lock\\DBLockingProvider","type":"->","args":["files\/763a2e578bf5646da6c362952851c861",2]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Common","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Storage\/Wrapper\/Wrapper.php","line":593,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/lib\/private\/Files\/Cache\/Scanner.php","line":331,"function":"acquireLock","class":"OC\\Files\\Storage\\Wrapper\\Wrapper","type":"->","args":["scanner::files_trashbin\/versions",2,{"__class__":"OC\\Lock\\DBLockingProvider"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":868,"function":"scan","class":"OC\\Files\\Cache\\Scanner","type":"->","args":["files_trashbin\/versions"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":614,"function":"getVersionsFromTrash","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/2.mp3",1563726292,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trashbin.php","line":579,"function":"deleteVersions","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":[{"__class__":"OC\\Files\\View"},"\/2.mp3.d1563726292","\/2.mp3",1563726292,"USER"]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/LegacyTrashBackend.php","line":90,"function":"delete","class":"OCA\\Files_Trashbin\\Trashbin","type":"::","args":["\/2.mp3","USER",1563726292]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Trash\/TrashManager.php","line":69,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\LegacyTrashBackend","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/apps\/files_trashbin\/lib\/Sabre\/AbstractTrash.php","line":83,"function":"removeItem","class":"OCA\\Files_Trashbin\\Trash\\TrashManager","type":"->","args":[{"__class__":"OCA\\Files_Trashbin\\Trash\\TrashItem"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Tree.php","line":179,"function":"delete","class":"OCA\\Files_Trashbin\\Sabre\\AbstractTrash","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/CorePlugin.php","line":287,"function":"delete","class":"Sabre\\DAV\\Tree","type":"->","args":["trashbin\/USER\/trash\/2.mp3.d1563726292"]},{"function":"httpDelete","class":"Sabre\\DAV\\CorePlugin","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/2.mp3.d1563726292","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/event\/lib\/EventEmitterTrait.php","line":105,"function":"call_user_func_array","args":[[{"__class__":"Sabre\\DAV\\CorePlugin"},"httpDelete"],[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/2.mp3.d1563726292","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":479,"function":"emit","class":"Sabre\\Event\\EventEmitter","type":"->","args":["method:DELETE",[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/2.mp3.d1563726292","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]]},{"file":"\/var\/www\/nextcloud\/3rdparty\/sabre\/dav\/lib\/DAV\/Server.php","line":254,"function":"invokeMethod","class":"Sabre\\DAV\\Server","type":"->","args":[{"absoluteUrl":"https:\/\/MYSRV\/remote.php\/dav\/trashbin\/USER\/trash\/2.mp3.d1563726292","__class__":"Sabre\\HTTP\\Request"},{"__class__":"Sabre\\HTTP\\Response"}]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/lib\/Server.php","line":316,"function":"exec","class":"Sabre\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php","line":35,"function":"exec","class":"OCA\\DAV\\Server","type":"->","args":[]},{"file":"\/var\/www\/nextcloud\/remote.php","line":163,"args":["\/var\/www\/nextcloud\/apps\/dav\/appinfo\/v2\/remote.php"],"function":"require_once"}],"File":"\/var\/www\/nextcloud\/lib\/private\/Lock\/DBLockingProvider.php","Line":209,"CustomMessage":"--"},"userAgent":"Mozilla\/5.0 (Windows NT 6.1; Win64; x64; rv:68.0) Gecko\/20100101 Firefox\/68.0","version":"16.0.3.0"}

Browser log

Browser log
No errors in the javaScript console.
Some 500er errors for the selected files with `DELETE` requests, one `DELETE` request finished with a 204.

@csware csware added bug 0. Needs triage Pending check for reproducibility or if it fits our roadmap labels Jul 21, 2019
@wiswedel
Copy link
Contributor

Looks like you have configured Redis but gave it no job.
Please see https://docs.nextcloud.com/server/16/admin_manual/configuration_files/files_locking_transactional.html for how to configure Redis for transactional file locking.
That should fix your problem.

@csware

This comment has been minimized.

@khlschrnk
Copy link

I have this problem as long as I can remember. I once figured out that disabling file locking does solve this. So I usually disable it, delete the files in trash and enable it again.

Simply set 'filelocking.enabled' => false, in nextcloud/config/config.php and try to delete the files.

As this is obviously not a real solution to the problem I am also interested in other ideas.

@wiswedel
Copy link
Contributor

On the page you linked, there is nothing written about a job.

Sure it is, it shows how to configure Redis as backend for transactional file locking.

@csware
Copy link
Contributor Author

csware commented Jul 22, 2019

@wiswedel I see, youn mean 'memcache.local' => '\\OC\\Memcache\\Redis', and 'memcache.locking' => '\\OC\\Memcache\\Redis', are missing. That was a mistake in the original report, I removed those two lines because I hoped disabling this would sovle the issue. - It does not.

@csware
Copy link
Contributor Author

csware commented Jul 23, 2019

Even if Redis is not correctly set up, then this issue seems to be independent of Redis.

@ryan77627
Copy link

I'd like to confirm I have the same issue with the trashbin, and I don't believe it's Redis since I don't have that setup. I use APCu for memcaching and have no memcache lock setup in my config.

By adding 'filelocking.enabled' => false, the trashbin deleted more than one file at a time again.

@the-sane
Copy link

the-sane commented Aug 9, 2019

Possibly related: #12281

gixxxerg wrote #12281 (comment)

in the web interface it is a bug
when selecting the file on the left side and then selecting delete from the menu does not delete the file
see image:
nodeletion

when deleting the file one at a time on the right side however, the files does get deleted
see image:
deletion

@Wehzie
Copy link

Wehzie commented Aug 11, 2019

I am coming here from issue #16665

When I decide to delete multiple files from the trash they aren't removed. The turning icon keeps looping infinitely; I do not get an error message. Refreshing the page and then deleting files by single works.

I use Raspian/Debian 10, PHP 7.3, 10.3.15-MariaDB, Apache 2.4 and Nextcloud 16.0.3 without having upgraded from a previous version.

@ryan77627
Copy link

Yeah, that was the exact same issue I was having. I don't know exactly what the issue is but the workaround I used that was listed above was to add 'filelocking.enabled' => false, into the nextcloud config file. That seems to fix it for now.

@khlschrnk
Copy link

I just tested to delete files one by one. Then it seems to work fine. Just when I select multiple files (two is already enough) I get this error.

@Wehzie
Copy link

Wehzie commented Aug 12, 2019

There seem to risks associated with disabling file locking. I am now also receiving a "423 Locked" error from a GET request in the Windows desktop app as indicated there:
https://help.nextcloud.com/t/file-is-locked-how-to-unlock/1883

I have also been trying to rsync my data, however the rsync process gets stuck. Perhaps this is because some files are blocked or currupted.

@ecejuan

This comment has been minimized.

@Milokita
Copy link

Having the similar problem when recovers the file, click on the button one by one gives no problem but once in batch, the error occurs.
However, this seems does not occur on try.nextcloud.com with SQLite as backend. @wiswedel

@tiaga
Copy link

tiaga commented Sep 18, 2019

Looks like you have configured Redis but gave it no job.
Please see https://docs.nextcloud.com/server/16/admin_manual/configuration_files/files_locking_transactional.html for how to configure Redis for transactional file locking.
That should fix your problem.

I setted up Redis, but it is not resolved the issue. Could you please check it?

@wiswedel
Copy link
Contributor

@skjnldsv Could you maybe take a look?

@skjnldsv
Copy link
Member

@wiswedel I'm really not the locking expert ;)
cc @rullzer @icewind1991

@wiswedel
Copy link
Contributor

I'm really not the locking expert ;)

@skjnldsv But the triaging expert 🦸‍♂️

@csware

This comment has been minimized.

@skjnldsv
Copy link
Member

The only 'fix' I found is temporarily disable locking on the config.php
'filelocking.enabled' => false,

@skjnldsv skjnldsv added 1. to develop Accepted and waiting to be taken care of and removed 0. Needs triage Pending check for reproducibility or if it fits our roadmap labels Nov 18, 2019
@csware

This comment has been minimized.

@skjnldsv

This comment has been minimized.

@tanty

This comment has been minimized.

@solracsf
Copy link
Member

solracsf commented Jan 8, 2020

The only 'fix' I found is temporarily disable locking on the config.php
'filelocking.enabled' => false,

Yes, same here when using Object Storage (S3 compatible) as primary storage at least. otherwise, a lot of LockedException occurs, not only deleting but also when writing thousands of files.

@olicooper
Copy link

olicooper commented May 30, 2021

I have read the lock exception again and I have noticed that nextcloud is trying to acquire a lock on the entire version folder...

(\"home::Username::scanner::files_trashbin/versions\") is locked, existing lock on file: exclusive

If it does this for every delete command then it will obviously clash when deleting multiple files.. I think everyone who has the 'versions' plugin enabled might have this locking issue when deleting multiple files.

I still need to test my theory though. I deleted 30 text files at once after disabling the version plugin and didn't receive an error!! I then deleted 12 x 50MB files and still no errors!

Possible 'versions' plugin bug

The versions plugin is probably causing the locking issues
.. Can everyone try and test this theory by disabling their 'versions' plugin too?

Hey Nextcloud team (@wiswedel @rullzer @icewind1991)... Given the response, I think this is the issue, would you guys be able to take another look at this potential bug? 😃

@DaleBCooper
Copy link

Good work!
I confirm that the version plugin is the culprit.
Disabling it resolves the issue.

@Octopus2
Copy link

I can also confirm the solution. And this behavior has been bothering me from about Nextcloud 16 to my current Nextcloud version 20.0.10.

Perhaps my situation will help isolate the error: A local folder is shared with a group in which 70 people have full access to the files and folders. Works without problems. Then move many files to the recycle bin. Deleting individual files from the recycle bin works. Deleting multiple files from the recycle bin always fails.

OCP\Lock\LockedException: "files/b335f764174c3ddfa1127f14b5a7a00d"("home::RaBauKi::scanner::files_trashbin/versions") is locked, existing lock on file: exclusive

My workarounds:

  1. Deactivate the version app to delete a lot of files (but it feels strange).

  2. You can completely delete the content of the recycle bin with the current Android Nextcloud app with one click without any problems. (That this works is also weird).

@solracsf solracsf changed the title Permanently deleting multiple files from trash does not work and results in OCP\Lock\LockedException Permanently deleting multiple files from trash results in OCP\Lock\LockedException - Versions app related Aug 8, 2021
@solracsf solracsf changed the title Permanently deleting multiple files from trash results in OCP\Lock\LockedException - Versions app related Permanently deleting/restoring multiple files from trash results in OCP\Lock\LockedException Aug 8, 2021
@solracsf
Copy link
Member

solracsf commented Aug 8, 2021

Please note; this also occurs when trying to restore, not only deleting, multiple files.

@AndyXheli
Copy link
Contributor

Yes I can also confirm @acsfer

csware added a commit to csware/server that referenced this issue Aug 15, 2021
… from trash

fixes issue nextcloud#16491

Signed-off-by: Sven Strickroth <email@cs-ware.de>
csware added a commit to csware/server that referenced this issue Aug 15, 2021
… from trash

fixes issue nextcloud#16491

Signed-off-by: Sven Strickroth <email@cs-ware.de>
@szaimen szaimen added 2. developing Work in progress and removed 1. to develop Accepted and waiting to be taken care of labels Aug 17, 2021
csware added a commit to csware/server that referenced this issue Aug 19, 2021
… from trash

fixes issue nextcloud#16491

Signed-off-by: Sven Strickroth <email@cs-ware.de>
@khlschrnk
Copy link

khlschrnk commented Nov 11, 2021

I just updated to 22.2.1 and the problem seems to be gone. Unfortunately, I just recently updated my operating system so there might be somethin else affecting this. Still, filelocking is still enabled in config and apcu deamon is running.

//EDIT:
Fore some very few files I still got an error. In log it says
OCP\Lock\LockedException: "files/5813b2c0704a60385854d1df7fcbac1c"("home::USERNAME::scanner::files_trashbin/versions") is locked, existing lock on file: exclusive
I got the feeling that this happens for files that have other versions existing.

It still improved a lot. Before I was not able to delete any multiple files.

backportbot-nextcloud bot pushed a commit that referenced this issue Dec 23, 2021
… from trash

fixes issue #16491

Signed-off-by: Sven Strickroth <email@cs-ware.de>
backportbot-nextcloud bot pushed a commit that referenced this issue Dec 23, 2021
… from trash

fixes issue #16491

Signed-off-by: Sven Strickroth <email@cs-ware.de>
@bllngr
Copy link

bllngr commented Apr 16, 2022

Even with NC 22.2.6, Redis being used as memcache for locking, and filelocking disabled, I'm still getting exceptions when trying to permanently delete many files and directories at once.

Is there any workaround, or are we just stuck with undeletable files?

@jabdoa2
Copy link

jabdoa2 commented Apr 16, 2022

Even with NC 22.2.6, Redis being used as memcache for locking, and filelocking disabled, I'm still getting exceptions when trying to permanently delete many files and directories at once.

Is there any workaround, or are we just stuck with undeletable files?

Maybe deleting on disk and then scanning via occ scan would work?

@khlschrnk
Copy link

khlschrnk commented Nov 17, 2022

I will write here, even though there are several other issues about this same topic. All of these issues are closed: #20362 #28720 #28438

My problem is that the problem still exists. After some updates about a year ago the problem got far less disturbant as the frequency reduced significantly. On average the "OCP\Lock\LockedException" occures once for every 15-20 files.

I am currently running nextcloud 25.0.1 and have all apps up to date.

When the error occurs I see the folowing entry in the log:

OCP\Lock\LockedException: "files/5813b2c0704a60385854d1df7fcbac1c"("home::USERNAME::scanner::files_trashbin/versions") is locked, existing lock on file: exclusive

/crypt/nextcloud/lib/private/Files/Storage/Common.php - line 763:
OC\Lock\MemcacheLockingProvider->acquireLock()

/crypt/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php - line 610:
OC\Files\Storage\Common->acquireLock()

/crypt/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php - line 610:
OC\Files\Storage\Wrapper\Wrapper->acquireLock()

/crypt/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php - line 610:
OC\Files\Storage\Wrapper\Wrapper->acquireLock()

/crypt/nextcloud/lib/private/Files/Cache/Scanner.php - line 335:
OC\Files\Storage\Wrapper\Wrapper->acquireLock()

/crypt/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 987:
OC\Files\Cache\Scanner->scan()

/crypt/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 712:
OCA\Files_Trashbin\Trashbin::getVersionsFromTrash()

/crypt/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 677:
OCA\Files_Trashbin\Trashbin::deleteVersions()

/crypt/nextcloud/apps/files_trashbin/lib/Trash/LegacyTrashBackend.php - line 91:
OCA\Files_Trashbin\Trashbin::delete()

/crypt/nextcloud/apps/files_trashbin/lib/Trash/TrashManager.php - line 68:
OCA\Files_Trashbin\Trash\LegacyTrashBackend->removeItem()

/crypt/nextcloud/apps/files_trashbin/lib/Sabre/AbstractTrash.php - line 89:
OCA\Files_Trashbin\Trash\TrashManager->removeItem()

/crypt/nextcloud/3rdparty/sabre/dav/lib/DAV/Tree.php - line 179:
OCA\Files_Trashbin\Sabre\AbstractTrash->delete()

/crypt/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php - line 281:
Sabre\DAV\Tree->delete()

/crypt/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php - line 89:
Sabre\DAV\CorePlugin->httpDelete()

/crypt/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 472:
Sabre\DAV\Server->emit()

/crypt/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 253:
Sabre\DAV\Server->invokeMethod()

/crypt/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 321:
Sabre\DAV\Server->start()

/crypt/nextcloud/apps/dav/lib/Server.php - line 360:
Sabre\DAV\Server->exec()

/crypt/nextcloud/apps/dav/appinfo/v2/remote.php - line 35:
OCA\DAV\Server->exec()

/crypt/nextcloud/remote.php - line 171:
require_once("/crypt/next ... p")`

I don't see any activity in any of these similar issues referenced above. Was this issue really closed? Any others still having problems here?

@TheMihle
Copy link

TheMihle commented Nov 19, 2022

Yeah, After the update that made this be closed, it got better, but there is still issues. I have not tried empty everything in the trash at once, but when selecting multipile files I get error. OCP\Lock\LockedException

Weird to me is that I have not been able to conclude on how many files I have to delete from trash at the same time for the error to come, because it doesnt seem to be the same. Sometimes I can delete 40 files at the same time just fine, others I do 15 and it doesnt.

Also, if I keep deleting a bunch at the time over and over with an amount that works over and over it eventually start coming with errors again.

And sometimes when do that, I stop being able to delete any files at all from there at all, not even a single one, it happened yesterday, restarting the docker did not work, but after waiting a day untill today, I could delete stuff in trash bin again. But then when repeating deleting a bunch, it has now happened again.

For refference, if it matters I am running the "linuxserver" docker on unraid. Nextcloud 24.0.6

My error is similar to the person above:

OCP\Lock\LockedException: "files/6b2286096d1274d624adf83678c18a06"("home::USERNAME::scanner::files_trashbin/versions") is locked
/config/www/nextcloud/lib/private/Files/Storage/Common.php - line 758:

OC\Lock\DBLockingProvider->acquireLock()

/config/www/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php - line 610:

OC\Files\Storage\Common->acquireLock()

/config/www/nextcloud/lib/private/Files/Cache/Scanner.php - line 335:

OC\Files\Storage\Wrapper\Wrapper->acquireLock()

/config/www/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 980:

OC\Files\Cache\Scanner->scan()

/config/www/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 705:

OCA\Files_Trashbin\Trashbin::getVersionsFromTrash()

/config/www/nextcloud/apps/files_trashbin/lib/Trashbin.php - line 670:

OCA\Files_Trashbin\Trashbin::deleteVersions()

/config/www/nextcloud/apps/files_trashbin/lib/Trash/LegacyTrashBackend.php - line 91:

OCA\Files_Trashbin\Trashbin::delete()

/config/www/nextcloud/apps/files_trashbin/lib/Trash/TrashManager.php - line 68:

OCA\Files_Trashbin\Trash\LegacyTrashBackend->removeItem()

/config/www/nextcloud/apps/files_trashbin/lib/Sabre/AbstractTrash.php - line 89:

OCA\Files_Trashbin\Trash\TrashManager->removeItem()

/config/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Tree.php - line 179:

OCA\Files_Trashbin\Sabre\AbstractTrash->delete()

/config/www/nextcloud/3rdparty/sabre/dav/lib/DAV/CorePlugin.php - line 281:

Sabre\DAV\Tree->delete()

/config/www/nextcloud/3rdparty/sabre/event/lib/WildcardEmitterTrait.php - line 89:

Sabre\DAV\CorePlugin->httpDelete()

/config/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 472:

Sabre\DAV\Server->emit()

/config/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 253:

Sabre\DAV\Server->invokeMethod()

/config/www/nextcloud/3rdparty/sabre/dav/lib/DAV/Server.php - line 321:

Sabre\DAV\Server->start()

/config/www/nextcloud/apps/dav/lib/Server.php - line 358:

Sabre\DAV\Server->exec()

/config/www/nextcloud/apps/dav/appinfo/v2/remote.php - line 35:

OCA\DAV\Server->exec()

/config/www/nextcloud/remote.php - line 166:

require_once("/config/www ... p")

@TheMihle
Copy link

That above^ continued:
@skjnldsv Should I open a new issueon this?

I did some more testing, when I do it when I am not at the home network, it lets me delete much more at the time without getting the error, its much rarer. And it did never lock up. I have always on VPN to the nas btw.

I am guessing the reason might be something to do with latency or something, maybe longer latency makes it work fine? I am just guessing.

@tanty
Copy link

tanty commented Nov 29, 2022

@TheMihle I have the same setting and problem than you.

My guess is, actually, that the server is not fast enough to unlink the files before moving ahead and some race condition happens when managing the lock.

@khlschrnk
Copy link

Should we open a new issue or will this issue be reopened?

@TheMihle
Copy link

TheMihle commented Apr 29, 2023

I tried to delete stuff again, I am still getting error messages, but it allows me to delete more things at once before it errors, and it didnt look up. The error messages I get is also no longer the "LockedException" error. I am getting "Too many connections" error to the database and some others instead in logs. So I will increase that, but I dont have more files in deleted files to test after that. Its works better than it did tho.

(DB max connections was on 100, but I am increasing it)

I am running the 25.0.6 now, not sure what update changed it, but sure wasnt the update that was mentioned here.
So I will not be creating a new topic myself right now, some else might tho, if not done already but didnt find it.

@khlschrnk
Copy link

khlschrnk commented May 1, 2023

The problem is gone on my side. I noticed it after updating to 25.0.6 but I also did quite a few changes to my server (swap, network setup, virtual machines, nextcloud apps). In the end I can't tell what of these changes influenced this behavior.

Also after updating to 26.0.0 and 26.0.1 I don't have any issues to delete files from trash any more. Also, it's significantly faster. ~30 files now take about 3 seconds to delete from tash. Before, it did only delete one file per minute (roughly measured).

I also don't see log entries any more while deleting files from trash.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
2. developing Work in progress bug
Projects
None yet
Development

Successfully merging a pull request may close this issue.