From d5ade2d2032d7bb0c17c92e957c2a4f6e77af2ee Mon Sep 17 00:00:00 2001
From: P Dheeraj Srujan Kumar
Date: Mon, 6 Dec 2021 19:49:01 +0000
Subject: [PATCH] Add unmerged changes for http retry support
The http retry support added upstream as a single patch was slpit into
3 patches, but only 2 of them was merged.
This commit pulls in the differentail changes required to complete the
entire http retry support. and also allow for other subsequent patches
to be appplied easily.
Change-Id: I43e68eeffb8d69c289dd306c1c7cafc87ad766a0
Signed-off-by: P Dheeraj Srujan Kumar
---
http/http_client.hpp | 32 ++++++++++++++++---
.../include/event_service_manager.hpp | 26 +++++++++------
redfish-core/lib/event_service.hpp | 1 +
3 files changed, 45 insertions(+), 14 deletions(-)
diff --git a/http/http_client.hpp b/http/http_client.hpp
index 5f352d3..f0152db 100644
--- a/http/http_client.hpp
+++ b/http/http_client.hpp
@@ -188,6 +188,17 @@ class HttpClient : public std::enable_shared_from_this
BMCWEB_LOG_DEBUG << "recvMessage() data: "
<< self->parser->get();
+ // Check if the response and header are received
+ if (!self->parser->is_done())
+ {
+ // The parser failed to receive the response
+ BMCWEB_LOG_ERROR
+ << "recvMessage() parser failed to receive response";
+ self->state = ConnState::recvFailed;
+ self->handleConnState();
+ return;
+ }
+
unsigned int respCode = self->parser->get().result_int();
BMCWEB_LOG_DEBUG << "recvMessage() Header Response Code: "
<< respCode;
@@ -379,15 +390,17 @@ class HttpClient : public std::enable_shared_from_this
public:
explicit HttpClient(boost::asio::io_context& ioc, const std::string& id,
const std::string& destIP, const std::string& destPort,
- const std::string& destUri,
- const boost::beast::http::fields& httpHeader) :
+ const std::string& destUri) :
conn(ioc),
- timer(ioc),
- req(boost::beast::http::verb::post, destUri, 11, "", httpHeader),
- subId(id), host(destIP), port(destPort)
+ timer(ioc), req(boost::beast::http::verb::post, destUri, 11), subId(id),
+ host(destIP), port(destPort)
{
+ // Set the request header
req.set(boost::beast::http::field::host, host);
+ req.set(boost::beast::http::field::content_type, "application/json");
req.keep_alive(true);
+
+ requestDataQueue.set_capacity(maxRequestQueueSize);
}
void sendData(const std::string& data)
@@ -408,6 +421,15 @@ class HttpClient : public std::enable_shared_from_this
}
}
+ void setHeaders(const boost::beast::http::fields& httpHeaders)
+ {
+ // Set custom headers
+ for (const auto& header : httpHeaders)
+ {
+ req.set(header.name(), header.value());
+ }
+ }
+
void setRetryConfig(const uint32_t retryAttempts,
const uint32_t retryTimeoutInterval)
{
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index e879f9e..75380dc 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -370,7 +370,10 @@ class Subscription : public persistent_data::UserSubscription
eventSeqNum(1),
host(inHost), port(inPort), path(inPath), uriProto(inUriProto)
{
- // Subscription constructor
+ // create the HttpClient connection
+ conn = std::make_shared(
+ crow::connections::systemBus->get_io_context(), id, host, port,
+ path);
}
Subscription(const std::shared_ptr& adaptor) :
@@ -391,17 +394,12 @@ class Subscription : public persistent_data::UserSubscription
return false;
}
- if (conn == nullptr)
+ if (conn != nullptr)
{
- // create the HttpClient connection
- conn = std::make_shared(
- crow::connections::systemBus->get_io_context(), id, host, port,
- path, httpHeaders);
+ conn->sendData(msg);
+ eventSeqNum++;
}
- conn->sendData(msg);
- eventSeqNum++;
-
if (sseConn != nullptr)
{
sseConn->sendData(eventSeqNum, msg);
@@ -548,6 +546,14 @@ class Subscription : public persistent_data::UserSubscription
}
}
+ void updatehttpHeaders()
+ {
+ if (conn != nullptr)
+ {
+ conn->setHeaders(httpHeaders);
+ }
+ }
+
uint64_t getEventSeqNum() const
{
return eventSeqNum;
@@ -661,6 +667,7 @@ class EventServiceManager
// Update retry configuration.
subValue->updateRetryConfig(retryAttempts, retryTimeoutInterval);
subValue->updateRetryPolicy();
+ subValue->updatehttpHeaders();
}
}
@@ -915,6 +922,7 @@ class EventServiceManager
// Update retry configuration.
subValue->updateRetryConfig(retryAttempts, retryTimeoutInterval);
subValue->updateRetryPolicy();
+ subValue->updatehttpHeaders();
return id;
}
diff --git a/redfish-core/lib/event_service.hpp b/redfish-core/lib/event_service.hpp
index 9ce2f05..0903874 100644
--- a/redfish-core/lib/event_service.hpp
+++ b/redfish-core/lib/event_service.hpp
@@ -619,6 +619,7 @@ inline void requestRoutesEventDestination(App& app)
}
}
subValue->httpHeaders = fields;
+ subValue->updatehttpHeaders();
}
if (retryPolicy)
--
2.17.1