Skip to content

Commit 041207c

Browse files
Add CancelPendingRequests in VersionedLayerClient
Add Add CancelPendingRequests in VersionedLayerClient and provide it implementation. Enable test DataserviceReadVersionedLayerClientTest.CancelPendingRequestsPartitions. Resolves: OLPEDGE-1093 Signed-off-by: Diachenko Mykahilo <[email protected]>
1 parent 3d4e98d commit 041207c

File tree

5 files changed

+29
-44
lines changed

5 files changed

+29
-44
lines changed

olp-cpp-sdk-dataservice-read/include/olp/dataservice/read/VersionedLayerClient.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ class DATASERVICE_READ_API VersionedLayerClient final {
106106

107107
~VersionedLayerClient();
108108

109+
/**
110+
* @brief Cancels all active and pending requests.
111+
* @return True on success.
112+
*/
113+
bool CancelPendingRequests();
114+
109115
/**
110116
* @brief Fetches data for a partition ID or data handle asynchronously.
111117
*

olp-cpp-sdk-dataservice-read/src/VersionedLayerClient.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,10 @@ VersionedLayerClient& VersionedLayerClient::operator=(
4040

4141
VersionedLayerClient::~VersionedLayerClient() = default;
4242

43+
bool VersionedLayerClient::CancelPendingRequests() {
44+
return impl_->CancelPendingRequests();
45+
}
46+
4347
client::CancellationToken VersionedLayerClient::GetData(
4448
DataRequest data_request, DataResponseCallback callback) {
4549
return impl_->GetData(std::move(data_request), std::move(callback));

olp-cpp-sdk-dataservice-read/src/VersionedLayerClientImpl.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ namespace olp {
3939
namespace dataservice {
4040
namespace read {
4141

42+
namespace {
43+
constexpr auto kLogTag = "VersionedLayerClientImpl";
44+
} // namespace
45+
4246
VersionedLayerClientImpl::VersionedLayerClientImpl(
4347
client::HRN catalog, std::string layer_id,
4448
client::OlpClientSettings settings)
@@ -80,6 +84,11 @@ VersionedLayerClientImpl::~VersionedLayerClientImpl() {
8084
pending_requests_->CancelAllAndWait();
8185
}
8286

87+
bool VersionedLayerClientImpl::CancelPendingRequests() {
88+
OLP_SDK_LOG_TRACE(kLogTag, "CancelPendingRequests");
89+
return pending_requests_->CancelAll();
90+
}
91+
8392
client::CancellationToken VersionedLayerClientImpl::GetPartitions(
8493
PartitionsRequest request, PartitionsResponseCallback callback) {
8594
auto schedule_get_partitions = [&](PartitionsRequest request,

olp-cpp-sdk-dataservice-read/src/VersionedLayerClientImpl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class VersionedLayerClientImpl {
5151

5252
virtual ~VersionedLayerClientImpl();
5353

54+
virtual bool CancelPendingRequests();
55+
5456
virtual client::CancellationToken GetData(DataRequest data_request,
5557
DataResponseCallback callback);
5658

tests/integration/olp-cpp-sdk-dataservice-read/VersionedLayerClientTest.cpp

Lines changed: 8 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2033,48 +2033,25 @@ TEST_F(DataserviceReadVersionedLayerClientTest, GetDataCacheWithUpdate) {
20332033
}
20342034

20352035
TEST_F(DataserviceReadVersionedLayerClientTest,
2036-
DISABLED_CancelPendingRequestsPartitions) {
2036+
CancelPendingRequestsPartitions) {
20372037
olp::client::HRN hrn(GetTestCatalog());
2038-
testing::InSequence s;
2039-
std::vector<std::shared_ptr<std::promise<void>>> waits;
2040-
std::vector<std::shared_ptr<std::promise<void>>> pauses;
20412038

20422039
auto client =
20432040
std::make_unique<VersionedLayerClient>(hrn, "testlayer", *settings_);
20442041
auto partitions_request = PartitionsRequest().WithFetchOption(OnlineOnly);
20452042
auto data_request =
20462043
DataRequest().WithPartitionId("269").WithFetchOption(OnlineOnly);
20472044

2048-
// Make a few requests
2049-
auto wait_for_cancel1 = std::make_shared<std::promise<void>>();
2050-
auto pause_for_cancel1 = std::make_shared<std::promise<void>>();
2051-
auto wait_for_cancel2 = std::make_shared<std::promise<void>>();
2052-
auto pause_for_cancel2 = std::make_shared<std::promise<void>>();
2045+
auto request_started = std::make_shared<std::promise<void>>();
2046+
auto continue_request = std::make_shared<std::promise<void>>();
20532047

20542048
{
20552049
olp::http::RequestId request_id;
20562050
NetworkCallback send_mock;
20572051
CancelCallback cancel_mock;
20582052

20592053
std::tie(request_id, send_mock, cancel_mock) = GenerateNetworkMockActions(
2060-
wait_for_cancel1, pause_for_cancel1,
2061-
{olp::http::HttpStatusCode::OK, HTTP_RESPONSE_LAYER_VERSIONS});
2062-
2063-
EXPECT_CALL(*network_mock_,
2064-
Send(IsGetRequest(URL_LAYER_VERSIONS), _, _, _, _))
2065-
.Times(1)
2066-
.WillOnce(testing::Invoke(std::move(send_mock)));
2067-
2068-
EXPECT_CALL(*network_mock_, Cancel(request_id))
2069-
.WillOnce(testing::Invoke(std::move(cancel_mock)));
2070-
}
2071-
{
2072-
olp::http::RequestId request_id;
2073-
NetworkCallback send_mock;
2074-
CancelCallback cancel_mock;
2075-
2076-
std::tie(request_id, send_mock, cancel_mock) = GenerateNetworkMockActions(
2077-
wait_for_cancel2, pause_for_cancel2,
2054+
request_started, continue_request,
20782055
{olp::http::HttpStatusCode::OK, HTTP_RESPONSE_BLOB_DATA_269});
20792056

20802057
EXPECT_CALL(*network_mock_,
@@ -2086,26 +2063,13 @@ TEST_F(DataserviceReadVersionedLayerClientTest,
20862063
.WillOnce(testing::Invoke(std::move(cancel_mock)));
20872064
}
20882065

2089-
waits.push_back(wait_for_cancel1);
2090-
pauses.push_back(pause_for_cancel1);
2066+
auto data_future = client->GetData(data_request);
20912067
auto partitions_future = client->GetPartitions(partitions_request);
20922068

2093-
waits.push_back(wait_for_cancel2);
2094-
pauses.push_back(pause_for_cancel2);
2095-
auto data_future = client->GetData(data_request);
2096-
std::cout << "waiting" << std::endl;
2097-
for (auto wait : waits) {
2098-
wait->get_future().get();
2099-
}
2100-
std::cout << "done waitingg" << std::endl;
2101-
// Cancel them all
2102-
client.reset();
2103-
std::cout << "done cancelling" << std::endl;
2104-
for (auto pause : pauses) {
2105-
pause->set_value();
2106-
}
2069+
request_started->get_future().get();
2070+
client->CancelPendingRequests();
2071+
continue_request->set_value();
21072072

2108-
// Verify they are all cancelled
21092073
PartitionsResponse partitions_response = partitions_future.GetFuture().get();
21102074

21112075
ASSERT_FALSE(partitions_response.IsSuccessful())

0 commit comments

Comments
 (0)