Skip to content

Nextcloud File Locking gets out of sync #1940

Description

@schemil053

Sometimes the nextcloud android app break and fails to sync a note. Only opening the file in the browser and closing it again resolves it

Steps to reproduce

This issue is not 100% reproducible every time, but I found it using that way:

  1. Use Android app to edit notes
  2. Edit the file with the website again (after closing the android app)
  3. Use the Android app again to edit again

Expected behaviour

The app syncs fine

Actual behaviour

The Server logs an error (attached below)

And the notes app shows an error that is not able to sync. Only if you go to the website, open and close the note, the sync works again

Server

  • Notes app version: 6.0.1
  • Nextcloud version: 34.0.1
  • OS: Debian/LXC
  • Web server: apache2 2.4.68-1~deb13u1
  • PHP version: 8.4.23
  • Database: mariadb

Nextcloud is ran behind an apache proxy server

Client

  • Browser (incl. version): Firefox ESR 140.12.0
    • OS: Debian Trixie with Wayland

The other Client is Android 16 using the latest available version of the notes android app

Log files

{
  "reqId": "REDACTED",
  "level": 3,
  "time": "2026-07-17T04:12:11+00:00",
  "remoteAddr": "REDACTED",
  "user": "REDACTED",
  "app": "notes",
  "method": "PUT",
  "url": "/index.php/apps/notes/api/v1/notes/23228?",
  "scriptName": "/index.php",
  "message": "Controller failed with OCP\\Lock\\ManuallyLockedException",
  "userAgent": "Mozilla/5.0 (Android) Nextcloud-android/34.0.1",
  "version": "34.0.1.2",
  "exception": {
    "Exception": "OCP\\Lock\\ManuallyLockedException",
    "Message": "\"files/Notizen/Privat/Todo.md\" is locked, existing lock on file: files_lock/1ed743bc-1034-40ef-9711-3a5ab33e994c",
    "Code": 0,
    "Trace": [
      {
        "file": "/var/www/nextcloud/apps/files_lock/lib/Storage/LockWrapper.php",
        "line": 213,
        "function": "checkPermissions",
        "class": "OCA\\FilesLock\\Storage\\LockWrapper",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php",
        "line": 150,
        "function": "file_put_contents",
        "class": "OCA\\FilesLock\\Storage\\LockWrapper",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/Files/View.php",
        "line": 1235,
        "function": "file_put_contents",
        "class": "OC\\Files\\Storage\\Wrapper\\Wrapper",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/Files/View.php",
        "line": 680,
        "function": "basicOperation",
        "class": "OC\\Files\\View",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/Files/Node/File.php",
        "line": 56,
        "function": "file_put_contents",
        "class": "OC\\Files\\View",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/apps/notes/lib/Service/Note.php",
        "line": 174,
        "function": "putContent",
        "class": "OC\\Files\\Node\\File",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/apps/notes/lib/Controller/NotesApiController.php",
        "line": 174,
        "function": "setContent",
        "class": "OCA\\Notes\\Service\\Note",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/apps/notes/lib/Service/Util.php",
        "line": 25,
        "function": "{closure:OCA\\Notes\\Controller\\NotesApiController::update():164}",
        "class": "OCA\\Notes\\Controller\\NotesApiController",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/var/www/nextcloud/apps/notes/lib/Controller/Helper.php",
        "line": 135,
        "function": "retryIfLocked",
        "class": "OCA\\Notes\\Service\\Util",
        "type": "::"
      },
      {
        "file": "/var/www/nextcloud/apps/notes/lib/Controller/NotesApiController.php",
        "line": 164,
        "function": "handleErrorResponse",
        "class": "OCA\\Notes\\Controller\\Helper",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php",
        "line": 165,
        "function": "update",
        "class": "OCA\\Notes\\Controller\\NotesApiController",
        "type": "->",
        "args": [
          "*** sensitive parameters replaced ***"
        ]
      },
      {
        "file": "/var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php",
        "line": 78,
        "function": "executeController",
        "class": "OC\\AppFramework\\Http\\Dispatcher",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/AppFramework/App.php",
        "line": 137,
        "function": "dispatch",
        "class": "OC\\AppFramework\\Http\\Dispatcher",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/lib/private/Route/Router.php",
        "line": 324,
        "function": "main",
        "class": "OC\\AppFramework\\App",
        "type": "::"
      },
      {
        "file": "/var/www/nextcloud/lib/base.php",
        "line": 1159,
        "function": "match",
        "class": "OC\\Route\\Router",
        "type": "->"
      },
      {
        "file": "/var/www/nextcloud/index.php",
        "line": 25,
        "function": "handleRequest",
        "class": "OC",
        "type": "::"
      }
    ],
    "File": "/var/www/nextcloud/apps/files_lock/lib/Storage/LockWrapper.php",
    "Line": 82,
    "message": "Controller failed with OCP\\Lock\\ManuallyLockedException",
    "exception": "{\"class\":\"OCP\\Lock\\ManuallyLockedException\",\"message\":\"\\\"files/Notizen/Privat/Todo.md\\\" is locked, existing lock on file: files_lock/1ed743bc-1034-40ef-9711-3a5ab33e994c\",\"code\":0,\"file\":\"/var/www/nextcloud/apps/files_lock/lib/Storage/LockWrapper.php:82\",\"trace\":\"#0 /var/www/nextcloud/apps/files_lock/lib/Storage/LockWrapper.php(213): OCA\\FilesLock\\Storage\\LockWrapper->checkPermissions()\\n#1 /var/www/nextcloud/lib/private/Files/Storage/Wrapper/Wrapper.php(150): OCA\\FilesLock\\Storage\\LockWrapper->file_put_contents()\\n#2 /var/www/nextcloud/lib/private/Files/View.php(1235): OC\\Files\\Storage\\Wrapper\\Wrapper->file_put_contents()\\n#3 /var/www/nextcloud/lib/private/Files/View.php(680): OC\\Files\\View->basicOperation()\\n#4 /var/www/nextcloud/lib/private/Files/Node/File.php(56): OC\\Files\\View->file_put_contents()\\n#5 /var/www/nextcloud/apps/notes/lib/Service/Note.php(174): OC\\Files\\Node\\File->putContent()\\n#6 /var/www/nextcloud/apps/notes/lib/Controller/NotesApiController.php(174): OCA\\Notes\\Service\\Note->setContent()\\n#7 /var/www/nextcloud/apps/notes/lib/Service/Util.php(25): OCA\\Notes\\Controller\\NotesApiController->{closure:OCA\\Notes\\Controller\\NotesApiController::update():164}()\\n#8 /var/www/nextcloud/apps/notes/lib/Controller/Helper.php(135): OCA\\Notes\\Service\\Util::retryIfLocked()\\n#9 /var/www/nextcloud/apps/notes/lib/Controller/NotesApiController.php(164): OCA\\Notes\\Controller\\Helper->handleErrorResponse()\\n#10 /var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php(165): OCA\\Notes\\Controller\\NotesApiController->update()\\n#11 /var/www/nextcloud/lib/private/AppFramework/Http/Dispatcher.php(78): OC\\AppFramework\\Http\\Dispatcher->executeController()\\n#12 /var/www/nextcloud/lib/private/AppFramework/App.php(137): OC\\AppFramework\\Http\\Dispatcher->dispatch()\\n#13 /var/www/nextcloud/lib/private/Route/Router.php(324): OC\\AppFramework\\App::main()\\n#14 /var/www/nextcloud/lib/base.php(1159): OC\\Route\\Router->match()\\n#15 /var/www/nextcloud/index.php(25): OC::handleRequest()\\n#16 {main}\"}",
    "CustomMessage": "Controller failed with OCP\\Lock\\ManuallyLockedException"
  },
  "id": "REDACTED"
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingneed to reproduceIssue that has not been reproduced

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions