Skip to content

Commit e9b5b49

Browse files
SetAttributes request
1 parent 2848978 commit e9b5b49

File tree

8 files changed

+96
-0
lines changed

8 files changed

+96
-0
lines changed

ydb/core/grpc_services/service_ymq.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,6 @@ void DoYmqDeleteMessageRequest(std::unique_ptr<IRequestOpCtx> p, const IFacility
2121
void DoYmqPurgeQueueRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f);
2222
void DoYmqDeleteQueueRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f);
2323
void DoYmqChangeMessageVisibilityRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f);
24+
void DoYmqSetQueueAttributesRequest(std::unique_ptr<IRequestOpCtx> p, const IFacilityProvider& f);
2425
}
2526
}

ydb/core/http_proxy/http_req.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,8 @@ namespace NKikimr::NHttpProxy {
528528
action = NSQS::EAction::DeleteQueue;
529529
} else if (Method == "ChangeMessageVisibility") {
530530
action = NSQS::EAction::ChangeMessageVisibility;
531+
} else if (Method == "SetQueueAttributes") {
532+
action = NSQS::EAction::SetQueueAttributes;
531533
}
532534

533535
requestHolder->SetRequestId(HttpContext.RequestId);
@@ -1063,6 +1065,7 @@ namespace NKikimr::NHttpProxy {
10631065
DECLARE_YMQ_PROCESSOR_QUEUE_KNOWN(PurgeQueue);
10641066
DECLARE_YMQ_PROCESSOR_QUEUE_KNOWN(DeleteQueue);
10651067
DECLARE_YMQ_PROCESSOR_QUEUE_KNOWN(ChangeMessageVisibility);
1068+
DECLARE_YMQ_PROCESSOR_QUEUE_KNOWN(SetQueueAttributes);
10661069
#undef DECLARE_YMQ_PROCESSOR_QUEUE_KNOWN
10671070
}
10681071

ydb/core/http_proxy/ut/http_proxy_ut.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1838,4 +1838,38 @@ Y_UNIT_TEST_SUITE(TestHttpProxy) {
18381838
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
18391839
UNIT_ASSERT_VALUES_EQUAL(GetByPath<TString>(json, "__type"), "AWS.SimpleQueueService.NonExistentQueue");
18401840
}
1841+
1842+
Y_UNIT_TEST_F(TestSetQueueAttributes, THttpProxyTestMock) {
1843+
auto createQueueReq = CreateSqsCreateQueueRequest();
1844+
NJson::TJsonValue attributes;
1845+
attributes["DelaySeconds"] = "1";
1846+
createQueueReq["Attributes"] = attributes;
1847+
1848+
auto res = SendHttpRequest("/Root", "AmazonSQS.CreateQueue", std::move(createQueueReq), FormAuthorizationStr("ru-central1"));
1849+
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, 200);
1850+
NJson::TJsonValue json;
1851+
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &json));
1852+
1853+
TString resultQueueUrl = GetByPath<TString>(json, "QueueUrl");
1854+
1855+
NJson::TJsonValue setQueueAttributes;
1856+
setQueueAttributes["QueueUrl"] = resultQueueUrl;
1857+
attributes = {};
1858+
attributes["DelaySeconds"] = "2";
1859+
setQueueAttributes["Attributes"] = attributes;
1860+
1861+
res = SendHttpRequest("/Root", "AmazonSQS.SetQueueAttributes", std::move(setQueueAttributes), FormAuthorizationStr("ru-central1"));
1862+
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, 200);
1863+
1864+
NJson::TJsonValue getQueueAttributes;
1865+
getQueueAttributes["QueueUrl"] = resultQueueUrl;
1866+
NJson::TJsonArray attributeNames = {"DelaySeconds"};
1867+
getQueueAttributes["AttributeNames"] = attributeNames;
1868+
1869+
res = SendHttpRequest("/Root", "AmazonSQS.GetQueueAttributes", std::move(getQueueAttributes), FormAuthorizationStr("ru-central1"));
1870+
UNIT_ASSERT_VALUES_EQUAL(res.HttpCode, 200);
1871+
NJson::TJsonValue resultJson;
1872+
UNIT_ASSERT(NJson::ReadJsonTree(res.Body, &resultJson));
1873+
UNIT_ASSERT_VALUES_EQUAL(resultJson["Attributes"]["DelaySeconds"], "2");
1874+
}
18411875
} // Y_UNIT_TEST_SUITE(TestHttpProxy)

ydb/public/api/grpc/draft/ydb_ymq_v1.proto

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,5 @@ service YmqService {
2020
rpc PurgeQueue(PurgeQueueRequest) returns (PurgeQueueResponse);
2121
rpc DeleteQueue(DeleteQueueRequest) returns (DeleteQueueResponse);
2222
rpc ChangeMessageVisibility(ChangeMessageVisibilityRequest) returns (ChangeMessageVisibilityResponse);
23+
rpc SetQueueAttributes(SetQueueAttributesRequest) returns (SetQueueAttributesResponse);
2324
}

ydb/public/api/protos/draft/ymq.proto

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,3 +256,16 @@ message SendMessageBatchResult {
256256
repeated BatchResultErrorEntry failed = 1;
257257
repeated SendMessageBatchResultEntry successful = 2;
258258
}
259+
260+
message SetQueueAttributesRequest {
261+
Ydb.Operations.OperationParams operation_params = 1;
262+
map<string, string> attributes = 2;
263+
string queue_url = 3;
264+
}
265+
266+
message SetQueueAttributesResponse {
267+
Ydb.Operations.Operation operation = 1;
268+
}
269+
270+
message SetQueueAttributesResult {
271+
}

ydb/services/ymq/grpc_service.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ void TGRpcYmqService::SetupIncomingRequests(NYdbGrpc::TLoggerPtr logger)
4242
ADD_REQUEST(PurgeQueue, DoYmqPurgeQueueRequest, nullptr, Off)
4343
ADD_REQUEST(DeleteQueue, DoYmqDeleteQueueRequest, nullptr, Off)
4444
ADD_REQUEST(ChangeMessageVisibility, DoYmqChangeMessageVisibilityRequest, nullptr, Off)
45+
ADD_REQUEST(SetQueueAttributes, DoYmqSetQueueAttributesRequest, nullptr, Off)
4546

4647
#undef ADD_REQUEST
4748
}

ydb/services/ymq/ymq_proxy.cpp

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,47 @@ namespace NKikimr::NYmq::V1 {
694694
return result;
695695
}
696696
};
697+
698+
class TSetQueueAttributesReplyCallback : public TReplyCallback<
699+
NKikimr::NSQS::TSetQueueAttributesResponse,
700+
Ydb::Ymq::V1::SetQueueAttributesResult> {
701+
public:
702+
using TReplyCallback::TReplyCallback;
703+
704+
private:
705+
const NKikimr::NSQS::TSetQueueAttributesResponse& GetResponse(const NKikimrClient::TSqsResponse& resp) override {
706+
return resp.GetSetQueueAttributes();
707+
}
708+
709+
Ydb::Ymq::V1::SetQueueAttributesResult GetResult(const NKikimrClient::TSqsResponse&) override {
710+
Ydb::Ymq::V1::SetQueueAttributesResult result;
711+
return result;
712+
}
713+
};
714+
715+
void AddAttribute(THolder<TSqsRequest>& requestHolder, const TString& name, TString value) {
716+
auto attribute = requestHolder->MutableSetQueueAttributes()->MutableAttributes()->Add();
717+
attribute->SetName(name);
718+
attribute->SetValue(value);
719+
};
720+
721+
class TSetQueueAttributesActor : public TRpcRequestActor<
722+
TEvYmqSetQueueAttributesRequest,
723+
NKikimr::NSQS::TSetQueueAttributesRequest,
724+
TSetQueueAttributesReplyCallback> {
725+
public:
726+
using TRpcRequestActor::TRpcRequestActor;
727+
728+
private:
729+
NKikimr::NSQS::TSetQueueAttributesRequest* GetRequest(THolder<TSqsRequest>& requestHolder) override {
730+
auto result = requestHolder->MutableSetQueueAttributes();
731+
for (auto& [name, value]: GetProtoRequest()->Getattributes()) {
732+
AddAttribute(requestHolder, name, value);
733+
}
734+
result->SetQueueName(CloudIdAndResourceIdFromQueueUrl(GetProtoRequest()->queue_url())->second);
735+
return result;
736+
}
737+
};
697738
}
698739

699740
namespace NKikimr::NGRpcService {
@@ -717,5 +758,6 @@ DECLARE_RPC(DeleteMessage);
717758
DECLARE_RPC(PurgeQueue);
718759
DECLARE_RPC(DeleteQueue);
719760
DECLARE_RPC(ChangeMessageVisibility);
761+
DECLARE_RPC(SetQueueAttributes);
720762

721763
}

ydb/services/ymq/ymq_proxy.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ using TEvYmqDeleteMessageRequest = TGrpcRequestOperationCall<Ydb::Ymq::V1::Delet
2323
using TEvYmqPurgeQueueRequest = TGrpcRequestOperationCall<Ydb::Ymq::V1::PurgeQueueRequest, Ydb::Ymq::V1::PurgeQueueResponse>;
2424
using TEvYmqDeleteQueueRequest = TGrpcRequestOperationCall<Ydb::Ymq::V1::DeleteQueueRequest, Ydb::Ymq::V1::DeleteQueueResponse>;
2525
using TEvYmqChangeMessageVisibilityRequest = TGrpcRequestOperationCall<Ydb::Ymq::V1::ChangeMessageVisibilityRequest, Ydb::Ymq::V1::ChangeMessageVisibilityResponse>;
26+
using TEvYmqSetQueueAttributesRequest = TGrpcRequestOperationCall<Ydb::Ymq::V1::SetQueueAttributesRequest, Ydb::Ymq::V1::SetQueueAttributesResponse>;
2627

2728
}
2829
}

0 commit comments

Comments
 (0)