Previously, only server triggered 5xx errors would cause a retry. However,
there are multiple categories of errors from http-client that should
also cause a retry (9xxx errors).
e.g., setting Tika to restart after every processed file can easily
cause either 9003 (connect failed) or 9005 (connection_lost) errors, which
is a temporary condition.
fts_tika_parser_response(const struct http_response *response,
struct tika_fts_parser *parser)
{
fts_tika_parser_response(const struct http_response *response,
struct tika_fts_parser *parser)
{
i_assert(parser->payload == NULL);
struct event *event = parser->user->event;
const struct fts_settings *set = fts_user_get_settings(parser->user);
i_assert(parser->payload == NULL);
struct event *event = parser->user->event;
const struct fts_settings *set = fts_user_get_settings(parser->user);
http_response_get_message(response));
parser->payload = i_stream_create_from_data("", 0);
break;
http_response_get_message(response));
parser->payload = i_stream_create_from_data("", 0);
break;
+ case HTTP_CLIENT_REQUEST_ERROR_ABORTED:
+ case HTTP_CLIENT_REQUEST_ERROR_CONNECT_FAILED:
+ case HTTP_CLIENT_REQUEST_ERROR_CONNECTION_LOST:
+ /* These can be triggered due to legitimate server activities
+ * (e.g. restart of Tika thread), so retry will probably
+ * be successful. */
+ retry = TRUE;
+ break;
default:
if (response->status / 100 == 5) {
/* Server Error - the problem could be anything (in Tika or
HTTP server or proxy) and might be retriable, but Tika has
trouble processing some documents and throws up this error
every time for those documents. */
default:
if (response->status / 100 == 5) {
/* Server Error - the problem could be anything (in Tika or
HTTP server or proxy) and might be retriable, but Tika has
trouble processing some documents and throws up this error
every time for those documents. */
- parser->parser.may_need_retry = TRUE;
- i_free(parser->parser.retriable_error_msg);
- parser->parser.retriable_error_msg =
- i_strdup_printf("fts_tika: PUT %s failed: %s",
- set->decoder_tika_url,
- http_response_get_message(response));
- parser->payload = i_stream_create_from_data("", 0);
} else {
e_error(event, "fts_tika: PUT %s failed: %s",
set->decoder_tika_url,
} else {
e_error(event, "fts_tika: PUT %s failed: %s",
set->decoder_tika_url,
+
+ if (retry) {
+ parser->parser.may_need_retry = TRUE;
+ i_free(parser->parser.retriable_error_msg);
+ parser->parser.retriable_error_msg =
+ i_strdup_printf("fts_tika: PUT %s failed: %s",
+ set->decoder_tika_url,
+ http_response_get_message(response));
+ parser->payload = i_stream_create_from_data("", 0);
+ }
+
parser->http_req = NULL;
io_loop_stop(current_ioloop);
}
parser->http_req = NULL;
io_loop_stop(current_ioloop);
}