Content
View differences
Updated by Christophe Bliard about 1 year ago
### Steps to reproduce
* Create 3 Unclear. Probably a larger work packages: 1 parent and 2 children. package graph with a deep hierarchy
* Go to Artificial one using the console
* Create 439 (might be OS dependant) work packages list view
where each work package is the child of the one created before (resulting in a tree with the breadth of 1) e.g. by using something like (in the console): `439.times { User.execute_as(author) { WorkPackage.new(subject: "A subject", project:, priority:, type:, status:, author:, parent: WorkPackage.last).save! } }`
* Use Go to the left handle on topmost work package of the parent and drag&drop it between the 2 children
just created ones.
* This will try to set itself as a parent Open its date picker
* Click on "Automatic" scheduling mode
### What is the buggy behavior?
* Error 500 after 30 seconds of lag. Unclear. Probably, the scheduling failed.
* It tries to set itself as a parent (or as a child, it depends how you see things), and somewhere in For the process, it tries to compute some scheduling information which leads to an endless loop (trying to find its ancestors) which ultimately leads to a SystemStackError and a 500.
artificial one
* An error is shown
### What is the expected behavior?
* Drag and dropping a parent to make it a child of itself should be prohibited, or detected early. No error
### **Screenshots**
A video recording demonstrating the issue is attached to this bug.
### **Logs**
This has been seen on AppSignal:
* [https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/1024](https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/1024)
* [https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/969](https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/969)
* [https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1177](https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1177)
* https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1176
```text
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
...
app/services/work_packages/schedule_dependency.rb:122:in 'block in WorkPackages::ScheduleDependency#descendants'
app/services/work_packages/schedule_dependency.rb:122:in 'Array#each'
app/services/work_packages/schedule_dependency.rb:122:in 'Enumerable#flat_map'
app/services/work_packages/schedule_dependency.rb:122:in 'WorkPackages::ScheduleDependency#descendants'
app/services/work_packages/schedule_dependency/dependency.rb:81:in 'WorkPackages::ScheduleDependency::Dependency#descendants'
app/services/work_packages/schedule_dependency/dependency.rb:85:in 'WorkPackages::ScheduleDependency::Dependency#alive_descendants'
app/services/work_packages/schedule_dependency/dependency.rb:71:in 'WorkPackages::ScheduleDependency::Dependency#has_descendants?'
app/services/work_packages/set_schedule_service.rb:111:in 'WorkPackages::SetScheduleService#reschedule'
app/services/work_packages/set_schedule_service.rb:88:in 'block in WorkPackages::SetScheduleService#schedule_following'
app/services/work_packages/schedule_dependency.rb:62:in 'block in WorkPackages::ScheduleDependency#in_schedule_order'
app/services/work_packages/schedule_dependency.rb:61:in 'Array#each'
app/services/work_packages/schedule_dependency.rb:61:in 'WorkPackages::ScheduleDependency#in_schedule_order'
app/services/work_packages/set_schedule_service.rb:85:in 'WorkPackages::SetScheduleService#schedule_following'
app/services/work_packages/set_schedule_service.rb:43:in 'WorkPackages::SetScheduleService#call'
app/services/work_packages/set_attributes_service.rb:292:in 'WorkPackages::SetAttributesService#update_dates_from_rescheduled_children'
app/services/work_packages/set_attributes_service.rb:275:in 'WorkPackages::SetAttributesService#update_dates'
app/services/work_packages/set_attributes_service.rb:70:in 'WorkPackages::SetAttributesService#set_calculated_attributes'
app/services/work_packages/set_attributes_service.rb:44:in 'block in WorkPackages::SetAttributesService#set_attributes'
lib/open_project/changed_by_system.rb:87:in 'OpenProject::ChangedBySystem#change_by_system'
app/services/work_packages/set_attributes_service.rb:43:in 'WorkPackages::SetAttributesService#set_attributes'
modules/backlogs/lib/open_project/backlogs/patches/set_attributes_service_patch.rb:36:in 'OpenProject::Backlogs::Patches::SetAttributesServicePatch::InstanceMethods#set_attributes'
app/services/base_services/set_attributes.rb:44:in 'BaseServices::SetAttributes#perform'
app/services/base_services/base_callable.rb:40:in 'block in BaseServices::BaseCallable#call'
app/services/concerns/with_reversible_state.rb:53:in 'BaseServices::BaseCallable#assign_state'
app/services/base_services/base_callable.rb:39:in 'BaseServices::BaseCallable#call'
app/services/base_services/write.rb:60:in 'BaseServices::Write#set_attributes'
app/services/attachments/replace_attachments.rb:37:in 'WorkPackages::UpdateService#set_attributes'
app/services/base_services/write.rb:51:in 'BaseServices::Write#before_perform'
app/services/base_services/base_contracted.rb:61:in 'block in BaseServices::BaseContracted#perform'
app/models/journal/notification_configuration.rb:62:in 'Journal::NotificationConfiguration.with_first'
app/models/journal/notification_configuration.rb:45:in 'Journal::NotificationConfiguration.with'
app/services/shared/service_context.rb:67:in 'block in Shared::ServiceContext#without_context_transaction'
lib/open_project/locale_helper.rb:36:in 'OpenProject::LocaleHelper.with_locale_for'
app/models/user.rb:538:in 'User.execute_as'
app/services/shared/service_context.rb:66:in 'Shared::ServiceContext#without_context_transaction'
app/services/shared/service_context.rb:45:in 'block in Shared::ServiceContext#in_mutex_context'
lib/open_project/mutex.rb:71:in 'block in OpenProject::Mutex.with_advisory_lock'
lib/open_project/mutex.rb:69:in 'OpenProject::Mutex.with_advisory_lock'
lib/open_project/mutex.rb:63:in 'block in OpenProject::Mutex.with_advisory_lock_transaction'
lib/open_project/mutex.rb:62:in 'OpenProject::Mutex.with_advisory_lock_transaction'
app/services/shared/service_context.rb:44:in 'Shared::ServiceContext#in_mutex_context'
app/services/shared/service_context.rb:35:in 'Shared::ServiceContext#in_context'
app/services/base_services/base_contracted.rb:54:in 'BaseServices::BaseContracted#service_context'
app/services/base_services/base_contracted.rb:59:in 'BaseServices::BaseContracted#perform'
app/services/base_services/base_callable.rb:40:in 'block in BaseServices::BaseCallable#call'
app/services/concerns/with_reversible_state.rb:53:in 'BaseServices::BaseCallable#assign_state'
app/services/base_services/base_callable.rb:39:in 'BaseServices::BaseCallable#call'
lib/api/utilities/endpoints/bodied.rb:117:in 'API::Utilities::Endpoints::Bodied#process'
lib/api/utilities/endpoints/bodied.rb:90:in 'block in mount'
```
* Create 3
* Go to
* Create 439 (might be OS dependant)
* Click on "Automatic" scheduling mode
### What is the buggy behavior?
* Error 500 after 30 seconds of lag.
* It tries to set itself as a parent (or as a child, it depends how you see things), and somewhere in
* An error is shown
* Drag and dropping a parent to make it a child of itself should be prohibited, or detected early.
### **Screenshots**
A video recording demonstrating the issue is attached to this bug.
### **Logs**
This has been seen on AppSignal:
* [https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/1024](https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/1024)
* [https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/969](https://appsignal.com/openproject-gmbh/sites/674718f1d2a5e4a7cb8b2298/exceptions/incidents/969)
* [https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1177](https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1177)
* https://appsignal.com/openproject-gmbh/sites/673c8be183eb67dcd6c4e75d/exceptions/incidents/1176
```text
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 Array#each
app/services/work_packages/schedule_dependency.rb:122 Enumerable#flat_map
app/services/work_packages/schedule_dependency.rb:122 WorkPackages::ScheduleDependency#descendants
app/services/work_packages/schedule_dependency.rb:122 block in WorkPackages::ScheduleDependency#descendants
...
app/services/work_packages/schedule_dependency.rb:122:in 'block in WorkPackages::ScheduleDependency#descendants'
app/services/work_packages/schedule_dependency.rb:122:in 'Array#each'
app/services/work_packages/schedule_dependency.rb:122:in 'Enumerable#flat_map'
app/services/work_packages/schedule_dependency.rb:122:in 'WorkPackages::ScheduleDependency#descendants'
app/services/work_packages/schedule_dependency/dependency.rb:81:in 'WorkPackages::ScheduleDependency::Dependency#descendants'
app/services/work_packages/schedule_dependency/dependency.rb:85:in 'WorkPackages::ScheduleDependency::Dependency#alive_descendants'
app/services/work_packages/schedule_dependency/dependency.rb:71:in 'WorkPackages::ScheduleDependency::Dependency#has_descendants?'
app/services/work_packages/set_schedule_service.rb:111:in 'WorkPackages::SetScheduleService#reschedule'
app/services/work_packages/set_schedule_service.rb:88:in 'block in WorkPackages::SetScheduleService#schedule_following'
app/services/work_packages/schedule_dependency.rb:62:in 'block in WorkPackages::ScheduleDependency#in_schedule_order'
app/services/work_packages/schedule_dependency.rb:61:in 'Array#each'
app/services/work_packages/schedule_dependency.rb:61:in 'WorkPackages::ScheduleDependency#in_schedule_order'
app/services/work_packages/set_schedule_service.rb:85:in 'WorkPackages::SetScheduleService#schedule_following'
app/services/work_packages/set_schedule_service.rb:43:in 'WorkPackages::SetScheduleService#call'
app/services/work_packages/set_attributes_service.rb:292:in 'WorkPackages::SetAttributesService#update_dates_from_rescheduled_children'
app/services/work_packages/set_attributes_service.rb:275:in 'WorkPackages::SetAttributesService#update_dates'
app/services/work_packages/set_attributes_service.rb:70:in 'WorkPackages::SetAttributesService#set_calculated_attributes'
app/services/work_packages/set_attributes_service.rb:44:in 'block in WorkPackages::SetAttributesService#set_attributes'
lib/open_project/changed_by_system.rb:87:in 'OpenProject::ChangedBySystem#change_by_system'
app/services/work_packages/set_attributes_service.rb:43:in 'WorkPackages::SetAttributesService#set_attributes'
modules/backlogs/lib/open_project/backlogs/patches/set_attributes_service_patch.rb:36:in 'OpenProject::Backlogs::Patches::SetAttributesServicePatch::InstanceMethods#set_attributes'
app/services/base_services/set_attributes.rb:44:in 'BaseServices::SetAttributes#perform'
app/services/base_services/base_callable.rb:40:in 'block in BaseServices::BaseCallable#call'
app/services/concerns/with_reversible_state.rb:53:in 'BaseServices::BaseCallable#assign_state'
app/services/base_services/base_callable.rb:39:in 'BaseServices::BaseCallable#call'
app/services/base_services/write.rb:60:in 'BaseServices::Write#set_attributes'
app/services/attachments/replace_attachments.rb:37:in 'WorkPackages::UpdateService#set_attributes'
app/services/base_services/write.rb:51:in 'BaseServices::Write#before_perform'
app/services/base_services/base_contracted.rb:61:in 'block in BaseServices::BaseContracted#perform'
app/models/journal/notification_configuration.rb:62:in 'Journal::NotificationConfiguration.with_first'
app/models/journal/notification_configuration.rb:45:in 'Journal::NotificationConfiguration.with'
app/services/shared/service_context.rb:67:in 'block in Shared::ServiceContext#without_context_transaction'
lib/open_project/locale_helper.rb:36:in 'OpenProject::LocaleHelper.with_locale_for'
app/models/user.rb:538:in 'User.execute_as'
app/services/shared/service_context.rb:66:in 'Shared::ServiceContext#without_context_transaction'
app/services/shared/service_context.rb:45:in 'block in Shared::ServiceContext#in_mutex_context'
lib/open_project/mutex.rb:71:in 'block in OpenProject::Mutex.with_advisory_lock'
lib/open_project/mutex.rb:69:in 'OpenProject::Mutex.with_advisory_lock'
lib/open_project/mutex.rb:63:in 'block in OpenProject::Mutex.with_advisory_lock_transaction'
lib/open_project/mutex.rb:62:in 'OpenProject::Mutex.with_advisory_lock_transaction'
app/services/shared/service_context.rb:44:in 'Shared::ServiceContext#in_mutex_context'
app/services/shared/service_context.rb:35:in 'Shared::ServiceContext#in_context'
app/services/base_services/base_contracted.rb:54:in 'BaseServices::BaseContracted#service_context'
app/services/base_services/base_contracted.rb:59:in 'BaseServices::BaseContracted#perform'
app/services/base_services/base_callable.rb:40:in 'block in BaseServices::BaseCallable#call'
app/services/concerns/with_reversible_state.rb:53:in 'BaseServices::BaseCallable#assign_state'
app/services/base_services/base_callable.rb:39:in 'BaseServices::BaseCallable#call'
lib/api/utilities/endpoints/bodied.rb:117:in 'API::Utilities::Endpoints::Bodied#process'
lib/api/utilities/endpoints/bodied.rb:90:in 'block in mount'
```