jenkins-bot has submitted this change and it was merged.
Change subject: Better error messaging in maintenance scripts
......................................................................
Better error messaging in maintenance scripts
Hopefully no more <<the operation failed with error: "1">>. "1" isn't a
useful error message. Nope.
Change-Id: I3c7d0eb67e33335f08472d8d8c0518ad9b9a009a
(cherry picked from commit 15b0043485d7ea217004ac0cc0d36abe30751fb4)
---
M includes/ElasticsearchIntermediary.php
M maintenance/updateOneSearchIndexConfig.php
2 files changed, 23 insertions(+), 8 deletions(-)
Approvals:
Chad: Looks good to me, approved
jenkins-bot: Verified
diff --git a/includes/ElasticsearchIntermediary.php
b/includes/ElasticsearchIntermediary.php
index 2d12671..c9f1b3d 100644
--- a/includes/ElasticsearchIntermediary.php
+++ b/includes/ElasticsearchIntermediary.php
@@ -107,6 +107,17 @@
}
/**
+ * Extract an error message from an exception thrown by Elastica.
+ * @param RuntimeException $exception exception from which to extract a
message
+ * @return message from the exception
+ */
+ public static function extractMessage( $exception ) {
+ return $exception instanceof ResponseException ?
+ $exception->getElasticsearchException()->getMessage() :
+ $exception->getMessage();
+ }
+
+ /**
* Does this status represent an Elasticsearch parse error?
* @param $status Status to check
* @return boolean is this a parse error?
@@ -168,9 +179,7 @@
// Lots of times these are the same as getMessage(), but
sometimes
// they're not. So get the nested exception so we're sure we get
// what we want. I'm looking at you
PartialShardFailureException.
- $message = $exception instanceof ResponseException ?
- $exception->getElasticsearchException()->getMessage() :
- $exception->getMessage();
+ $message = self::extractMessage( $exception );
$marker = 'ParseException[Cannot parse ';
$markerLocation = strpos( $message, $marker );
diff --git a/maintenance/updateOneSearchIndexConfig.php
b/maintenance/updateOneSearchIndexConfig.php
index b81a02e..95f4419 100644
--- a/maintenance/updateOneSearchIndexConfig.php
+++ b/maintenance/updateOneSearchIndexConfig.php
@@ -218,7 +218,7 @@
$this->error( "Http error communicating with
Elasticsearch: $message.\n", 1 );
} catch ( \Elastica\Exception\ExceptionInterface $e ) {
$type = get_class( $e );
- $message = $e->getMessage();
+ $message = ElasticsearchIntermediary::extractMessage(
$e );
$trace = $e->getTraceAsString();
$this->output( "\nUnexpected Elasticsearch failure.\n"
);
$this->error( "Elasticsearch failed in an unexpected
way. This is always a bug in CirrusSearch.\n" .
@@ -397,7 +397,7 @@
$this->output( "corrected\n" );
} catch ( \Elastica\Exception\ExceptionInterface $e ) {
$this->output( "failed!\n" );
- $message = $e->getMessage();
+ $message =
ElasticsearchIntermediary::extractMessage( $e );
$this->error( "Couldn't update mappings. Here
is elasticsearch's error message: $message\n", 1 );
}
}
@@ -811,7 +811,9 @@
}
} catch ( \Elastica\Exception\ExceptionInterface $e ) {
// Note that we can't fail the master here, we have to
check how many documents are in the new index in the master.
- wfLogWarning( "Search backend error during reindex.
Error message is: " . $e->getMessage() );
+ $type = get_class( $e );
+ $message = ElasticsearchIntermediary::extractMessage(
$e );
+ wfLogWarning( "Search backend error during reindex.
Error type is '$type' and message is: $message" );
die( 1 );
}
}
@@ -830,8 +832,10 @@
// Random backoff with lowest possible
upper bound as 16 seconds.
// With the default mximum number of
errors (5) this maxes out at 256 seconds.
$seconds = rand( 1, pow( 2, 3 + $errors
) );
+ $type = get_class( $e );
+ $message =
ElasticsearchIntermediary::extractMessage( $e );
$this->output( $this->indent .
$messagePrefix . "Caught an error retrying as singles. " .
- "Backing off for $seconds and
retrying. Error:\n$e" );
+ "Backing off for $seconds and
retrying. Error type is '$type' and message is: $message" );
sleep( $seconds );
}
} else {
@@ -845,7 +849,9 @@
try {
$updateResult = $this->getPageType()->addDocuments(
$documents );
} catch ( \Elastica\Exception\ExceptionInterface $e ) {
- $this->output( $this->indent . $messagePrefix . "Error
adding documents in bulk. Retrying as singles. Error:\n$e" );
+ $type = get_class( $e );
+ $message = ElasticsearchIntermediary::extractMessage(
$e );
+ $this->output( $this->indent . $messagePrefix . "Error
adding documents in bulk. Retrying as singles. Error type is '$type' and
message is: $message" );
foreach ( $documents as $document ) {
// Continue using the bulk api because we're
used to it.
$updateResult =
$this->getPageType()->addDocuments( array( $document ) );
--
To view, visit https://gerrit.wikimedia.org/r/161966
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I3c7d0eb67e33335f08472d8d8c0518ad9b9a009a
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/CirrusSearch
Gerrit-Branch: wmf/1.24wmf21
Gerrit-Owner: Manybubbles <[email protected]>
Gerrit-Reviewer: Chad <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits