Project Board Crashing When Displaying More Than 48 Open Tasks

Our Production team is using a project to track their open orders and is having an issue with the Board display crashing. Whenever the Open Task count goes over 48, the page crashes and won’t load. It’s just a blank white screen.

All the other projects on our site are working flawlessly. We think it may be a JavaScript issue, but haven’t been able to pin it down.

Our build is:

  • Raspberry Pi 4GB
  • Kanboard 1.2.15
  • Apache 2.4.38
  • PHP 7.4.13
  • MariaDB 10.3.27

crashes are generally accompanied by error messages…if you have some, you should include them, otherwise, there isn’t much info to go on.

There were no messages or any other indication of that was happening. We simply got a white screen when the page loaded. It only happens in Board view. When we access the project from the Config/Overview pages, or view any specific task, it runs fine. Simply deleting the most recently added task to that project made the board reappear. Any tasks added that pushed the count over 48 caused it to disappear again.

As I said, it’s only this one specific board. It’s our most heavily used one by far (most of the others are for specific users or projects, while this one tracks all of Production). There are over 1000 cards on that board, but only the Open cards seem to affect the site.

I wish I could provide more hard data, but when the problem appears it’s as if the project itself doesn’t exist. No codes, no warnings, just a white page.

Your error messages won’t just appear in the browser screen, you need to find them, either in your stderr log (assuming you are writing those to a file) or in the browser console if they are js errors.

Console isn’t showing any errors, so I guess it’s not JS. The output from the debug log is too long to post everything, but I believe this is the section for when it tries to load the page. Another weird thing I noticed while trying to get this log is it only seems to be affected when the search filter is “status:open.” If we set it to “status:open & status:closed,” the page loads.

[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\Runner::executeMiddleware
[2021-02-11 14:14:42] [debug] Subscriber executed: Kanboard\Subscriber\BootstrapSubscriber::execute
[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\BaseMiddleware::next => Kanboard\Middleware\AuthenticationMiddleware
[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\BaseMiddleware::next => Kanboard\Middleware\PostAuthenticationMiddleware
[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\BaseMiddleware::next => Kanboard\Middleware\ApplicationAuthorizationMiddleware
[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\BaseMiddleware::next => Kanboard\Middleware\ProjectAuthorizationMiddleware
[2021-02-11 14:14:42] [debug] Kanboard\Core\Controller\Runner::executeController => \Kanboard\Controller\BoardViewController::show
[2021-02-11 14:14:42] [debug] SQL: SELECT version FROM plugin_schema_versions WHERE plugin = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00059604644775391
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.00059604644775391
[2021-02-11 14:14:42] [debug] SQL: SELECT data FROM sessions WHERE id = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00059604644775391
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0011920928955078
[2021-02-11 14:14:42] [debug] SQL: SELECT option, value FROM settings
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00026917457580566
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0014612674713135
[2021-02-11 14:14:42] [debug] SQL: SELECT projects.id, projects.name FROM projects LEFT JOIN project_has_users ON project_has_users.project_id=projects.id WHERE project_has_users.user_id = ? AND projects.is_active IN (?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00025296211242676
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0017142295837402
[2021-02-11 14:14:42] [debug] SQL: SELECT projects.id, projects.name FROM projects LEFT JOIN project_has_groups ON project_has_groups.project_id=projects.id LEFT JOIN group_has_users ON group_has_users.group_id=project_has_groups.group_id WHERE group_has_users.user_id = ? AND projects.is_active IN (?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00019502639770508
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0019092559814453
[2021-02-11 14:14:42] [debug] SQL: SELECT * FROM actions WHERE project_id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00024795532226562
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0021572113037109
[2021-02-11 14:14:42] [debug] SQL: SELECT * FROM action_has_params WHERE action_id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00038504600524902
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.00254225730896
[2021-02-11 14:14:42] [debug] SQL: SELECT 1 FROM users WHERE id = ? AND is_active = ? AND role = ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00022506713867188
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0027673244476318
[2021-02-11 14:14:42] [debug] SQL: SELECT projects., users.username AS owner_username, users.name AS owner_name, (SELECT count() FROM tasks WHERE tasks.project_id=projects.id AND tasks.is_active=‘1’) AS nb_active_tasks FROM projects LEFT JOIN users ON users.id=projects.owner_id LEFT JOIN tasks ON tasks.project_id=projects.id WHERE projects.id = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00033783912658691
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0031051635742188
[2021-02-11 14:14:42] [debug] SQL: SELECT * FROM projects WHERE id = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00028896331787109
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0033941268920898
[2021-02-11 14:14:42] [debug] SQL: SELECT * FROM swimlanes WHERE project_id = ? AND is_active = ? ORDER BY position ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00015592575073242
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0035500526428223
[2021-02-11 14:14:42] [debug] SQL: SELECT id, title, position, task_limit, description, hide_in_dashboard, project_id, (SELECT COUNT() FROM tasks WHERE column_id=columns.id AND is_active=‘1’) AS nb_open_tasks, (SELECT COUNT() FROM tasks WHERE column_id=columns.id AND is_active=‘0’) AS nb_closed_tasks FROM columns WHERE project_id = ? ORDER BY position ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00015902519226074
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.003709077835083
[2021-02-11 14:14:42] [debug] SQL: SELECT (SELECT COUNT() FROM comments WHERE task_id=tasks.id) AS nb_comments, (SELECT COUNT() FROM task_has_files WHERE task_id=tasks.id) AS nb_files, (SELECT COUNT() FROM subtasks WHERE subtasks.task_id=tasks.id) AS nb_subtasks, (SELECT COUNT() FROM subtasks WHERE subtasks.task_id=tasks.id AND status=2) AS nb_completed_subtasks, (SELECT COUNT() FROM task_has_links WHERE task_has_links.task_id = tasks.id) AS nb_links, (SELECT COUNT() FROM task_has_external_links WHERE task_has_external_links.task_id = tasks.id) AS nb_external_links, (SELECT DISTINCT 1 FROM task_has_links WHERE task_has_links.task_id = tasks.id AND task_has_links.link_id = 9) AS is_milestone, tasks.id, tasks.reference, tasks.title, tasks.description, tasks.date_creation, tasks.date_modification, tasks.date_completed, tasks.date_started, tasks.date_due, tasks.color_id, tasks.project_id, tasks.column_id, tasks.swimlane_id, tasks.owner_id, tasks.creator_id, tasks.position, tasks.is_active, tasks.score, tasks.category_id, tasks.priority, tasks.date_moved, tasks.recurrence_status, tasks.recurrence_trigger, tasks.recurrence_factor, tasks.recurrence_timeframe, tasks.recurrence_basedate, tasks.recurrence_parent, tasks.recurrence_child, tasks.time_estimated, tasks.time_spent, tasks.reference, users.username AS assignee_username, users.name AS assignee_name, users.email AS assignee_email, users.avatar_path AS assignee_avatar_path, project_has_categories.name AS category_name, project_has_categories.description AS category_description, project_has_categories.color_id AS category_color_id, columns.title AS column_name, columns.position AS column_position, swimlanes.name AS swimlane_name, projects.name AS project_name FROM tasks LEFT JOIN users ON users.id=tasks.owner_id LEFT JOIN users AS uc ON uc.id=tasks.creator_id LEFT JOIN project_has_categories ON project_has_categories.id=tasks.category_id LEFT JOIN columns ON columns.id=tasks.column_id LEFT JOIN swimlanes ON swimlanes.id=tasks.swimlane_id LEFT JOIN projects ON projects.id=tasks.project_id WHERE tasks.is_active = ? AND tasks.project_id = ? ORDER BY tasks.position ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00049304962158203
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.004202127456665
[2021-02-11 14:14:42] [debug] SQL: SELECT tags.id, tags.name, tags.color_id, task_has_tags.task_id FROM tags LEFT JOIN task_has_tags ON task_has_tags.tag_id=tags.id WHERE task_has_tags.task_id IN (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ORDER BY tags.name ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00029301643371582
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0044951438903809
[2021-02-11 14:14:42] [debug] SQL: SELECT role FROM project_has_users WHERE user_id = ? AND project_id = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00021982192993164
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0047149658203125
[2021-02-11 14:14:42] [debug] SQL: SELECT projects.id, projects.name FROM projects LEFT JOIN project_has_users ON project_has_users.project_id=projects.id WHERE project_has_users.user_id = ? AND projects.is_active IN (?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00022196769714355
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0049369335174561
[2021-02-11 14:14:42] [debug] SQL: SELECT projects.id, projects.name FROM projects LEFT JOIN project_has_groups ON project_has_groups.project_id=projects.id LEFT JOIN group_has_users ON group_has_users.group_id=project_has_groups.group_id WHERE group_has_users.user_id = ? AND projects.is_active IN (?)
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00015687942504883
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0050938129425049
[2021-02-11 14:14:42] [debug] SQL: SELECT id, name FROM project_has_categories WHERE project_id = ? ORDER BY name ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00020694732666016
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.005300760269165
[2021-02-11 14:14:42] [debug] SQL: SELECT users.id, users.username, users.name FROM project_has_users LEFT JOIN users ON users.id=project_has_users.user_id WHERE users.is_active = ? AND project_has_users.project_id = ? AND project_has_users.role != ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00015401840209961
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0054547786712646
[2021-02-11 14:14:42] [debug] SQL: SELECT users.id, users.username, users.name FROM users LEFT JOIN group_has_users ON group_has_users.user_id=users.id LEFT JOIN project_has_groups ON project_has_groups.group_id=group_has_users.group_id WHERE project_has_groups.project_id = ? AND users.is_active = ? AND project_has_groups.role != ? ORDER BY users.username ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00014495849609375
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0055997371673584
[2021-02-11 14:14:42] [debug] SQL: SELECT users.name as owner_name, users.username as owner_username, custom_filters.id, custom_filters.user_id, custom_filters.project_id, custom_filters.filter, custom_filters.name, custom_filters.is_shared, custom_filters.append FROM custom_filters LEFT JOIN users ON users.id=custom_filters.user_id WHERE (is_shared = ? OR user_id = ?) AND project_id = ? ORDER BY custom_filters.name ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00020694732666016
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0058066844940186
[2021-02-11 14:14:42] [debug] SQL: SELECT name, value FROM user_has_metadata WHERE user_id = ? ORDER BY name ASC
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00024199485778809
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0060486793518066
[2021-02-11 14:14:42] [debug] SQL: SELECT project_role_has_restrictions.restriction_id, project_role_has_restrictions.project_id, project_role_has_restrictions.role_id, project_role_has_restrictions.rule, pr.role FROM project_role_has_restrictions LEFT JOIN project_has_roles AS pr ON pr.role_id=project_role_has_restrictions.role_id WHERE project_role_has_restrictions.project_id = ? AND role = ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00027704238891602
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0063257217407227
[2021-02-11 14:14:42] [debug] SQL: SELECT value FROM user_has_metadata WHERE user_id = ? AND name = ? LIMIT 1
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00029301643371582
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0066187381744385
[2021-02-11 14:14:42] [debug] SQL: SELECT 1 FROM user_has_unread_notifications WHERE user_id = ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00024199485778809
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0068607330322266
[2021-02-11 14:14:42] [debug] SQL: SELECT 1 FROM sessions WHERE id = ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.00050210952758789
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0073628425598145
[2021-02-11 14:14:42] [debug] SQL: UPDATE sessions SET expire_at=?, data=? WHERE id = ?
[2021-02-11 14:14:42] [debug] SQL: query_duration=0.0010027885437012
[2021-02-11 14:14:42] [debug] SQL: total_execution_time=0.0083656311035156
[2021-02-11 14:14:42] [debug] APP: nb_queries=27
[2021-02-11 14:14:42] [debug] APP: rendering_time=0.59156608581543
[2021-02-11 14:14:42] [debug] APP: memory_usage=2.16M
[2021-02-11 14:14:42] [debug] APP: uri=/kanboard/?controller=BoardViewController&action=show&project_id=1&search=status%3Aopen

I dont see any errors…let me ask, do you have any custom filters assigned at the user level? Found under preferences in the user management. I think there are also custom filters on the project level as well. make sure those aren’t set to something that would hide tasks.

That’s the frustrating part: it’s not just hiding tasks, the whole page breaks and it’s just a white screen. It happens on task creation of the 49th open task, but stays broken until you delete a task from the board. We have to get to them from the config page in the dropdown menu for the project number because absolutely nothing loads on the project board page.

There are no filters on the board or any of the users for it.

I dont really have any other ideas, if I could duplicate the error, it would be easier to solve. I dont have a raspberry pi, but I could spin up a container with most of your system config, and possibly os, if I knew more, and I would need to use the same plugins you have installed. if you cam give me all that info, I can try, when I get the chance, possibly tonighy.

Below is the config information:

Application version: 1.2.15
PHP version: 7.4.13
PHP SAPI: fpm-fcgi
HTTP Client: cURL
OS version: Linux 5.10.11-v7l+
Database driver: mysql
Database version: 10.3.27-MariaDB-0+deb10u1
Browser: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36

Plugins:
Auto Subtask Creation
Calendar
CustomUserCSS (not actually being used, I installed it for a brief experiment and never removed it)
Gantt
Instantactions
SubtaskDueDate

Below are the automatic actions we have for the board:

Thank you for your help and patience, this has been stumping us.

Hi,
Did you check your system logs ? Like Apache/httpd/nginx or PHP ?
Maybe php memory limit ?
Does this happen in every project or only one ?

I checked the Apache log and saw a reference to Instantactions several times throughout the errors. After uninstalling the plugin, it seems to have cleared up. I will keep an eye on the board in case things go south again.

It must have run into too many errors with the plugin and crashed the page when we got over a certain threshold.