jenkins-bot has submitted this change and it was merged.

Change subject: Handle the case when tm query phase1 returns zero results
......................................................................


Handle the case when tm query phase1 returns zero results

* Fixes: Undefined variable: score
* Avoids stupid empty phase2 query

Can be refactored later in separate methods for clarity

Change-Id: Ide323b05cab9371b6e70bd8c65850f05f29b8573
---
M ttmserver/ElasticSearchTTMServer.php
1 file changed, 38 insertions(+), 28 deletions(-)

Approvals:
  Chad: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/ttmserver/ElasticSearchTTMServer.php 
b/ttmserver/ElasticSearchTTMServer.php
index 6d0bc2b..c888663 100644
--- a/ttmserver/ElasticSearchTTMServer.php
+++ b/ttmserver/ElasticSearchTTMServer.php
@@ -109,6 +109,11 @@
                $contents = $scores = $terms = array();
                do {
                        $resultset = $this->getType()->search( $query );
+
+                       if ( count( $resultset ) === 0 ) {
+                               break;
+                       }
+
                        foreach ( $resultset->getResults() as $result ) {
                                $data = $result->getData();
                                $score = $result->getScore();
@@ -142,40 +147,45 @@
                        // Break if we already got all hits
                } while ( $resultset->getTotalHits() > count( $contents ) );
 
-               $idQuery = new \Elastica\Query\Terms();
-               $idQuery->setTerms( '_id', $terms );
-
-               $query = new \Elastica\Query( $idQuery );
-               $query->setSize( 25 );
-               $query->setParam( '_source', array( 'wiki', 'uri', 'content', 
'localid' ) );
-               $resultset = $this->getType()->search( $query );
-
                $suggestions = array();
-               foreach ( $resultset->getResults() as $result ) {
-                       $data = $result->getData();
 
-                       // Construct the matching source id
-                       $sourceId = preg_replace( '~/[^/]+$~', '', 
$result->getId() );
+               // Skip second query if first query found nothing. Keeping only 
one return
+               // statement in this method to avoid forgetting to reset 
connection timeout
+               if ( $terms !== array() ) {
+                       $idQuery = new \Elastica\Query\Terms();
+                       $idQuery->setTerms( '_id', $terms );
 
-                       $suggestions[] = array(
-                               'source' => $contents[$sourceId],
-                               'target' => $data['content'],
-                               'context' => $data['localid'],
-                               'quality' => $scores[$sourceId],
-                               'wiki' => $data['wiki'],
-                               'location' => $data['localid'] . '/' . 
$targetLanguage,
-                               'uri' => $data['uri'],
-                       );
-               }
+                       $query = new \Elastica\Query( $idQuery );
+                       $query->setSize( 25 );
+                       $query->setParam( '_source', array( 'wiki', 'uri', 
'content', 'localid' ) );
+                       $resultset = $this->getType()->search( $query );
 
-               // Ensure reults are in quality order
-               uasort( $suggestions, function ( $a, $b ) {
-                       if ( $a['quality'] === $b['quality'] ) {
-                               return 0;
+                       foreach ( $resultset->getResults() as $result ) {
+                               $data = $result->getData();
+
+                               // Construct the matching source id
+                               $sourceId = preg_replace( '~/[^/]+$~', '', 
$result->getId() );
+
+                               $suggestions[] = array(
+                                       'source' => $contents[$sourceId],
+                                       'target' => $data['content'],
+                                       'context' => $data['localid'],
+                                       'quality' => $scores[$sourceId],
+                                       'wiki' => $data['wiki'],
+                                       'location' => $data['localid'] . '/' . 
$targetLanguage,
+                                       'uri' => $data['uri'],
+                               );
                        }
 
-                       return ( $a['quality'] < $b['quality'] ) ? 1 : -1;
-               } );
+                       // Ensure reults are in quality order
+                       uasort( $suggestions, function ( $a, $b ) {
+                               if ( $a['quality'] === $b['quality'] ) {
+                                       return 0;
+                               }
+
+                               return ( $a['quality'] < $b['quality'] ) ? 1 : 
-1;
+                       } );
+               }
 
                $connection->setTimeout( $oldTimeout );
 

-- 
To view, visit https://gerrit.wikimedia.org/r/178463
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ide323b05cab9371b6e70bd8c65850f05f29b8573
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
Gerrit-Reviewer: Chad <[email protected]>
Gerrit-Reviewer: Manybubbles <[email protected]>
Gerrit-Reviewer: Santhosh <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to