op->complete();
done:
- int r = io->complete_request();
- if (r < 0) {
- dout(0) << "ERROR: io->complete_request() returned " << r << dendl;
+ try {
+ io->complete_request();
+ } catch (rgw::io::Exception& e) {
+ dout(0) << "ERROR: io->complete_request() returned "
+ << e.what() << dendl;
}
if (should_log) {
rgw_log_op(store, s, (op ? op->name() : "unknown"), olog);
auto bytes = boost::asio::write(socket, boost::asio::buffer(buf, len), ec);
if (ec) {
derr << "write_data failed: " << ec.message() << dendl;
- throw rgw::io::RestfulClient::Exception(ec.value(), std::system_category());
+ throw rgw::io::Exception(ec.value(), std::system_category());
}
return bytes;
}
return bytes;
}
-int RGWAsioClientIO::complete_request()
+size_t RGWAsioClientIO::complete_request()
{
return 0;
}
~RGWAsioClientIO();
void init_env(CephContext *cct) override;
- int complete_request() override;
+ size_t complete_request() override;
void flush() override;
size_t send_status(int status, const char *status_name) override;
size_t send_100_continue() override;
const int ret = mg_write(conn, buf, len);
if (ret == 0) {
/* didn't send anything, error out */
- throw rgw::io::RestfulClient::Exception(EIO, std::system_category());
+ throw rgw::io::Exception(EIO, std::system_category());
} else if (ret < 0) {
- throw rgw::io::RestfulClient::Exception(-ret, std::system_category());
+ throw rgw::io::Exception(-ret, std::system_category());
}
return ret;
}
{
const int ret = mg_read(conn, buf, len);
if (ret < 0) {
- throw rgw::io::RestfulClient::Exception(-ret, std::system_category());
+ throw rgw::io::Exception(-ret, std::system_category());
}
return ret;
}
{
}
-int RGWCivetWeb::complete_request()
+size_t RGWCivetWeb::complete_request()
{
return 0;
}
const int ret = mg_printf(std::forward<Args>(args)...);
if (ret == 0) {
/* didn't send anything, error out */
- throw rgw::io::RestfulClient::Exception(EIO, std::system_category());
+ throw rgw::io::Exception(EIO, std::system_category());
} else if (ret < 0) {
- throw rgw::io::RestfulClient::Exception(-ret, std::system_category());
+ throw rgw::io::Exception(-ret, std::system_category());
}
return static_cast<size_t>(ret);
}
return write_data(buf, len);
}
- int complete_request() override;
+ size_t complete_request() override;
void flush() override;
calc_hash_sha256_update_stream(sha256_hash, buf, sent);
}
return sent;
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
return -e.code().value();
}
}
namespace rgw {
namespace io {
+using Exception = std::system_error;
+
class BasicClient {
protected:
virtual void init_env(CephContext *cct) = 0;
void init(CephContext *cct);
virtual RGWEnv& get_env() noexcept = 0;
- virtual int complete_request() = 0;
+ virtual size_t complete_request() = 0;
}; /* rgw::io::Client */
template<typename T> friend class DecoratedRestfulClient;
public:
- typedef std::system_error Exception;
-
virtual size_t send_status(int status, const char *status_name) = 0;
virtual size_t send_100_continue() = 0;
return get_decoratee().get_env();
}
- int complete_request() override {
+ size_t complete_request() override {
return get_decoratee().complete_request();
}
};
size_t send_chunked_transfer_encoding() override;
size_t complete_header() override;
size_t send_body(const char* buf, size_t len) override;
- int complete_request() override;
+ size_t complete_request() override;
};
template <typename T>
}
template <typename T>
-int BufferingFilter<T>::complete_request()
+size_t BufferingFilter<T>::complete_request()
{
size_t sent = 0;
}
}
- int complete_request() override {
+ size_t complete_request() override {
size_t sent = 0;
if (chunking_enabled) {
{
const auto ret = FCGX_PutStr(buf, len, fcgx->out);
if (ret < 0) {
- throw rgw::io::RestfulClient::Exception(-ret, std::system_category());
+ throw rgw::io::Exception(-ret, std::system_category());
}
return ret;
}
{
const auto ret = FCGX_GetStr(buf, len, fcgx->in);
if (ret < 0) {
- throw rgw::io::RestfulClient::Exception(-ret, std::system_category());
+ throw rgw::io::Exception(-ret, std::system_category());
}
return ret;
}
return env;
}
- int complete_request() override {
+ size_t complete_request() override {
return 0;
}
};
return env;
}
- int complete_request() override { /* XXX */
+ size_t complete_request() override { /* XXX */
return 0;
};
{
}
-int RGWLoadGenIO::complete_request()
+size_t RGWLoadGenIO::complete_request()
{
return 0;
}
return env;
}
- int complete_request() override;
+ size_t complete_request() override;
};
#endif
goto done;
}
done:
- int r = client_io->complete_request();
- if (r < 0) {
- dout(0) << "ERROR: client_io->complete_request() returned " << r << dendl;
+ try {
+ client_io->complete_request();
+ } catch (rgw::io::Exception& e) {
+ dout(0) << "ERROR: client_io->complete_request() returned "
+ << e.what() << dendl;
}
+
if (should_log) {
rgw_log_op(store, s, (op ? op->name() : "unknown"), olog);
}
s->formatter->set_status(status, status_name);
try {
RESTFUL_IO(s)->send_status(status, status_name);
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: s->cio->send_status() returned err="
<< e.what() << dendl;
}
{
try {
RESTFUL_IO(s)->send_header(name, val);
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: s->cio->send_header() returned err="
<< e.what() << dendl;
}
{
try {
RESTFUL_IO(s)->send_content_length(len);
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: s->cio->send_content_length() returned err="
<< e.what() << dendl;
}
{
try {
RESTFUL_IO(s)->send_chunked_transfer_encoding();
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: RESTFUL_IO(s)->send_chunked_transfer_encoding()"
<< " returned err=" << e.what() << dendl;
}
try {
RESTFUL_IO(s)->complete_header();
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: RESTFUL_IO(s)->complete_header() returned err="
<< e.what() << dendl;
}
{
try {
RESTFUL_IO(s)->send_100_continue();
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
ldout(s->cct, 0) << "ERROR: RESTFUL_IO(s)->send_100_continue() returned err="
<< e.what() << dendl;
}
{
try {
return RESTFUL_IO(s)->send_body(buf, len);
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
return -e.code().value();
}
}
{
try {
return AWS_AUTHv4_IO(s)->recv_body(buf, max, s->aws4_auth_needs_complete);
- } catch (rgw::io::RestfulClient::Exception& e) {
+ } catch (rgw::io::Exception& e) {
return -e.code().value();
}
}