Soften a possible cluster search setup fatal
Summary:
Ref T12450. The way that config repair and setup issues interact is kind of complicated, and if `cluster.search` is invalid we may end up using `cluster.search` before we repair it.
I poked at things for a bit but wasn't confident I could get it to consistently repair before we use it without doing a big messy change.
The only thing that really matters is whether "type" is valid or not, so just put a slightly softer/more-tailored check in for that.
Test Plan:
- With `"type": "elastic"`, loaded setup issues.
- Before patch: hard fatal.
- After patch: softer fatal with more useful messaging.
{F4321048}
Reviewers: chad
Reviewed By: chad
Maniphest Tasks: T12450
Differential Revision: https://secure.phabricator.com/D17576
This commit is contained in:
@@ -4,7 +4,7 @@ final class PhabricatorClusterSearchConfigOptionType
|
||||
extends PhabricatorConfigJSONOptionType {
|
||||
|
||||
public function validateOption(PhabricatorConfigOption $option, $value) {
|
||||
self::validateClusterSearchConfigValue($value);
|
||||
self::validateValue($value);
|
||||
}
|
||||
|
||||
public static function validateValue($value) {
|
||||
|
||||
@@ -186,6 +186,18 @@ class PhabricatorSearchService
|
||||
$refs = array();
|
||||
|
||||
foreach ($services as $config) {
|
||||
|
||||
// Normally, we've validated configuration before we get this far, but
|
||||
// make sure we don't fatal if we end up here with a bogus configuration.
|
||||
if (!isset($engines[$config['type']])) {
|
||||
throw new Exception(
|
||||
pht(
|
||||
'Configured search engine type "%s" is unknown. Valid engines '.
|
||||
'are: %s.',
|
||||
$config['type'],
|
||||
implode(', ', array_keys($engines))));
|
||||
}
|
||||
|
||||
$engine = $engines[$config['type']];
|
||||
$cluster = new self($engine);
|
||||
$cluster->setConfig($config);
|
||||
|
||||
Reference in New Issue
Block a user