diff --git a/src/applications/feed/query/PhabricatorFeedTransactionQuery.php b/src/applications/feed/query/PhabricatorFeedTransactionQuery.php --- a/src/applications/feed/query/PhabricatorFeedTransactionQuery.php +++ b/src/applications/feed/query/PhabricatorFeedTransactionQuery.php @@ -155,6 +155,20 @@ ->setAncestorClass('PhabricatorApplicationTransactionQuery') ->execute(); + // Remove TransactionQuery classes of uninstalled apps. Increases query + // performance and decreases likeliness of an "Query Overheated" error if + // an app got uninstalled so data in it cannot be accessed anymore anyway. + // See https://secure.phabricator.com/T13133, https://we.phorge.it/T15642 + foreach ($queries as $key => $query) { + $app = $query->getQueryApplicationClass(); + + if ($app !== null && (($viewer && + !PhabricatorApplication::isClassInstalledForViewer($app, $viewer)) + || !PhabricatorApplication::isClassInstalled($app))) { + unset($queries[$key]); + } + } + $type_map = array(); // If we're querying for specific transaction PHIDs, we only need to