From 0a3c26998fc985a0cc660fe6a8e92184c6b08f69 Mon Sep 17 00:00:00 2001 From: epriestley Date: Thu, 8 Aug 2019 10:35:04 -0700 Subject: [PATCH] When the feed query on project profile pages overheats, contain the damage Summary: Ref T13349. This is almost the same change as D20678, but for project profiles instead of user profiles. The general reproduction case is "view a project where you can't see more than 50 of the 500 most recent feed stories". Test Plan: - Forced all queries to overheat. - Viewed a project profile page. - Before: overheating fatal near top level. - After: damage contained to feed panel. Maniphest Tasks: T13349 Differential Revision: https://secure.phabricator.com/D20704 --- .../PhabricatorProjectProfileController.php | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/src/applications/project/controller/PhabricatorProjectProfileController.php b/src/applications/project/controller/PhabricatorProjectProfileController.php index 67b94f7fa9..386a649238 100644 --- a/src/applications/project/controller/PhabricatorProjectProfileController.php +++ b/src/applications/project/controller/PhabricatorProjectProfileController.php @@ -78,14 +78,29 @@ final class PhabricatorProjectProfileController $project, PhabricatorProject::ITEM_PROFILE); - $stories = id(new PhabricatorFeedQuery()) + $query = id(new PhabricatorFeedQuery()) ->setViewer($viewer) - ->withFilterPHIDs( - array( - $project->getPHID(), - )) + ->withFilterPHIDs(array($project->getPHID())) ->setLimit(50) - ->execute(); + ->setReturnPartialResultsOnOverheat(true); + + $stories = $query->execute(); + + $overheated_view = null; + $is_overheated = $query->getIsOverheated(); + if ($is_overheated) { + $overheated_message = + PhabricatorApplicationSearchController::newOverheatedError( + (bool)$stories); + + $overheated_view = id(new PHUIInfoView()) + ->setSeverity(PHUIInfoView::SEVERITY_WARNING) + ->setTitle(pht('Query Overheated')) + ->setErrors( + array( + $overheated_message, + )); + } $view_all = id(new PHUIButtonView()) ->setTag('a') @@ -103,7 +118,11 @@ final class PhabricatorProjectProfileController $feed = id(new PHUIObjectBoxView()) ->setHeader($feed_header) ->addClass('project-view-feed') - ->appendChild($feed); + ->appendChild( + array( + $overheated_view, + $feed, + )); require_celerity_resource('project-view-css');