Page MenuHomePhabricator

When an AJAX request fatals with an open transaction, the exception is not shown
Open, WishlistPublic

Description

This kind of annoys me sometimes when developing extensions to Phabricator (but is otherwise not a big deal). Basically when an AJAX request is in progress, and it crashes due to an exception, the returned output is like this:

for (;;);{"error":null,"payload":{"dialog":"\u003cform method=\"POST\" class=\"aphront-dialog-view aphront-exception-dialog aphront-dialog-view-standalone\" data-sigil=\"jx-dialog\"\u003e\u003cinput type=\"hidden\" name=\"__csrf__\" value=\"B@5qfqxwgk2ca0ba1e7539a29c\" \/\u003e\u003cinput type=\"hidden\" name=\"__form__\" value=\"1\" \/\u003e\u003cinput type=\"hidden\" name=\"__dialog__\" value=\"1\" \/\u003e\u003cdiv class=\"aphront-dialog-head\"\u003e\u003cdiv class=\"phui-action-header sprite-gradient gradient-lightblue-header\"\u003e\u003ch3 class=\"phui-action-header-title\"\u003eUnhandled Exception (&quot;Exception&quot;)\u003c\/h3\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"aphront-dialog-body grouped\"\u003e\u003cdiv class=\"aphront-unhandled-exception\"\u003e\u003cdiv class=\"exception-message\"\u003eBad getter call: getStatus\u003c\/div\u003e\u003cdiv class=\"exception-trace\"\u003e\u003cdiv class=\"exception-trace-header\"\u003eStack Trace\u003c\/div\u003e\u003cdiv class=\"aphront-table-wrap\"\u003e\u003ctable class=\"aphront-table-view\"\u003e\u003ctr\u003e\u003cth class=\"n\"\u003eDepth\u003c\/th\u003e\u003cth\u003eLibrary\u003c\/th\u003e\u003cth\u003eFile\u003c\/th\u003e\u003cth class=\"wide\"\u003eWhere\u003c\/th\u003e\u003c\/tr\u003e\u003ctr\u003e\u003ctd class=\"n\"\u003e8\u003c\/td\u003e\u003ctd\u003ephabricator\u003c\/td\u003e\u003ctd\u003e\u003ca title=\"\/home\/james\/Projects\/Phabricator\/phabricator\/src\/infrastructure\/storage\/lisk\/LiskDAO.php\" href=\"https:\/\/secure.phabricator.com\/diffusion\/P\/browse\/master\/src\/infrastructure\/storage\/lisk\/LiskDAO.php$1615\" target=\"_blank\" rel=\"noreferrer\"\u003einfrastructure\/storage\/lisk\/LiskDAO.php\u003c\/a\u003e : 1615\u003c\/td\u003e\u003ctd class=\"wide\"\u003eLiskDAO::call()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr class=\"alt\"\u003e\u003ctd class=\"n\"\u003e7\u003c\/td\u003e\u003ctd\u003ephabricator-pipeline\u003c\/td\u003e\u003ctd\u003e\u003cspan title=\"\/home\/james\/Projects\/Phabricator\/phabricator-pipeline\/src\/applications\/pipeline\/editor\/PipelineReleaseEditor.php\"\u003eapplications\/pipeline\/editor\/PipelineReleaseEditor.php\u003c\/span\u003e : 179\u003c\/td\u003e\u003ctd class=\"wide\"\u003eLiskDAO::__call()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr\u003e\u003ctd class=\"n\"\u003e6\u003c\/td\u003e\u003ctd\u003ephabricator-pipeline\u003c\/td\u003e\u003ctd\u003e\u003cspan title=\"\/home\/james\/Projects\/Phabricator\/phabricator-pipeline\/src\/applications\/pipeline\/editor\/PipelineReleaseEditor.php\"\u003eapplications\/pipeline\/editor\/PipelineReleaseEditor.php\u003c\/span\u003e : 179\u003c\/td\u003e\u003ctd class=\"wide\"\u003eHarbormasterBuild::getStatus()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr class=\"alt\"\u003e\u003ctd class=\"n\"\u003e5\u003c\/td\u003e\u003ctd\u003ephabricator-pipeline\u003c\/td\u003e\u003ctd\u003e\u003cspan title=\"\/home\/james\/Projects\/Phabricator\/phabricator-pipeline\/src\/applications\/pipeline\/editor\/PipelineReleaseEditor.php\"\u003eapplications\/pipeline\/editor\/PipelineReleaseEditor.php\u003c\/span\u003e : 156\u003c\/td\u003e\u003ctd class=\"wide\"\u003ePipelineReleaseEditor::abortPreviousRelease()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr\u003e\u003ctd class=\"n\"\u003e4\u003c\/td\u003e\u003ctd\u003ephabricator\u003c\/td\u003e\u003ctd\u003e\u003ca title=\"\/home\/james\/Projects\/Phabricator\/phabricator\/src\/applications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php\" href=\"https:\/\/secure.phabricator.com\/diffusion\/P\/browse\/master\/src\/applications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php$477\" target=\"_blank\" rel=\"noreferrer\"\u003eapplications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php\u003c\/a\u003e : 477\u003c\/td\u003e\u003ctd class=\"wide\"\u003ePipelineReleaseEditor::applyCustomExternalTransaction()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr class=\"alt\"\u003e\u003ctd class=\"n\"\u003e3\u003c\/td\u003e\u003ctd\u003ephabricator\u003c\/td\u003e\u003ctd\u003e\u003ca title=\"\/home\/james\/Projects\/Phabricator\/phabricator\/src\/applications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php\" href=\"https:\/\/secure.phabricator.com\/diffusion\/P\/browse\/master\/src\/applications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php$706\" target=\"_blank\" rel=\"noreferrer\"\u003eapplications\/transactions\/editor\/PhabricatorApplicationTransactionEditor.php\u003c\/a\u003e : 706\u003c\/td\u003e\u003ctd class=\"wide\"\u003ePhabricatorApplicationTransactionEditor::applyExternalEffects()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr\u003e\u003ctd class=\"n\"\u003e2\u003c\/td\u003e\u003ctd\u003ephabricator-pipeline\u003c\/td\u003e\u003ctd\u003e\u003cspan title=\"\/home\/james\/Projects\/Phabricator\/phabricator-pipeline\/src\/applications\/pipeline\/controller\/PipelineReleaseDeployController.php\"\u003eapplications\/pipeline\/controller\/PipelineReleaseDeployController.php\u003c\/span\u003e : 50\u003c\/td\u003e\u003ctd class=\"wide\"\u003ePhabricatorApplicationTransactionEditor::applyTransactions()\u003c\/td\u003e\u003c\/tr\u003e\u003ctr class=\"alt\"\u003e\u003ctd class=\"n\"\u003e1\u003c\/td\u003e\u003ctd\u003e\u003c\/td\u003e\u003ctd\u003e\u003cspan title=\"\/home\/james\/Projects\/Phabricator\/phabricator\/webroot\/index.php\"\u003e\/home\/james\/Projects\/Phabricator\/phabricator\/webroot\/index.php\u003c\/span\u003e : 95\u003c\/td\u003e\u003ctd class=\"wide\"\u003ePipelineReleaseDeployController::processRequest()\u003c\/td\u003e\u003c\/tr\u003e\u003c\/table\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003c\/div\u003e\u003cdiv class=\"aphront-dialog-tail grouped\"\u003e\u003ca href=\"\/\" class=\"button grey\" name=\"__cancel__\" data-sigil=\"jx-workflow-button\" data-meta=\"5_0\"\u003eClose\u003c\/a\u003e\u003c\/div\u003e\u003c\/form\u003e"},"javelin_metadata":[[]],"javelin_behaviors":{"dark-console":[{"uri":"\/pipeline\/release\/deploy\/136\/","key":"757pqcfryhdfym5srfndql6z","color":"#ff0000"}]},"javelin_resources":["http:\/\/phabricator.local\/res\/1410310052T\/phabricator\/974635bb\/core.pkg.css","http:\/\/phabricator.local\/res\/1407370455T\/phabricator\/83e2cc86\/rsrc\/css\/layout\/phabricator-action-header-view.css","http:\/\/phabricator.local\/res\/1407370455T\/phabricator\/df001cab\/darkconsole.pkg.js","http:\/\/phabricator.local\/res\/1410310052T\/phabricator\/f0e2c091\/core.pkg.js","http:\/\/phabricator.local\/res\/1382520390T\/phabricator\/b88ab49e\/rsrc\/externals\/javelin\/core\/init.js"]}<br />
<b>Fatal error</b>:  Uncaught exception 'Exception' with message 'Process exited with an open transaction! The transaction will be implicitly rolled back. Calls to openTransaction() must always be paired with a call to saveTransaction() or killTransaction().' in /home/james/Projects/Phabricator/libphutil/src/aphront/storage/connection/AphrontDatabaseTransactionState.php:69
Stack trace:
#0 [internal function]: AphrontDatabaseTransactionState-&gt;__destruct()
#1 {main}
  thrown in <b>/home/james/Projects/Phabricator/libphutil/src/aphront/storage/connection/AphrontDatabaseTransactionState.php</b> on line <b>69</b><br />

Because of the "open transaction" warning, it breaks the JSON output and doesn't show the actual exception. It can be found in the response text, but sometimes this leaves the page in a broken state when a dialog has been shown, closed due to clicking a button and making an AJAX request and the semi-transparent white layer is showing on the page preventing the user from interacting with anything.

Event Timeline

hach-que raised the priority of this task from to Wishlist.
hach-que updated the task description. (Show Details)
hach-que added a project: Phabricator.
hach-que added subscribers: hach-que, epriestley.