Skip to content

Commit 1d95adc

Browse files
diachenko-mischamykhailo-kuchma
authored andcommitted
Add GetPartitions with CancellableFuture in VersionedLayerClient
Add the GetPartitions method which returns CancellableFuture in the dataservice-read VersionedLayerClient class. Also, added integration tests. Relates-To: OLPEDGE-958 Signed-off-by: Diachenko Mykahilo <[email protected]>
1 parent 99821c8 commit 1d95adc

File tree

5 files changed

+80
-0
lines changed

5 files changed

+80
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,20 @@ class DATASERVICE_READ_API VersionedLayerClient final {
149149
client::CancellationToken GetPartitions(PartitionsRequest partitions_request,
150150
PartitionsResponseCallback callback);
151151

152+
/**
153+
* @brief Fetches a list of partitions for the given generic layer
154+
* asynchronously.
155+
* @param partitions_request Contains the complete set of the request
156+
* parameters.
157+
* @note GetLayerId value of the \c PartitionsRequest is ignored, and the
158+
* parameter from the constructor is used instead.
159+
* @return \c CancellableFuture of type \c PartitionsResponse, which when
160+
* complete will contain the data or an error. Alternatively, the
161+
* \c CancellableFuture can be used to cancel this request.
162+
*/
163+
client::CancellableFuture<PartitionsResponse> GetPartitions(
164+
PartitionsRequest partitions_request);
165+
152166
/**
153167
* @brief Pre-fetches a set of tiles asychronously.
154168
*

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ client::CancellationToken VersionedLayerClient::GetPartitions(
5050
std::move(callback));
5151
}
5252

53+
client::CancellableFuture<PartitionsResponse>
54+
VersionedLayerClient::GetPartitions(PartitionsRequest partitions_request) {
55+
return impl_->GetPartitions(std::move(partitions_request));
56+
}
57+
5358
client::CancellationToken VersionedLayerClient::PrefetchTiles(
5459
PrefetchTilesRequest request, PrefetchTilesResponseCallback callback) {
5560
return impl_->PrefetchTiles(std::move(request), std::move(callback));

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,17 @@ client::CancellationToken VersionedLayerClientImpl::GetPartitions(
106106
return token;
107107
}
108108

109+
client::CancellableFuture<PartitionsResponse>
110+
VersionedLayerClientImpl::GetPartitions(PartitionsRequest partitions_request) {
111+
auto promise = std::make_shared<std::promise<PartitionsResponse>>();
112+
auto cancel_token = GetPartitions(std::move(partitions_request),
113+
[promise](PartitionsResponse response) {
114+
promise->set_value(std::move(response));
115+
});
116+
return client::CancellableFuture<PartitionsResponse>(std::move(cancel_token),
117+
std::move(promise));
118+
}
119+
109120
client::CancellationToken VersionedLayerClientImpl::GetData(
110121
DataRequest request, DataResponseCallback callback) {
111122
auto add_task = [&](DataRequest& request, DataResponseCallback callback) {

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@ class VersionedLayerClientImpl {
6262
PartitionsRequest partitions_request,
6363
PartitionsResponseCallback callback);
6464

65+
virtual client::CancellableFuture<PartitionsResponse> GetPartitions(
66+
PartitionsRequest partitions_request);
67+
6568
virtual client::CancellationToken PrefetchTiles(
6669
PrefetchTilesRequest request, PrefetchTilesResponseCallback callback);
6770

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

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -931,6 +931,53 @@ TEST_F(DataserviceReadVersionedLayerClientTest, GetPartitionsNoError) {
931931
ASSERT_EQ(4u, response.GetResult().GetPartitions().size());
932932
}
933933

934+
TEST_F(DataserviceReadVersionedLayerClientTest,
935+
GetPartitionsCancellableFutureNoError) {
936+
auto catalog = olp::client::HRN::FromString(
937+
GetArgument("dataservice_read_test_catalog"));
938+
auto layer = GetArgument("dataservice_read_test_layer");
939+
940+
auto catalog_client =
941+
std::make_unique<olp::dataservice::read::VersionedLayerClient>(
942+
catalog, layer, *settings_);
943+
944+
auto request = olp::dataservice::read::PartitionsRequest();
945+
auto cancellable_future = catalog_client->GetPartitions(request);
946+
auto future = cancellable_future.GetFuture();
947+
ASSERT_NE(future.wait_for(kWaitTimeout), std::future_status::timeout);
948+
PartitionsResponse response = future.get();
949+
950+
ASSERT_TRUE(response.IsSuccessful()) << response.GetError().GetMessage();
951+
ASSERT_EQ(4u, response.GetResult().GetPartitions().size());
952+
}
953+
954+
TEST_F(DataserviceReadVersionedLayerClientTest,
955+
GetPartitionsCancellableFutureCancellation) {
956+
auto catalog = olp::client::HRN::FromString(
957+
GetArgument("dataservice_read_test_catalog"));
958+
auto layer = GetArgument("dataservice_read_test_layer");
959+
960+
settings_->task_scheduler->ScheduleTask(
961+
[]() { std::this_thread::sleep_for(std::chrono::seconds(1)); });
962+
963+
auto catalog_client =
964+
std::make_unique<olp::dataservice::read::VersionedLayerClient>(
965+
catalog, layer, *settings_);
966+
967+
auto request = olp::dataservice::read::PartitionsRequest();
968+
auto cancellable_future = catalog_client->GetPartitions(request);
969+
auto future = cancellable_future.GetFuture();
970+
971+
cancellable_future.GetCancellationToken().cancel();
972+
973+
ASSERT_EQ(std::future_status::ready, future.wait_for(kWaitTimeout));
974+
975+
auto response = future.get();
976+
EXPECT_FALSE(response.IsSuccessful());
977+
EXPECT_EQ(response.GetError().GetErrorCode(),
978+
olp::client::ErrorCode::Cancelled);
979+
}
980+
934981
TEST_F(DataserviceReadVersionedLayerClientTest, GetEmptyPartitions) {
935982
auto catalog = olp::client::HRN::FromString(
936983
GetArgument("dataservice_read_test_catalog"));

0 commit comments

Comments
 (0)