algolia / algoliasearch-client-php

⚡️ A fully-featured and blazing-fast PHP API client to interact with Algolia.
https://www.algolia.com/doc/api-client/php/getting-started/
MIT License
669 stars 115 forks source link

Misleading error handling #705

Open greg0ire opened 2 years ago

greg0ire commented 2 years ago

Description

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

https://github.com/algolia/algoliasearch-client-php/blob/ffef644ac41411f64e4522157ed53fb825b0908a/src/RetryStrategy/ApiWrapper.php#L151-L196

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 commented 1 year ago

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.