Race conditions lead to errors for content permission generation #4455

Closed
opened 2026-02-05 08:55:46 +03:00 by OVERLORD · 10 comments
Owner

Originally created by @matthias4217 on GitHub (Feb 12, 2024).

Describe the Bug

To edit pages on Bookstack, some people in our team use the web interface, while others store their content on git and use a Python tool to upload it to Bookstack. In the latter case, this has caused some permission issues, with permissions on the book disappearing (but not on the pages or chapters). The joint_permissions table is then empty for the targeted books. Manually creating permissions in this table, or using php artisan bookstack:regenerate-permissions fixes the issue. This has happened three times yet, the first time on January 23rd. It had never happened before we’ve used 23.12. However we are increasingly using Bookstack and the issue could have been present before.

It seems similar to https://github.com/BookStackApp/BookStack/issues/4791, but on the book, and not on the page.

Steps to Reproduce

I am not yet sure how the bug is caused exactly. What I can say is that it has always happened while using the API.

Expected Behaviour

The book should remain accessible.

Screenshots or Additional Context

No response

Browser Details

No response

Exact BookStack Version

v23.12

Originally created by @matthias4217 on GitHub (Feb 12, 2024). ### Describe the Bug To edit pages on Bookstack, some people in our team use the web interface, while others store their content on git and use a Python tool to upload it to Bookstack. In the latter case, this has caused some permission issues, with permissions on the book disappearing (but not on the pages or chapters). The `joint_permissions` table is then empty for the targeted books. Manually creating permissions in this table, or using `php artisan bookstack:regenerate-permissions` fixes the issue. This has happened three times yet, the first time on January 23rd. It had never happened before we’ve used 23.12. However we are increasingly using Bookstack and the issue could have been present before. It seems similar to https://github.com/BookStackApp/BookStack/issues/4791, but on the book, and not on the page. ### Steps to Reproduce I am not yet sure how the bug is caused exactly. What I can say is that it has always happened while using the API. ### Expected Behaviour The book should remain accessible. ### Screenshots or Additional Context _No response_ ### Browser Details _No response_ ### Exact BookStack Version v23.12
OVERLORD added the 🐛 Bug label 2026-02-05 08:55:46 +03:00
Author
Owner

@ssddanbrown commented on GitHub (Feb 12, 2024):

Hi @matthias4217, Could you confirm specifically what API endpoints are being used, and the order they're used in?
Or (if public) link to the tool and advise which methods/actions of the tool are being used?

Just want to gain an idea of exactly what endpoints are used.

@ssddanbrown commented on GitHub (Feb 12, 2024): Hi @matthias4217, Could you confirm specifically what API endpoints are being used, and the order they're used in? Or (if public) link to the tool and advise which methods/actions of the tool are being used? Just want to gain an idea of exactly what endpoints are used.
Author
Owner

@matthias4217 commented on GitHub (Feb 16, 2024):

We have developed two tools around Bookstack. Both are Python apps, in private repositories.

  • Bookstack Carpenter manages user permissions and enforcing an architecture on Bookstack (creating some books depending on some external condition for instance). It uses get, put and post from requests.
  • Gitplo uploads contents from a git repository to a book on Bookstack. It uses the Session object from requests.

The error has been detected using Gitplo on the first call to the Bookstack API, a GET on the books endpoint. I suppose the issue began before that. The three impacted books are edited using Gitplo, and only two of them are managed by Bookstack Carpenter, so I assume it’s a call from Gitplo that is responsible for the issue. These books are notably not modified through the web interface.

Gitplo uses these API endpoints :

  • Attachments : GET, LIST, DELETE, CREATE
  • Books : GET, LIST
  • Chapters : GET, LIST, DELETE, CREATE, UPDATE
  • Image-gallery : GET, LIST, DELETE, CREATE
  • Page : GET, LIST, DELETE, CREATE, UPDATE

