diff --git a/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php b/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php index c9f43f49b2..4eeda3251c 100644 --- a/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php +++ b/src/applications/transactions/engineextension/PhabricatorTransactionsFulltextEngineExtension.php @@ -1,45 +1,61 @@ 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()) { continue; } $comment = $xaction->getComment(); $document->addField( PhabricatorSearchDocumentFieldType::FIELD_COMMENT, $comment->getContent()); } } }