diff --git a/src/applications/search/engineextension/PhabricatorFulltextIndexEngineExtension.php b/src/applications/search/engineextension/PhabricatorFulltextIndexEngineExtension.php index 0767849abe..ab4da88420 100644 --- a/src/applications/search/engineextension/PhabricatorFulltextIndexEngineExtension.php +++ b/src/applications/search/engineextension/PhabricatorFulltextIndexEngineExtension.php @@ -1,92 +1,116 @@ getConfigurationVersion(); + if ($object instanceof PhabricatorApplicationTransactionInterface) { // If this is a normal object with transactions, we only need to // reindex it if there are new transactions (or comment edits). $version[] = $this->getTransactionVersion($object); $version[] = $this->getCommentVersion($object); } if (!$version) { return null; } return implode(':', $version); } public function shouldIndexObject($object) { return ($object instanceof PhabricatorFulltextInterface); } public function indexObject( PhabricatorIndexEngine $engine, $object) { $engine = $object->newFulltextEngine(); if (!$engine) { return; } $engine->setObject($object); $engine->buildFulltextIndexes(); } private function getTransactionVersion($object) { $xaction = $object->getApplicationTransactionTemplate(); $xaction_row = queryfx_one( $xaction->establishConnection('r'), 'SELECT id FROM %T WHERE objectPHID = %s ORDER BY id DESC LIMIT 1', $xaction->getTableName(), $object->getPHID()); if (!$xaction_row) { return 'none'; } return $xaction_row['id']; } private function getCommentVersion($object) { $xaction = $object->getApplicationTransactionTemplate(); try { $comment = $xaction->getApplicationTransactionCommentObject(); if (!$comment) { return 'none'; } } catch (Exception $ex) { return 'none'; } $comment_row = queryfx_one( $comment->establishConnection('r'), 'SELECT c.id FROM %T x JOIN %T c ON x.phid = c.transactionPHID WHERE x.objectPHID = %s ORDER BY c.id DESC LIMIT 1', $xaction->getTableName(), $comment->getTableName(), $object->getPHID()); if (!$comment_row) { return 'none'; } return $comment_row['id']; } + private function getConfigurationVersion() { + if ($this->configurationVersion === null) { + $this->configurationVersion = $this->newConfigurationVersion(); + } + return $this->configurationVersion; + } + + private function newConfigurationVersion() { + $raw = array( + 'services' => PhabricatorEnv::getEnvConfig('cluster.search'), + ); + + $json = phutil_json_encode($raw); + + return PhabricatorHash::digestForIndex($json); + } + }