Notably, it doesn’t modify books nor does it use the Content-permissions endpoint, and apart for three times where this error has happened (on two Bookstack instances in total), our worflow works fine.

@matthias4217 commented on GitHub (Feb 16, 2024): We have developed two tools around Bookstack. Both are Python apps, in private repositories. * Bookstack Carpenter manages user permissions and enforcing an architecture on Bookstack (creating some books depending on some external condition for instance). It uses `get`, `put` and `post` from [requests](https://docs.python-requests.org/en/latest/index.html). * Gitplo uploads contents from a git repository to a book on Bookstack. It uses the [`Session` object from requests](https://docs.python-requests.org/en/latest/user/advanced/?highlight=Session#session-objects). The error has been detected using Gitplo on the first call to the Bookstack API, a `GET` on the books endpoint. I suppose the issue began before that. The three impacted books are edited using Gitplo, and only two of them are managed by Bookstack Carpenter, so I assume it’s a call from Gitplo that is responsible for the issue. These books are notably not modified through the web interface. Gitplo uses these API endpoints : * Attachments : `GET`, `LIST`, `DELETE`, `CREATE` * Books : `GET`, `LIST` * Chapters : `GET`, `LIST`, `DELETE`, `CREATE`, `UPDATE` * Image-gallery : `GET`, `LIST`, `DELETE`, `CREATE` * Page : `GET`, `LIST`, `DELETE`, `CREATE`, `UPDATE` Notably, it doesn’t modify books nor does it use the Content-permissions endpoint, and apart for three times where this error has happened (on two Bookstack instances in total), our worflow works fine.
Author
Owner

@ssddanbrown commented on GitHub (Feb 22, 2024):

Thanks for the extra info @matthias4217.
Can you detail how you're running BookStack? (hosting method, OS, webserver).

@ssddanbrown commented on GitHub (Feb 22, 2024): Thanks for the extra info @matthias4217. Can you detail how you're running BookStack? (hosting method, OS, webserver).
Author
Owner

@matthias4217 commented on GitHub (Feb 26, 2024):

We run Bookstack on Openshift, and we build our Docker images ourselves (with php:8.1-fpm-alpine and nginx:1.25-alpine). We have slightly modified the code to show resource ids on pages (using this merge request : https://github.com/BookStackApp/BookStack/pull/4314/files) and tot display the book parent shelves (from this issue : https://github.com/BookStackApp/BookStack/issues/4547#issuecomment-1726420230).

@matthias4217 commented on GitHub (Feb 26, 2024): We run Bookstack on Openshift, and we build our Docker images ourselves (with `php:8.1-fpm-alpine` and `nginx:1.25-alpine`). We have slightly modified the code to show resource ids on pages (using this merge request : https://github.com/BookStackApp/BookStack/pull/4314/files) and tot display the book parent shelves (from this issue : https://github.com/BookStackApp/BookStack/issues/4547#issuecomment-1726420230).
Author
Owner

@ssddanbrown commented on GitHub (Mar 16, 2024):

Report from a user on discord of similar, running on Ubuntu 18.04 server, with MariaDB 10.1.48 database, Apache2, & PHP8.1-CGI. Reference

@ssddanbrown commented on GitHub (Mar 16, 2024): Report from a user on discord of similar, running on Ubuntu 18.04 server, with MariaDB 10.1.48 database, Apache2, & PHP8.1-CGI. [Reference](https://discord.com/channels/578552496637739008/1208439658179198987/1211835037818032149)
Author
Owner

@zivillian commented on GitHub (Nov 8, 2024):

We have a similar problem with missing page permission. We are still trying to reproduce, but our assumption is that calling PUT /api/pages/{id} for multiple pages with changed priority in parallel was the root cause (we tried to sort the book).
After php artisan bookstack:regenerate-permissions the pages reappeared.

System info: BookStack 24.10 on Ubuntu 24.04.1 with MariaDB 10.11.8 and libapache2-mod-php8.3

@zivillian commented on GitHub (Nov 8, 2024): We have a similar problem with missing page permission. We are still trying to reproduce, but our assumption is that calling `PUT /api/pages/{id}` for multiple pages with changed `priority` in parallel was the root cause (we tried to sort the book). After `php artisan bookstack:regenerate-permissions` the pages reappeared. System info: BookStack 24.10 on Ubuntu 24.04.1 with MariaDB 10.11.8 and libapache2-mod-php8.3
Author
Owner

@zivillian commented on GitHub (Nov 8, 2024):

I was able to reproduce the issue and I think I found the issue. When multiple API requests are running simultaneously there is a race condition. The permissions are first deleted and then recreated:
ac27e18933/app/Permissions/JointPermissionBuilder.php (L146-L151)

Delete and Create are each wrapped in transaction:
ac27e18933/app/Permissions/JointPermissionBuilder.php (L163)
ac27e18933/app/Permissions/JointPermissionBuilder.php (L228)

But two parallel update requests for different pages within the same book may interleave and fail with missing permissions for the second page. Both requests try to update the permissions for the page and the containing book:
ac27e18933/app/Permissions/JointPermissionBuilder.php (L54-L80)

Example flow:

req1: deleteManyJointPermissionsForEntities() -> no permissions for book & page1
req2: deleteManyJointPermissionsForEntities() -> no permissions for book & page2
req1: createManyJointPermissions() -> permissions for book & page1
req2: createManyJointPermissions() -> fails with Integrity constraint violation
Stacktrace:

[2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (20, page, 9, 1, 3), (20, page, 9, 2, 1), (20, page, 9, 3, 1), (20, page, 9, 4, 1), (20, page, ?, 5, 0), (20, page, ?, 6, 0), (20, page, ?, 9, 3), (20, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (20, page, 9, 1, 3), (20, page, 9, 2, 1), (20, page, 9, 3, 1), (20, page, 9, 4, 1), (20, page, ?, 5, 0), (20, page, ?, 6, 0), (20, page, ?, 9, 3), (20, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#54 {main}

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#56 {main}
"}
[2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (41, page, 9, 1, 3), (41, page, 9, 2, 1), (41, page, 9, 3, 1), (41, page, 9, 4, 1), (41, page, ?, 5, 0), (41, page, ?, 6, 0), (41, page, ?, 9, 3), (41, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (41, page, 9, 1, 3), (41, page, 9, 2, 1), (41, page, 9, 3, 1), (41, page, 9, 4, 1), (41, page, ?, 5, 0), (41, page, ?, 6, 0), (41, page, ?, 9, 3), (41, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#54 {main}

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#56 {main}
"}
[2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (45, page, 9, 1, 3), (45, page, 9, 2, 1), (45, page, 9, 3, 1), (45, page, 9, 4, 1), (45, page, ?, 5, 0), (45, page, ?, 6, 0), (45, page, ?, 9, 3), (45, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (7, chapter, 9, 1, 3), (7, chapter, 9, 2, 1), (7, chapter, 9, 3, 1), (7, chapter, 9, 4, 1), (7, chapter, ?, 5, 0), (7, chapter, ?, 6, 0), (7, chapter, ?, 9, 3), (7, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (45, page, 9, 1, 3), (45, page, 9, 2, 1), (45, page, 9, 3, 1), (45, page, 9, 4, 1), (45, page, ?, 5, 0), (45, page, ?, 6, 0), (45, page, ?, 9, 3), (45, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (7, chapter, 9, 1, 3), (7, chapter, 9, 2, 1), (7, chapter, 9, 3, 1), (7, chapter, 9, 4, 1), (7, chapter, ?, 5, 0), (7, chapter, ?, 6, 0), (7, chapter, ?, 9, 3), (7, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#54 {main}

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#56 {main}
"}
[2024-11-08 16:42:48] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (26, page, 9, 1, 3), (26, page, 9, 2, 1), (26, page, 9, 3, 1), (26, page, 9, 4, 1), (26, page, ?, 5, 0), (26, page, ?, 6, 0), (26, page, ?, 9, 3), (26, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (4, chapter, 9, 1, 3), (4, chapter, 9, 2, 1), (4, chapter, 9, 3, 1), (4, chapter, 9, 4, 1), (4, chapter, ?, 5, 0), (4, chapter, ?, 6, 0), (4, chapter, ?, 9, 3), (4, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (26, page, 9, 1, 3), (26, page, 9, 2, 1), (26, page, 9, 3, 1), (26, page, 9, 4, 1), (26, page, ?, 5, 0), (26, page, ?, 6, 0), (26, page, ?, 9, 3), (26, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (4, chapter, 9, 1, 3), (4, chapter, 9, 2, 1), (4, chapter, 9, 3, 1), (4, chapter, 9, 4, 1), (4, chapter, ?, 5, 0), (4, chapter, ?, 6, 0), (4, chapter, ?, 9, 3), (4, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#54 {main}

[previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45)
[stacktrace]
#0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute()
#1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}()
#2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback()
#3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run()
#4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert()
#5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert()
#6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}()
#7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction()
#8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call()
#9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic()
#10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions()
#11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities()
#12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity()
#13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions()
#14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update()
#15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update()
#16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update()
#17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction()
#18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch()
#19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController()
#20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run()
#21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}()
#22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle()
#24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle()
#26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest()
#28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle()
#29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle()
#31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle()
#33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then()
#35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack()
#36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute()
#37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute()
#38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch()
#39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}()
#40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle()
#42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle()
#44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle()
#45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle()
#47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle()
#48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle()
#50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle()
#52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}()
#53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then()
#54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter()
#55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle()
#56 {main}
"}

@zivillian commented on GitHub (Nov 8, 2024): I was able to reproduce the issue and I think I found the issue. When multiple API requests are running simultaneously there is a race condition. The permissions are first deleted and then recreated: https://github.com/BookStackApp/BookStack/blob/ac27e1893388c39f2b43c92fb91a0fca3d6ae7b3/app/Permissions/JointPermissionBuilder.php#L146-L151 Delete and Create are each wrapped in transaction: https://github.com/BookStackApp/BookStack/blob/ac27e1893388c39f2b43c92fb91a0fca3d6ae7b3/app/Permissions/JointPermissionBuilder.php#L163 https://github.com/BookStackApp/BookStack/blob/ac27e1893388c39f2b43c92fb91a0fca3d6ae7b3/app/Permissions/JointPermissionBuilder.php#L228 But two parallel update requests for different pages within the same book may interleave and fail with missing permissions for the second page. Both requests try to update the permissions for the page and the containing book: https://github.com/BookStackApp/BookStack/blob/ac27e1893388c39f2b43c92fb91a0fca3d6ae7b3/app/Permissions/JointPermissionBuilder.php#L54-L80 Example flow: ``` req1: deleteManyJointPermissionsForEntities() -> no permissions for book & page1 req2: deleteManyJointPermissionsForEntities() -> no permissions for book & page2 req1: createManyJointPermissions() -> permissions for book & page1 req2: createManyJointPermissions() -> fails with Integrity constraint violation ``` <details><summary>Stacktrace:</summary> <p> ``` [2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (20, page, 9, 1, 3), (20, page, 9, 2, 1), (20, page, 9, 3, 1), (20, page, 9, 4, 1), (20, page, ?, 5, 0), (20, page, ?, 6, 0), (20, page, ?, 9, 3), (20, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (20, page, 9, 1, 3), (20, page, 9, 2, 1), (20, page, 9, 3, 1), (20, page, 9, 4, 1), (20, page, ?, 5, 0), (20, page, ?, 6, 0), (20, page, ?, 9, 3), (20, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #54 {main} [previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #56 {main} "} [2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (41, page, 9, 1, 3), (41, page, 9, 2, 1), (41, page, 9, 3, 1), (41, page, 9, 4, 1), (41, page, ?, 5, 0), (41, page, ?, 6, 0), (41, page, ?, 9, 3), (41, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (41, page, 9, 1, 3), (41, page, 9, 2, 1), (41, page, 9, 3, 1), (41, page, 9, 4, 1), (41, page, ?, 5, 0), (41, page, ?, 6, 0), (41, page, ?, 9, 3), (41, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (2, chapter, 3, 1, 3), (2, chapter, 3, 2, 1), (2, chapter, 3, 3, 1), (2, chapter, 3, 4, 1), (2, chapter, ?, 5, 0), (2, chapter, ?, 6, 0), (2, chapter, ?, 9, 3), (2, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #54 {main} [previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #56 {main} "} [2024-11-08 16:42:46] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (45, page, 9, 1, 3), (45, page, 9, 2, 1), (45, page, 9, 3, 1), (45, page, 9, 4, 1), (45, page, ?, 5, 0), (45, page, ?, 6, 0), (45, page, ?, 9, 3), (45, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (7, chapter, 9, 1, 3), (7, chapter, 9, 2, 1), (7, chapter, 9, 3, 1), (7, chapter, 9, 4, 1), (7, chapter, ?, 5, 0), (7, chapter, ?, 6, 0), (7, chapter, ?, 9, 3), (7, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (45, page, 9, 1, 3), (45, page, 9, 2, 1), (45, page, 9, 3, 1), (45, page, 9, 4, 1), (45, page, ?, 5, 0), (45, page, ?, 6, 0), (45, page, ?, 9, 3), (45, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (7, chapter, 9, 1, 3), (7, chapter, 9, 2, 1), (7, chapter, 9, 3, 1), (7, chapter, 9, 4, 1), (7, chapter, ?, 5, 0), (7, chapter, ?, 6, 0), (7, chapter, ?, 9, 3), (7, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #54 {main} [previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-book-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #56 {main} "} [2024-11-08 16:42:48] production.ERROR: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (26, page, 9, 1, 3), (26, page, 9, 2, 1), (26, page, 9, 3, 1), (26, page, 9, 4, 1), (26, page, ?, 5, 0), (26, page, ?, 6, 0), (26, page, ?, 9, 3), (26, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (4, chapter, 9, 1, 3), (4, chapter, 9, 2, 1), (4, chapter, 9, 3, 1), (4, chapter, 9, 4, 1), (4, chapter, ?, 5, 0), (4, chapter, ?, 6, 0), (4, chapter, ?, 9, 3), (4, chapter, ?, 10, 0)) {"userId":3,"exception":"[object] (Illuminate\\Database\\UniqueConstraintViolationException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' (Connection: mysql, SQL: insert into `joint_permissions` (`entity_id`, `entity_type`, `owner_id`, `role_id`, `status`) values (26, page, 9, 1, 3), (26, page, 9, 2, 1), (26, page, 9, 3, 1), (26, page, 9, 4, 1), (26, page, ?, 5, 0), (26, page, ?, 6, 0), (26, page, ?, 9, 3), (26, page, ?, 10, 0), (4, book, 3, 1, 3), (4, book, 3, 2, 1), (4, book, 3, 3, 1), (4, book, 3, 4, 1), (4, book, ?, 5, 0), (4, book, ?, 6, 0), (4, book, ?, 9, 3), (4, book, ?, 10, 0), (4, chapter, 9, 1, 3), (4, chapter, 9, 2, 1), (4, chapter, 9, 3, 1), (4, chapter, 9, 4, 1), (4, chapter, ?, 5, 0), (4, chapter, ?, 6, 0), (4, chapter, ?, 9, 3), (4, chapter, ?, 10, 0)) at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php:824) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #3 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #5 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #7 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #8 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #10 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #11 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #12 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #13 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #14 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #15 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #20 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #22 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #24 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #27 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #29 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #38 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #40 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #43 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #53 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #54 {main} [previous exception] [object] (PDOException(code: 23000): SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1-chapter-4' for key 'PRIMARY' at /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php:45) [stacktrace] #0 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(45): PDOStatement->execute() #1 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(816): Illuminate\\Database\\MySqlConnection->Illuminate\\Database\\{closure}() #2 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Connection.php(783): Illuminate\\Database\\Connection->runQueryCallback() #3 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/MySqlConnection.php(34): Illuminate\\Database\\Connection->run() #4 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3498): Illuminate\\Database\\MySqlConnection->insert() #5 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(230): Illuminate\\Database\\Query\\Builder->insert() #6 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/Concerns/ManagesTransactions.php(30): BookStack\\Permissions\\JointPermissionBuilder->BookStack\\Permissions\\{closure}() #7 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php(509): Illuminate\\Database\\Connection->transaction() #8 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php(355): Illuminate\\Database\\DatabaseManager->__call() #9 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(228): Illuminate\\Support\\Facades\\Facade::__callStatic() #10 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(150): BookStack\\Permissions\\JointPermissionBuilder->createManyJointPermissions() #11 /usr/local/src/BookStack/app/Permissions/JointPermissionBuilder.php(79): BookStack\\Permissions\\JointPermissionBuilder->buildJointPermissionsForEntities() #12 /usr/local/src/BookStack/app/Entities/Models/Entity.php(300): BookStack\\Permissions\\JointPermissionBuilder->rebuildForEntity() #13 /usr/local/src/BookStack/app/Entities/Repos/BaseRepo.php(77): BookStack\\Entities\\Models\\Entity->rebuildPermissions() #14 /usr/local/src/BookStack/app/Entities/Repos/PageRepo.php(101): BookStack\\Entities\\Repos\\BaseRepo->update() #15 /usr/local/src/BookStack/app/Entities/Controllers/PageApiController.php(142): BookStack\\Entities\\Repos\\PageRepo->update() #16 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): BookStack\\Entities\\Controllers\\PageApiController->update() #17 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\\Routing\\Controller->callAction() #18 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(259): Illuminate\\Routing\\ControllerDispatcher->dispatch() #19 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\\Routing\\Route->runController() #20 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(806): Illuminate\\Routing\\Route->run() #21 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}() #22 /usr/local/src/BookStack/app/Http/Middleware/CheckEmailConfirmed.php(47): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #23 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\CheckEmailConfirmed->handle() #24 /usr/local/src/BookStack/app/Http/Middleware/ApiAuthenticate.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #25 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\ApiAuthenticate->handle() #26 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(159): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #27 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(90): Illuminate\\Routing\\Middleware\\ThrottleRequests->handleRequest() #28 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Routing\\Middleware\\ThrottleRequests->handle() #29 /usr/local/src/BookStack/app/Http/Middleware/StartSessionIfCookieExists.php(20): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #30 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\StartSessionIfCookieExists->handle() #31 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(67): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #32 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Cookie\\Middleware\\EncryptCookies->handle() #33 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #34 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(805): Illuminate\\Pipeline\\Pipeline->then() #35 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(784): Illuminate\\Routing\\Router->runRouteWithinStack() #36 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(748): Illuminate\\Routing\\Router->runRoute() #37 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Routing/Router.php(737): Illuminate\\Routing\\Router->dispatchToRoute() #38 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(200): Illuminate\\Routing\\Router->dispatch() #39 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(144): Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}() #40 /usr/local/src/BookStack/app/Http/Middleware/PreventResponseCaching.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #41 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\PreventResponseCaching->handle() #42 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #43 /usr/local/src/BookStack/app/Http/Middleware/TrustProxies.php(41): Illuminate\\Http\\Middleware\\TrustProxies->handle() #44 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): BookStack\\Http\\Middleware\\TrustProxies->handle() #45 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #46 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\\Foundation\\Http\\Middleware\\TransformsRequest->handle() #47 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\TrimStrings->handle() #48 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #49 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize->handle() #50 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(99): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #51 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(183): Illuminate\\Foundation\\Http\\Middleware\\PreventRequestsDuringMaintenance->handle() #52 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(119): Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}() #53 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(175): Illuminate\\Pipeline\\Pipeline->then() #54 /usr/local/src/BookStack/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(144): Illuminate\\Foundation\\Http\\Kernel->sendRequestThroughRouter() #55 /usr/local/src/BookStack/public/index.php(52): Illuminate\\Foundation\\Http\\Kernel->handle() #56 {main} "} ``` </p> </details>
Author
Owner

@ssddanbrown commented on GitHub (Jul 1, 2025):

Another report via #5686.

Thanks for the info @zivillian.

I've assigned this to the next feature release to be addressed.
Needs some careful consideration in regards to the logical order, with consideration to the exact locking/access methods of MySQL, to ensure it's fail-safe and that we won't be rolling back (via transactions) permission changes out of sync with the UI. Right now the deletions are specifically done first in their own transactions to somewhat achieve this. We could regen then delete+insert in one transaction but I need to double check the potential parallel logic.

Could also improve permission rebuild targeting to be more specific (right now it'll re-assess the whole parent chain since that info is needed for assessment during generation) but that's maybe something for a future improvement.

@ssddanbrown commented on GitHub (Jul 1, 2025): Another report via #5686. Thanks for the info @zivillian. I've assigned this to the next feature release to be addressed. Needs some careful consideration in regards to the logical order, with consideration to the exact locking/access methods of MySQL, to ensure it's fail-safe and that we won't be rolling back (via transactions) permission changes out of sync with the UI. Right now the deletions are specifically done first in their own transactions to somewhat achieve this. We could regen then delete+insert in one transaction but I need to double check the potential parallel logic. Could also improve permission rebuild targeting to be more specific (right now it'll re-assess the whole parent chain since that info is needed for assessment during generation) but that's maybe something for a future improvement.
Author
Owner

@ssddanbrown commented on GitHub (Jul 7, 2025):

Some changes now prepared in #5689.
These changes wrap the permission-affecting actions as a whole, at a higher level, i transactions.
This naturally provides blocking of edits to the permission store during generation to prevent attempted parallel changes, while also providing roll-back of the entire general action (page creation, permission change etc...) in the event something goes wrong.

I found that the default MySQL "REPEATABLE READ" transaction logic could probably be problematic for BookStack kind of scenarios (since, for example, a later parallel process may end up generating permissions based on old information) so we akwardly go out of the way to set instead use "READ COMMITTED" transactions.

@ssddanbrown commented on GitHub (Jul 7, 2025): Some changes now prepared in #5689. These changes wrap the permission-affecting actions as a whole, at a higher level, i transactions. This naturally provides blocking of edits to the permission store during generation to prevent attempted parallel changes, while also providing roll-back of the entire general action (page creation, permission change etc...) in the event something goes wrong. I found that the default MySQL "REPEATABLE READ" transaction logic could probably be problematic for BookStack kind of scenarios (since, for example, a later parallel process may end up generating permissions based on old information) so we akwardly go out of the way to set instead use "READ COMMITTED" transactions.
Author
Owner

@ssddanbrown commented on GitHub (Jul 9, 2025):

#5689 Has now been merged, to be part of the next feature release, so I will therefore close this off.
Thanks again @zivillian @matthias4217 for your reports and provided detail.

@ssddanbrown commented on GitHub (Jul 9, 2025): #5689 Has now been merged, to be part of the next feature release, so I will therefore close this off. Thanks again @zivillian @matthias4217 for your reports and provided detail.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/BookStack#4455