Skip to content

Commit 20f092c

Browse files
authored
Refactored operation id and added support of old jwt-cpp (#287)
1 parent d47c399 commit 20f092c

File tree

15 files changed

+141
-178
lines changed

15 files changed

+141
-178
lines changed

cmake/protos_public_headers.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,4 @@ src/api/protos/ydb_export.pb.h
2020
src/api/protos/ydb_coordination.pb.h
2121
src/api/protos/ydb_status_codes.pb.h
2222
src/api/protos/draft/ydb_replication.pb.h
23-
src/library/operation_id/protos/operation_id.pb.h
2423
src/library/yql/public/issue/protos/issue_severity.pb.h

include/ydb-cpp-sdk/client/types/credentials/oauth2_token_exchange/jwt_token_source.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,11 @@ struct TJwtTokenSourceParams {
3434
class ISigningAlgorithm {
3535
public:
3636
virtual ~ISigningAlgorithm() = default;
37+
#ifdef YDB_SDK_USE_NEW_JWT
3738
virtual std::string sign(const std::string& data, std::error_code& ec) const = 0;
39+
#else
40+
virtual std::string sign(const std::string& data) const = 0;
41+
#endif
3842
virtual std::string name() const = 0;
3943
};
4044

@@ -48,9 +52,15 @@ struct TJwtTokenSourceParams {
4852
{
4953
}
5054

55+
#ifdef YDB_SDK_USE_NEW_JWT
5156
std::string sign(const std::string& data, std::error_code& ec) const override {
5257
return Alg.sign(data, ec);
5358
}
59+
#else
60+
std::string sign(const std::string& data) const override {
61+
return Alg.sign(data);
62+
}
63+
#endif
5464

5565
std::string name() const override {
5666
return Alg.name();

include/ydb-cpp-sdk/library/operation_id/operation_id.h

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,61 @@
11
#pragma once
22

3-
#include <src/library/operation_id/protos/operation_id.pb.h>
4-
3+
#include <memory>
54
#include <string>
65
#include <vector>
6+
#include <unordered_map>
77

88
namespace NKikimr {
99
namespace NOperationId {
1010

1111
class TOperationId {
12+
static constexpr int kEKindMinValue = 0;
13+
static constexpr int kEKindMaxValue = 10;
1214
public:
15+
enum EKind : int {
16+
UNUSED = 0,
17+
OPERATION_DDL = 1,
18+
OPERATION_DML = 2,
19+
SESSION_YQL = 3,
20+
PREPARED_QUERY_ID = 4,
21+
CMS_REQUEST = 5,
22+
EXPORT = 6,
23+
BUILD_INDEX = 7,
24+
IMPORT = 8,
25+
SCRIPT_EXECUTION = 9,
26+
SS_BG_TASKS = 10,
27+
};
28+
29+
struct TData {
30+
std::string Key;
31+
std::string Value;
32+
};
33+
34+
using TDataList = std::vector<std::unique_ptr<TData>>;
35+
1336
TOperationId();
1437
explicit TOperationId(const std::string& string, bool allowEmpty = false);
38+
EKind GetKind() const;
39+
EKind& GetMutableKind();
40+
41+
const TDataList& GetData() const;
42+
TDataList& GetMutableData();
43+
1544
const std::vector<const std::string*>& GetValue(const std::string& key) const;
1645
std::string GetSubKind() const;
17-
const Ydb::TOperationId& GetProto() const;
46+
std::string ToString() const;
1847

1948
private:
20-
Ydb::TOperationId Proto_;
21-
std::unordered_map<std::string, std::vector<const std::string*>> Index_;
49+
bool IsValidKind(int kind);
50+
51+
EKind Kind;
52+
TDataList Data;
53+
std::unordered_map<std::string, std::vector<const std::string*>> Index;
2254
};
2355

24-
std::string ProtoToString(const Ydb::TOperationId& proto);
25-
void AddOptionalValue(Ydb::TOperationId& proto, const std::string& key, const std::string& value);
26-
void AddOptionalValue(Ydb::TOperationId& proto, const std::string& key, const char* value, size_t size);
27-
Ydb::TOperationId::EKind ParseKind(const std::string_view value);
56+
void AddOptionalValue(TOperationId& operarionId, const std::string& key, const std::string& value);
57+
void AddOptionalValue(TOperationId& operarionId, const std::string& key, const char* value, size_t size);
58+
TOperationId::EKind ParseKind(const std::string_view value);
2859

2960
std::string FormatPreparedQueryIdCompat(const std::string& str);
3061
bool DecodePreparedQueryIdCompat(const std::string& in, std::string& out);

src/client/impl/ydb_internal/kqp_session_common/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ _ydb_sdk_add_library(impl-ydb_internal-kqp_session_common)
33
target_link_libraries(impl-ydb_internal-kqp_session_common PUBLIC
44
yutil
55
threading-future
6-
lib-operation_id-protos
76
client-impl-ydb_endpoints
87
)
98

src/client/operation/operation.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,21 +134,21 @@ TOperationClient::TOperationClient(const TDriver& driver, const TCommonClientSet
134134
template <typename TOp>
135135
TFuture<TOp> TOperationClient::Get(const TOperation::TOperationId& id) {
136136
auto request = MakeRequest<GetOperationRequest>();
137-
request.set_id(NKikimr::NOperationId::ProtoToString(id.GetProto()));
137+
request.set_id(id.ToString());
138138

139139
return Impl_->Get<TOp>(std::move(request));
140140
}
141141

142142
TAsyncStatus TOperationClient::Cancel(const TOperation::TOperationId& id) {
143143
auto request = MakeRequest<CancelOperationRequest>();
144-
request.set_id(NKikimr::NOperationId::ProtoToString(id.GetProto()));
144+
request.set_id(id.ToString());
145145

146146
return Impl_->Cancel(std::move(request));
147147
}
148148

149149
TAsyncStatus TOperationClient::Forget(const TOperation::TOperationId& id) {
150150
auto request = MakeRequest<ForgetOperationRequest>();
151-
request.set_id(NKikimr::NOperationId::ProtoToString(id.GetProto()));
151+
request.set_id(id.ToString());
152152

153153
return Impl_->Forget(std::move(request));
154154
}

src/client/proto/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ target_link_libraries(client-ydb_proto PUBLIC
55
api-grpc
66
api-grpc-draft
77
api-protos
8-
lib-operation_id-protos
98
client-ydb_params
109
client-ydb_value
1110
yql-public-issue-protos

src/client/query/client.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ class TQueryClient::TImpl: public TClientImplCommon<TQueryClient::TImpl>, public
128128

129129
TAsyncFetchScriptResultsResult FetchScriptResults(const NKikimr::NOperationId::TOperationId& operationId, int64_t resultSetIndex, const TFetchScriptResultsSettings& settings) {
130130
auto request = MakeRequest<Ydb::Query::FetchScriptResultsRequest>();
131-
request.set_operation_id(NKikimr::NOperationId::ProtoToString(operationId.GetProto()));
131+
request.set_operation_id(operationId.ToString());
132132
request.set_result_set_index(resultSetIndex);
133133
return FetchScriptResultsImpl(std::move(request), settings);
134134
}

src/client/table/impl/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ target_link_libraries(client-ydb_table-impl
66
threading-future
77
api-protos
88
api-grpc
9-
lib-operation_id-protos
109
client-impl-ydb_endpoints
1110
impl-ydb_internal-session_pool
1211
client-ydb_table-query_stats

src/client/types/credentials/oauth2_token_exchange/CMakeLists.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ target_link_libraries(client-ydb_types-credentials-oauth2 PUBLIC
1313
client-ydb_types
1414
)
1515

16+
target_compile_definitions(client-ydb_types-credentials-oauth2 PUBLIC
17+
YDB_SDK_USE_NEW_JWT
18+
)
19+
1620
target_sources(client-ydb_types-credentials-oauth2 PRIVATE
1721
credentials.cpp
1822
jwt_token_source.cpp

src/client/types/credentials/oauth2_token_exchange/jwt_token_source.cpp

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
namespace NYdb {
1010

11+
#ifdef YDB_SDK_USE_NEW_JWT
12+
using TJwtCppStorage = std::vector<picojson::value>;
13+
#else
14+
using TJwtCppStorage = std::set<std::string>;
15+
#endif
16+
1117
static const std::string TOKEN_TYPE = "urn:ietf:params:oauth:token-type:jwt";
1218

1319
class TJwtTokenSource: public ITokenSource {
@@ -61,7 +67,7 @@ class TJwtTokenSource: public ITokenSource {
6167
if (Params.Audience_.size() == 1) {
6268
tokenBuilder.set_audience(Params.Audience_[0]);
6369
} else if (Params.Audience_.size() > 1) {
64-
std::vector<picojson::value> aud(Params.Audience_.begin(), Params.Audience_.end());
70+
TJwtCppStorage aud(Params.Audience_.begin(), Params.Audience_.end());
6571
tokenBuilder.set_audience(aud);
6672
}
6773

src/library/operation_id/CMakeLists.txt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
1-
add_subdirectory(protos)
2-
31
_ydb_sdk_add_library(library-operation_id)
42

5-
target_link_libraries(library-operation_id PUBLIC
6-
yutil
7-
protobuf::libprotobuf
8-
cgiparam
9-
uri
10-
lib-operation_id-protos
3+
target_link_libraries(library-operation_id
4+
PRIVATE
5+
yutil
6+
cgiparam
7+
uri
118
)
129

1310
target_sources(library-operation_id PRIVATE

0 commit comments

Comments
 (0)