Skip to content

Misleading error handling #705

Open
Open
@greg0ire

Description

@greg0ire
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions