Issue Summary
During calculation of the Progress (Issue count) field, ARJ traverses the linked issues to determine the count values as part of the getEstimateFromHistoryIssuesPure() function. This function recursively adds items to an array, using the function addChildIdsToArray().
With plans that are large and have cyclical dependencies, the browser's stack size can be exceeded, resulting in a blank plan load and an error in the browsers Javascript console
Steps to Reproduce
We don't have concrete steps to reproduce at this stage. However, cyclical dependencies, and plans with a large amount of issues are involved.
The problem has been reported in both Chrome and Firefox browsers.
Expected Results
There is no client side crash
Actual Results
- The ARJ Plan shows as blank
- One of the following Javascript errors are be found in the Developer Tools -> Console.
adrum.js:29 RangeError: Maximum call stack size exceeded at Array.concat (<anonymous>) at com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 at Array.reduce (<anonymous>) at e (com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3) at com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 at Array.reduce (<anonymous>) at e (com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3) at com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 at Array.reduce (<anonymous>) at e (com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3) (anonymous) @ adrum.js:29 fa @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 n.callback @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 ra @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 na @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 Os @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 ks @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 Ts @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 bs @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 $a @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 enqueueSetState @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42 x.setState @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:34 a.onStateChange @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:3 notify @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:3 t.notifyNestedSubs @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:3 a.onStateChange @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:3 c @ com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 dispatch @ com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 (anonymous) @ com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 (anonymous) @ com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 (anonymous) @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 dispatch @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 (anonymous) @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:3 (anonymous) @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 i @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 l @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 a @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 (anonymous) @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 z @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 M @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 b @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 (anonymous) @ adrum.js:29 Promise.then (async) (anonymous) @ adrum.js:29 L @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 (anonymous) @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 z @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 M @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 b @ com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:14 (anonymous) @ adrum.js:29 Show 2 more frames adrum.js:29 uncaught at he RangeError: Maximum call stack size exceeded at Array.concat (<anonymous>) at https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002114 at Array.reduce (<anonymous>) at e (https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002084) at https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002121 at Array.reduce (<anonymous>) at e (https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002084) at https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002121 at Array.reduce (<anonymous>) at e (https://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002084)
or
InternalError: too much recursion e http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 e http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 e http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3 com.atlassian.jpo:jpo-wr-page-portfolio-frontend-vendor-scripts.js:42:73504 uncaught at he Error: too much recursion e@http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002084 e/<@http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002121 e@http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts/com.atlassian.jpo:jpo-wr-page-simple-plans-scripts.js:3:1002084 e/<@http://mars-jira/s/d41d8cd98f00b204e9800998ecf8427e-CDN/-b0jcto/805007/921277c8a700b5a3f7c06553dc19ac8d/3.13.0/_/download/batch/com.atlassian.jpo:jpo-wr-page…
Workaround
The KB article on Jira Advanced Roadmaps Plan crashes in blank page after adding Progress column provides queries to help identify the looping issues and fix them.
- Try to find any cyclical dependencies in the plan's issue sources, and remediate them. This includes (non-total list):
- Create a new plan with the same issue sources, and do not add the "Progress (Issue count)" field. Alternatively:
- If the Progress (Issue Count) field was not saved to a saved view, you may simply clear your browser's Local Storage instead (Dev Tools -> Application -> Local Storage)
- If the Progress (Issue Count) field was saved to a saved view, then delete the affected view from Manage Views. If you cannot delete it (EG, it's the default), then you may need to create a new plan instead.