Ram has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/57350


Change subject: Bug: 43544: Propagate lucene errors back to user
......................................................................

Bug: 43544: Propagate lucene errors back to user

When lsearchd responds with 500 errors, we propagate that back to the user.

Bug: 43544
Change-Id: Idb42d64987164ba099228b154729c9c86af7407f
---
M MWSearch_body.php
1 file changed, 33 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/MWSearch 
refs/changes/50/57350/1

diff --git a/MWSearch_body.php b/MWSearch_body.php
index 7a2642e..acdd56a 100644
--- a/MWSearch_body.php
+++ b/MWSearch_body.php
@@ -470,7 +470,7 @@
 
                // Search server will be in local network but may not trigger 
checks on
                // Http::isLocal(), so suppress usage of $wgHTTPProxy if 
enabled.
-               $httpOpts = array( 'proxy' => false );
+               $httpOpts = array( 'proxy' => false, 'timeout' => 'default', 
'method' => 'GET' );
 
                wfDebug( "Fetching search data from $searchUrl\n" );
 
@@ -481,18 +481,32 @@
                                wfSuppressWarnings();
                                $httpProfile ="LuceneSearchSet::newFromQuery" . 
'-contact-' . $host;
                                wfProfileIn( $httpProfile );
-                               $data = Http::get( $searchUrl, 
$wgLuceneSearchTimeout, $httpOpts );
+                               // $data = Http::get( $searchUrl, 
$wgLuceneSearchTimeout, $httpOpts );
+
+                               $req = MWHttpRequest::factory( $searchUrl, 
$httpOpts );
+                               $status = $req->execute();
+
                                wfProfileOut( $httpProfile );
                                wfRestoreWarnings();
-                               return $data;
+                               if ( $status->isOK() ) {
+                                       return array( true, $req->getContent() 
);
+                               } else {
+                                       return array( false, 
$status->getWikiText() );
+                               }
                        } ) );
                $data = $work->execute();
-               if( $data === false ) {
+               if( $data[ 0 ] === false ) {
                        // Network error or server error
+                       $errMsg = trim( $data[ 1 ] );
+                       if ( "" == $errMsg ) {    // should never happen
+                               $errMsg = "Internal server error";
+                       }
+                       $resultSet = new LuceneSearchSet( $method, $query, 
$errMsg );
+                       wfDebug( "Error -- " . $errMsg . "; returning error 
result set\n" );
                        wfProfileOut( __METHOD__ );
-                       return null;
+                       return $resultSet;
                } else {
-                       $inputLines = explode( "\n", trim( $data ) );
+                       $inputLines = explode( "\n", trim( $data[ 1 ] ) );
                        $resultLines = array_map( 'trim', $inputLines );
                }
 
@@ -525,7 +539,9 @@
                                        
while(!self::startsWith($resultLines[$interwikiLen],"#results"))
                                                $interwikiLen++;
                                        $interwikiLines = 
array_splice($resultLines,0,$interwikiLen);
-                                       $interwiki = new LuceneSearchSet( 
$method, $query, $interwikiLines, intval($iwCount), intval($iwTotal) );
+
+                                       // errMsg = null
+                                       $interwiki = new LuceneSearchSet( 
$method, $query, null, $interwikiLines, intval($iwCount), intval($iwTotal) );
                                }
 
                                # how many results we got
@@ -536,8 +552,8 @@
                        }
                }
 
-
-               $resultSet = new LuceneSearchSet( $method, $query, 
$resultLines, $resultCount, $totalHits,
+               // errMsg = null
+               $resultSet = new LuceneSearchSet( $method, $query, null, 
$resultLines, $resultCount, $totalHits,
                             $suggestion, $info, $interwiki );
 
                if($wgLuceneSearchCacheExpiry > 0){
@@ -558,16 +574,19 @@
         *
         * @param string $method
         * @param string $query
+        * @param string $errMsg
         * @param array $lines
         * @param int $resultCount
         * @param int $totalHits
         * @param string $suggestion
         * @param string $info
+        * @param string $interwiki
         * @access private
         */
-       function __construct( $method, $query, $lines, $resultCount, $totalHits 
= null, $suggestion = null, $info = null, $interwiki = null ) {
+       function __construct( $method, $query, $errMsg = null, $lines = null, 
$resultCount = 0, $totalHits = null, $suggestion = null, $info = null, 
$interwiki = null ) {
                $this->mMethod            = $method;
                $this->mQuery             = $query;
+               $this->mErrMsg            = $errMsg;
                $this->mTotalHits         = $totalHits;
                $this->mResults           = $lines;
                $this->mResultCount       = $resultCount;
@@ -620,6 +639,10 @@
                return $this->mResultCount;
        }
 
+       function errMsg() {
+               return $this->mErrMsg;
+       }
+
        function termMatches() {
                $resq = preg_replace( "/\\[.*?\\]:/", " ", $this->mQuery ); # 
generic prefixes
                $resq = preg_replace( "/all:/", " ", $resq );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Idb42d64987164ba099228b154729c9c86af7407f
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/MWSearch
Gerrit-Branch: master
Gerrit-Owner: Ram <r...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to