Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Misleading error handling #705

Open
greg0ire opened this issue Apr 25, 2022 · 1 comment
Open

Misleading error handling #705

greg0ire opened this issue Apr 25, 2022 · 1 comment

Comments

@greg0ire
Copy link
Contributor

  • Algolia Client Version: 3.2.0
  • Language Version: 8.1.2

Description

It seems like the current implementation of the exception is misleading:

try {
$request = $this->createRequest(
$method,
$uri,
$requestOptions->getHeaders(),
$body
);
$this->log(LogLevel::DEBUG, 'Sending request.', $logParams);
$response = $this->http->sendRequest(
$request,
$timeout * $retry,
$requestOptions->getConnectTimeout() * $retry
);
$responseBody = $this->handleResponse($response, $request);
$logParams['response'] = $responseBody;
$this->log(LogLevel::DEBUG, 'Response received.', $logParams);
return $responseBody;
} catch (RetriableException $e) {
$this->log(LogLevel::DEBUG, 'Host failed.', array_merge($logParams, [
'description' => $e->getMessage(),
]));
$this->clusterHosts->failed($host);
} catch (BadRequestException $e) {
unset($logParams['body'], $logParams['headers']);
$logParams['description'] = $e->getMessage();
$this->log(LogLevel::WARNING, 'Bad request.', $logParams);
throw $e;
} catch (\Exception $e) {
unset($logParams['body'], $logParams['headers']);
$logParams['description'] = $e->getMessage();
$this->log(LogLevel::ERROR, 'Generic error.', $logParams);
throw $e;
}
$retry++;
}
throw new UnreachableException();

To day, I got the following exception Impossible to connect, please check your Algolia Application Id.

Turning on logging revealed that this was in fact due to a missing feature on a new infrastructure we are testing:

^ array:3 [
  "level" => "debug"
  "message" => "Algolia API client: Host failed."
  "context" => array:7 [
    "body" => array:1 [
      "numericFilters" => "document_update_time < 1650806228"
    ]
    "headers" => array:4 [
      "X-Algolia-Application-Id" => "redacted"
      "X-Algolia-API-Key" => "redacted"
      "User-Agent" => "Algolia for PHP (3.2.0); PHP (8.1.2); Guzzle (7)"
      "Content-Type" => "application/json"
    ]
    "method" => "POST"
    "query" => []
    "retryNumber" => 4
    "host" => "https://mlnqxjqtya-1.algolianet.com/1/indexes/int_products_gb/deleteByQuery"
    "description" => "Retriable failure on mlnqxjqtya-1.algolianet.com: Not Implemented"
  ]
]

I would expect never to get an exception that is plain wrong. Before getting this issue, I had a problem where my index name was wrong, but it was diagnosed in the same way: Impossible to connect, please check your Algolia Application Id..

What I would expect would be the last error to be remembered and used in the exception message. Also, the exception type is wrong: the host was not unreachable, it was missing a feature.

@markfullmer
Copy link

I'd posit that this is a significant problem. For our integration, we provide Algolia connection details only in our production environment. On non-production environments, this will generate a fatal PHP error and cause the application to crash.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants