diff --git a/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php b/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php --- a/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php +++ b/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php @@ -22,12 +22,28 @@ return; } - $xactions = $query + $query ->setViewer($this->getViewer()) ->withObjectPHIDs(array($object->getPHID())) ->withComments(true) - ->needComments(true) - ->execute(); + ->needComments(true); + + // See PHI719. Users occasionally create objects with huge numbers of + // comments, which can be slow to index. We handle this with reasonable + // grace: at time of writing, we can index a task with 100K comments in + // about 30 seconds. However, we do need to hold all the comments in + // memory in the AbstractDocument, so there's some practical limit to what + // we can realistically index. + + // Since objects with more than 1,000 comments are not likely to be + // legitimate objects with actual discussion, index only the first + // thousand comments. + + $query + ->setOrderVector(array('-id')) + ->setLimit(1000); + + $xactions = $query->execute(); foreach ($xactions as $xaction) { if (!$xaction->hasComment()) {