Skip to content

Commit 7ffbb74

Browse files
committed
Added Ru return in GetConsumedRu method with streaming calls in C++ SDK (#15095)
1 parent 3cef499 commit 7ffbb74

File tree

5 files changed

+26
-10
lines changed

5 files changed

+26
-10
lines changed

src/client/impl/ydb_internal/grpc_connections/grpc_connections.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,6 @@ class TGRpcConnectionsImpl
459459
}
460460
};
461461
processor->AddFinishedCallback(std::move(finishedCallback));
462-
// TODO: Add headers for streaming calls.
463462
TPlainStatus status(std::move(grpcStatus), endpoint.GetEndpoint(), {});
464463
responseCb(std::move(status), std::move(processor));
465464
} else {
@@ -468,7 +467,6 @@ class TGRpcConnectionsImpl
468467
if (grpcStatus.GRpcStatusCode != grpc::StatusCode::CANCELLED) {
469468
dbState->EndpointPool.BanEndpoint(endpoint.GetEndpoint());
470469
}
471-
// TODO: Add headers for streaming calls.
472470
TPlainStatus status(std::move(grpcStatus), endpoint.GetEndpoint(), {});
473471
responseCb(std::move(status), nullptr);
474472
}
@@ -560,7 +558,6 @@ class TGRpcConnectionsImpl
560558
}
561559
};
562560
processor->AddFinishedCallback(std::move(finishedCallback));
563-
// TODO: Add headers for streaming calls.
564561
TPlainStatus status(std::move(grpcStatus), endpoint.GetEndpoint(), {});
565562
connectedCallback(std::move(status), std::move(processor));
566563
} else {
@@ -569,7 +566,6 @@ class TGRpcConnectionsImpl
569566
if (grpcStatus.GRpcStatusCode != grpc::StatusCode::CANCELLED) {
570567
dbState->EndpointPool.BanEndpoint(endpoint.GetEndpoint());
571568
}
572-
// TODO: Add headers for streaming calls.
573569
TPlainStatus status(std::move(grpcStatus), endpoint.GetEndpoint(), {});
574570
connectedCallback(std::move(status), nullptr);
575571
}

src/client/impl/ydb_internal/plain_status/status.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#define INCLUDE_YDB_INTERNAL_H
22
#include "status.h"
33

4+
#include <ydb-cpp-sdk/client/resources/ydb_resources.h>
5+
46
#include <util/string/builder.h>
57

68
namespace NYdb::inline V3 {
@@ -62,10 +64,26 @@ TPlainStatus::TPlainStatus(
6264
std::string(value.begin(), value.end())
6365
);
6466
}
67+
68+
InitCostInfo();
6569
}
6670

6771
TPlainStatus TPlainStatus::Internal(const std::string& message) {
6872
return { EStatus::CLIENT_INTERNAL_ERROR, "Internal client error: " + message };
6973
}
7074

75+
void TPlainStatus::InitCostInfo() {
76+
if (auto metaIt = Metadata.find(YDB_CONSUMED_UNITS_HEADER); metaIt != Metadata.end()) {
77+
try {
78+
CostInfo.set_consumed_units(std::stod(metaIt->second));
79+
} catch (std::exception& e) {
80+
if (Ok()) {
81+
Status = EStatus::CLIENT_INTERNAL_ERROR;
82+
}
83+
84+
Issues.AddIssue(NIssue::TIssue{"Failed to parse CostInfo from Metadata: " + std::string{e.what()}});
85+
}
86+
}
87+
}
88+
7189
} // namespace NYdb

src/client/impl/ydb_internal/plain_status/status.h

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ struct TPlainStatus {
1818
NYdb::NIssue::TIssues Issues;
1919
std::string Endpoint;
2020
std::multimap<std::string, std::string> Metadata;
21-
Ydb::CostInfo ConstInfo;
21+
Ydb::CostInfo CostInfo;
2222

2323
TPlainStatus()
2424
: Status(EStatus::SUCCESS)
@@ -35,7 +35,9 @@ struct TPlainStatus {
3535
, Issues(std::move(issues))
3636
, Endpoint(endpoint)
3737
, Metadata(std::move(metadata))
38-
{ }
38+
{
39+
InitCostInfo();
40+
}
3941

4042
TPlainStatus(EStatus status, const std::string& message)
4143
: Status(status)
@@ -51,7 +53,7 @@ struct TPlainStatus {
5153

5254
template<class T>
5355
void SetCostInfo(T&& costInfo) {
54-
ConstInfo = std::forward<T>(costInfo);
56+
CostInfo = std::forward<T>(costInfo);
5557
}
5658

5759
bool Ok() const {
@@ -73,7 +75,8 @@ struct TPlainStatus {
7375
return ret;
7476
}
7577

76-
78+
private:
79+
void InitCostInfo();
7780
};
7881

7982
} // namespace NYdb

src/client/table/impl/readers.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ TAsyncScanQueryPart TScanQueryPartIterator::TReaderImpl::ReadNext(std::shared_pt
7878
NYdb::NIssue::TIssues issues;
7979
NYdb::NIssue::IssuesFromMessage(self->Response_.issues(), issues);
8080
EStatus clientStatus = static_cast<EStatus>(self->Response_.status());
81-
// TODO: Add headers for streaming calls.
8281
TPlainStatus plainStatus{clientStatus, std::move(issues), self->Endpoint_, {}};
8382
TStatus status{std::move(plainStatus)};
8483
std::optional<TQueryStats> queryStats;

src/client/types/status/status.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ const std::multimap<std::string, std::string>& TStatus::GetResponseMetadata() co
7171
}
7272

7373
float TStatus::GetConsumedRu() const {
74-
return Impl_->Status.ConstInfo.consumed_units();
74+
return Impl_->Status.CostInfo.consumed_units();
7575
}
7676

7777
void TStatus::Out(IOutputStream& out) const {

0 commit comments

Comments
 (0)