Files
scylladb/vector_search/error.hh
Piotr Dulikowski d2b12329ab Merge 'Return HTTP error description in Vector Store client' from Szymon Wasik
The `service_error` struct: 6dc2c42f8b/service/vector_store_client.hh (L64)
currently stores just the error status code. For this reason whenever the HTTP error occurs, only the error code can be forwarded to the client. For example see here: 6dc2c42f8b/service/vector_store_client.cc (L580)
For this reason in the output of the drivers full description of the error is missing which forces user to take a look into Scylla server logs.

The objective of this PR is to extend the support for HTTP errors in Vector Store client to handle messages as well.

Moreover, it removes the quadratic reallocation in response_content_to_sstring() helper function that is used for getting the response in case of error.

Fixes: VECTOR-189

Closes scylladb/scylladb#26139

* github.com:scylladb/scylladb:
  vector_search: Avoid quadratic reallocation in response_content_to_sstring
  vector_store_client: Return HTTP error description, not just code

(cherry picked from commit 38a2829f69)

Closes scylladb/scylladb#29312
2026-04-03 17:53:40 +02:00

59 lines
1.8 KiB
C++

/*
* Copyright (C) 2025-present ScyllaDB
*/
/*
* SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
*/
#pragma once
#include <seastar/http/reply.hh>
#include <seastar/core/sstring.hh>
#include <fmt/format.h>
namespace vector_search {
/// The service is disabled.
struct disabled_error {};
/// The operation was aborted.
struct aborted_error {};
/// The vector-store addr is unavailable (not possible to get an addr from the dns service).
struct addr_unavailable_error {};
/// The vector-store service is unavailable.
struct service_unavailable_error {};
/// The error from the vector-store service.
struct service_error {
seastar::http::reply::status_type status; ///< The HTTP status code from the vector-store service.
seastar::sstring message; ///< The error message from the vector-store service.
};
/// An unsupported reply format from the vector-store service.
struct service_reply_format_error {};
struct error_visitor {
seastar::sstring operator()(service_error e) const {
return fmt::format("Vector Store error: HTTP status {}, message: {}", e.status, e.message);
}
seastar::sstring operator()(disabled_error) const {
return fmt::format("Vector Store is disabled");
}
seastar::sstring operator()(aborted_error) const {
return fmt::format("Vector Store request was aborted");
}
seastar::sstring operator()(addr_unavailable_error) const {
return fmt::format("Vector Store service address could not be fetched from DNS");
}
seastar::sstring operator()(service_unavailable_error) const {
return fmt::format("Vector Store service is unavailable");
}
seastar::sstring operator()(service_reply_format_error) const {
return fmt::format("Vector Store returned an invalid JSON");
}
};
} // namespace vector_search