Skip to content

Commit fd22c7e

Browse files
LOGBROKER 8891 fix parsing queue url (#8203)
1 parent 3946c78 commit fd22c7e

File tree

4 files changed

+48
-30
lines changed

4 files changed

+48
-30
lines changed

ydb/core/ymq/base/utils.h

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
#pragma once
2+
3+
#include <util/generic/string.h>
4+
#include <util/string/split.h>
5+
6+
constexpr TStringBuf PRIVATE_REQUEST_PATH_PREFIX = "/private";
7+
8+
namespace NKikimr::NSQS {
9+
static inline bool IsPrivateRequest(const TStringBuf& path) {
10+
return path.StartsWith(PRIVATE_REQUEST_PATH_PREFIX);
11+
}
12+
13+
static inline TString GetRequestPathPart(TStringBuf path, size_t partIdx, bool isPrivateRequest) {
14+
if (isPrivateRequest) {
15+
path.SkipPrefix(PRIVATE_REQUEST_PATH_PREFIX);
16+
}
17+
18+
TVector<TStringBuf> items;
19+
StringSplitter(path).Split('/').AddTo(&items);
20+
if (items.size() > partIdx) {
21+
return TString(items[partIdx]);
22+
}
23+
return TString();
24+
}
25+
26+
static inline TString ExtractQueueNameFromPath(const TStringBuf path, bool isPrivateRequest) {
27+
return GetRequestPathPart(path, 2, isPrivateRequest);
28+
}
29+
30+
static inline TString ExtractAccountNameFromPath(const TStringBuf path, bool isPrivateRequest) {
31+
return GetRequestPathPart(path, 1, isPrivateRequest);
32+
}
33+
}

ydb/core/ymq/http/http.cpp

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include <ydb/core/ymq/base/helpers.h>
1212
#include <ydb/core/ymq/base/limits.h>
1313
#include <ydb/core/ymq/base/secure_protobuf_printer.h>
14+
#include <ydb/core/ymq/base/utils.h>
1415

1516
#include <ydb/library/actors/core/actorsystem.h>
1617
#include <ydb/library/actors/core/log.h>
@@ -48,8 +49,6 @@ const std::vector<TStringBuf> PRIVATE_TOKENS_HEADERS = {
4849

4950
const TString CREDENTIAL_PARAM = "credential";
5051

51-
constexpr TStringBuf PRIVATE_REQUEST_PATH_PREFIX = "/private";
52-
5352
const TSet<TString> ModifyPermissionsActions = {"GrantPermissions", "RevokePermissions", "SetPermissions"};
5453

5554
bool IsPrivateTokenHeader(TStringBuf headerName) {
@@ -264,26 +263,9 @@ bool THttpRequest::DoReply(const TReplyParams& p) {
264263
}
265264
}
266265

267-
TString THttpRequest::GetRequestPathPart(TStringBuf path, size_t partIdx) const {
268-
if (IsPrivateRequest_) {
269-
path.SkipPrefix(PRIVATE_REQUEST_PATH_PREFIX);
270-
}
271-
272-
TVector<TStringBuf> items;
273-
StringSplitter(path).Split('/').AddTo(&items);
274-
if (items.size() > partIdx) {
275-
return TString(items[partIdx]);
276-
}
277-
return TString();
278-
}
279-
280266
TString THttpRequest::ExtractQueueNameFromPath(const TStringBuf path) {
281-
return GetRequestPathPart(path, 2);
282-
}
283-
284-
TString THttpRequest::ExtractAccountNameFromPath(const TStringBuf path) {
285-
return GetRequestPathPart(path, 1);
286-
}
267+
return NKikimr::NSQS::ExtractQueueNameFromPath(path, IsPrivateRequest_);
268+
};
287269

288270
void THttpRequest::ExtractQueueAndAccountNames(const TStringBuf path) {
289271
if (Action_ == EAction::ModifyPermissions)
@@ -296,9 +278,11 @@ void THttpRequest::ExtractQueueAndAccountNames(const TStringBuf path) {
296278

297279
QueueName_ = *QueryParams_.QueueName;
298280
} else {
299-
const auto pathAndQuery = QueryParams_.QueueUrl ? GetPathAndQuery(*QueryParams_.QueueUrl) : GetPathAndQuery(path);
281+
const auto pathAndQuery = QueryParams_.QueueUrl
282+
? GetPathAndQuery(*QueryParams_.QueueUrl)
283+
: GetPathAndQuery(path);
300284
QueueName_ = ExtractQueueNameFromPath(pathAndQuery);
301-
AccountName_ = ExtractAccountNameFromPath(pathAndQuery);
285+
AccountName_ = NKikimr::NSQS::ExtractAccountNameFromPath(pathAndQuery, IsPrivateRequest_);
302286

303287
if (IsProxyAction(Action_)) {
304288
if (QueryParams_.QueueUrl && *QueryParams_.QueueUrl) {
@@ -381,9 +365,7 @@ void THttpRequest::ParseCgiParameters(const TCgiParameters& params) {
381365
}
382366

383367
void THttpRequest::ParsePrivateRequestPathPrefix(const TStringBuf& path) {
384-
if (path.StartsWith(PRIVATE_REQUEST_PATH_PREFIX)) {
385-
IsPrivateRequest_ = true;
386-
}
368+
IsPrivateRequest_ = NKikimr::NSQS::IsPrivateRequest(path);
387369
}
388370

389371
ui64 THttpRequest::CalculateRequestSizeInBytes(const THttpInput& input, const ui64 contentLength) const {

ydb/core/ymq/http/http.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ class THttpRequest : public TRequestReplier {
5656

5757
TString GetRequestPathPart(TStringBuf path, size_t partIdx) const;
5858
TString ExtractQueueNameFromPath(const TStringBuf path);
59-
TString ExtractAccountNameFromPath(const TStringBuf path);
6059

6160
ui64 CalculateRequestSizeInBytes(const THttpInput& input, const ui64 contentLength) const;
6261
void ExtractQueueAndAccountNames(const TStringBuf path);

ydb/services/ymq/utils.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <util/generic/string.h>
44
#include <util/generic/maybe.h>
55
#include <util/string/split.h>
6+
#include <ydb/core/ymq/base/utils.h>
67

78
namespace NKikimr::NYmq {
89
inline static TMaybe<std::pair<TString, TString>> CloudIdAndResourceIdFromQueueUrl(const TString& queueUrl) {
@@ -13,10 +14,13 @@ namespace NKikimr::NYmq {
1314

1415
auto restOfUrl = queueUrl.substr(protocolSeparator + 3);
1516
auto parts = StringSplitter(restOfUrl).Split('/').ToList<TString>();
16-
if (parts.size() != 4) {
17+
if (parts.size() < 3) {
1718
return Nothing();
1819
}
1920

20-
return std::pair<TString, TString>(parts[1], parts[2]);
21+
bool isPrivateRequest = NKikimr::NSQS::IsPrivateRequest(restOfUrl);
22+
TString queueName = NKikimr::NSQS::ExtractQueueNameFromPath(restOfUrl, isPrivateRequest);
23+
TString accountName = NKikimr::NSQS::ExtractAccountNameFromPath(restOfUrl, isPrivateRequest);
24+
return std::pair<TString, TString>(std::move(accountName), std::move(queueName));
2125
}
22-
}
26+
}

0 commit comments

Comments
 (0)