Index: src/__phutil_library_map__.php =================================================================== --- src/__phutil_library_map__.php +++ src/__phutil_library_map__.php @@ -1900,6 +1900,7 @@ 'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php', 'PhabricatorSearchScope' => 'applications/search/constants/PhabricatorSearchScope.php', 'PhabricatorSearchSelectController' => 'applications/search/controller/PhabricatorSearchSelectController.php', + 'PhabricatorSearchWorker' => 'applications/search/worker/PhabricatorSearchWorker.php', 'PhabricatorSecurityConfigOptions' => 'applications/config/option/PhabricatorSecurityConfigOptions.php', 'PhabricatorSendGridConfigOptions' => 'applications/config/option/PhabricatorSendGridConfigOptions.php', 'PhabricatorSettingsAdjustController' => 'applications/settings/controller/PhabricatorSettingsAdjustController.php', @@ -4543,6 +4544,7 @@ 'PhabricatorSearchQuery' => 'PhabricatorSearchDAO', 'PhabricatorSearchResultView' => 'AphrontView', 'PhabricatorSearchSelectController' => 'PhabricatorSearchBaseController', + 'PhabricatorSearchWorker' => 'PhabricatorWorker', 'PhabricatorSecurityConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorSendGridConfigOptions' => 'PhabricatorApplicationConfigOptions', 'PhabricatorSettingsAdjustController' => 'PhabricatorController', Index: src/applications/audit/editor/PhabricatorAuditCommentEditor.php =================================================================== --- src/applications/audit/editor/PhabricatorAuditCommentEditor.php +++ src/applications/audit/editor/PhabricatorAuditCommentEditor.php @@ -302,7 +302,7 @@ $this->publishFeedStory($comment, $feed_phids); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($commit->getPHID()); + ->queueDocumentForIndexing($commit->getPHID()); if (!$this->noEmail) { $this->sendMail($comment, $other_comments, $inline_comments, $requests); Index: src/applications/differential/editor/DifferentialCommentEditor.php =================================================================== --- src/applications/differential/editor/DifferentialCommentEditor.php +++ src/applications/differential/editor/DifferentialCommentEditor.php @@ -700,7 +700,7 @@ ->publish(); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($revision->getPHID()); + ->queueDocumentForIndexing($revision->getPHID()); return $comment; } Index: src/applications/differential/editor/DifferentialRevisionEditor.php =================================================================== --- src/applications/differential/editor/DifferentialRevisionEditor.php +++ src/applications/differential/editor/DifferentialRevisionEditor.php @@ -534,7 +534,7 @@ ->publish(); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($revision->getPHID()); + ->queueDocumentForIndexing($revision->getPHID()); } public static function addCCAndUpdateRevision( Index: src/applications/diffusion/controller/DiffusionCommitEditController.php =================================================================== --- src/applications/diffusion/controller/DiffusionCommitEditController.php +++ src/applications/diffusion/controller/DiffusionCommitEditController.php @@ -45,7 +45,7 @@ $editor->save(); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($commit->getPHID()); + ->queueDocumentForIndexing($commit->getPHID()); return id(new AphrontRedirectResponse()) ->setURI('/r'.$callsign.$commit->getCommitIdentifier()); Index: src/applications/people/storage/PhabricatorUser.php =================================================================== --- src/applications/people/storage/PhabricatorUser.php +++ src/applications/people/storage/PhabricatorUser.php @@ -152,7 +152,7 @@ $this->updateNameTokens(); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($this->getPHID()); + ->queueDocumentForIndexing($this->getPHID()); return $result; } Index: src/applications/phriction/editor/PhrictionDocumentEditor.php =================================================================== --- src/applications/phriction/editor/PhrictionDocumentEditor.php +++ src/applications/phriction/editor/PhrictionDocumentEditor.php @@ -213,7 +213,7 @@ $document->attachContent($new_content); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($document->getPHID()); + ->queueDocumentForIndexing($document->getPHID()); // Stub out empty parent documents if they don't exist $ancestral_slugs = PhabricatorSlug::getAncestry($document->getSlug()); Index: src/applications/project/editor/PhabricatorProjectEditor.php =================================================================== --- src/applications/project/editor/PhabricatorProjectEditor.php +++ src/applications/project/editor/PhabricatorProjectEditor.php @@ -168,7 +168,7 @@ } id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($project->getPHID()); + ->queueDocumentForIndexing($project->getPHID()); return $this; } Index: src/applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php =================================================================== --- src/applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php +++ src/applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php @@ -87,7 +87,7 @@ PhabricatorRepositoryCommit::IMPORTED_CHANGE); id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($commit->getPHID()); + ->queueDocumentForIndexing($commit->getPHID()); PhabricatorOwnersPackagePathValidator::updateOwnersPackagePaths($commit); if ($this->shouldQueueFollowupTasks()) { Index: src/applications/search/index/PhabricatorSearchIndexer.php =================================================================== --- src/applications/search/index/PhabricatorSearchIndexer.php +++ src/applications/search/index/PhabricatorSearchIndexer.php @@ -1,10 +1,15 @@ $phid, + )); + } + public function indexDocumentByPHID($phid) { $doc_indexer_symbols = id(new PhutilSymbolLoader()) ->setAncestorClass('PhabricatorSearchDocumentIndexer') Index: src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php =================================================================== --- src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php +++ src/applications/search/management/PhabricatorSearchManagementIndexWorkflow.php @@ -28,13 +28,8 @@ array( 'name' => 'background', 'help' => 'Instead of indexing in this process, queue tasks for '. - 'the daemons. This is better if you are indexing a lot '. - 'of stuff, but less helpful for debugging.', - ), - array( - 'name' => 'foreground', - 'help' => 'Index in this process, even if there are many objects '. - 'to index. This is helpful for debugging.', + 'the daemons. This can improve performance, but makes '. + 'it more difficult to debug search indexing.', ), array( 'name' => 'objects', @@ -51,7 +46,6 @@ $obj_names = $args->getArg('objects'); - if ($obj_names && ($is_all || $is_type)) { throw new PhutilArgumentUsageException( "You can not name objects to index alongside the '--all' or '--type' ". @@ -72,19 +66,31 @@ "Nothing to index!"); } + if ($args->getArg('background')) { + $is_background = true; + } else { + PhabricatorWorker::setRunAllTasksInProcess(true); + $is_background = false; + } + $groups = phid_group_by_type($phids); foreach ($groups as $group_type => $group) { $console->writeOut( + "%s\n", pht( "Indexing %d object(s) of type %s.", count($group), - $group_type)."\n"); + $group_type)); } $indexer = new PhabricatorSearchIndexer(); foreach ($phids as $phid) { - $indexer->indexDocumentByPHID($phid); - $console->writeOut(pht("Indexing '%s'...\n", $phid)); + if ($is_background) { + $console->writeOut("%s\n", pht("Queueing '%s'...", $phid)); + } else { + $console->writeOut("%s\n", pht("Indexing '%s'...", $phid)); + } + $indexer->queueDocumentForIndexing($phid); } $console->writeOut("Done.\n"); Index: src/applications/search/worker/PhabricatorSearchWorker.php =================================================================== --- /dev/null +++ src/applications/search/worker/PhabricatorSearchWorker.php @@ -0,0 +1,13 @@ +getTaskData(); + $phid = idx($data, 'documentPHID'); + + id(new PhabricatorSearchIndexer()) + ->indexDocumentByPHID($phid); + } + +} Index: src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php =================================================================== --- src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php +++ src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php @@ -533,7 +533,7 @@ if ($this->supportsSearch()) { id(new PhabricatorSearchIndexer()) - ->indexDocumentByPHID($object->getPHID()); + ->queueDocumentForIndexing($object->getPHID()); } if ($this->supportsFeed()) {