From d523e8a3505fa2d67b738b99f3b385ccafa5c3ae Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Thu, 8 Jun 2023 21:40:08 +0800 Subject: [PATCH 1/5] tmp save Signed-off-by: guo-shaoge --- include/pingcap/pd/Client.h | 14 ++++++++++++++ include/pingcap/pd/IClient.h | 14 ++++++++++++++ include/pingcap/pd/MockPDClient.h | 12 ++++++++++++ src/pd/Client.cc | 24 ++++++++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/include/pingcap/pd/Client.h b/include/pingcap/pd/Client.h index 16d9be57..98f0e5da 100644 --- a/include/pingcap/pd/Client.h +++ b/include/pingcap/pd/Client.h @@ -64,6 +64,18 @@ class Client : public IClient std::string getLeaderUrl() override; + // ResourceControl related. + ::resource_manager::ListResourceGroupsResponse listResourceGroups() override; + + ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) override; + + ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) override; + + ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) override; + + ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) override; + + ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) override; private: void initClusterID(); @@ -82,6 +94,8 @@ class Client : public IClient std::shared_ptr channel; std::unique_ptr stub; std::unique_ptr keyspace_stub; + // gjt todo + std::unique_ptr resource_manager_stub; PDConnClient(std::string addr, const ClusterConfig & config) { if (config.hasTlsConfig()) diff --git a/include/pingcap/pd/IClient.h b/include/pingcap/pd/IClient.h index 8b634dab..2b0782ea 100644 --- a/include/pingcap/pd/IClient.h +++ b/include/pingcap/pd/IClient.h @@ -9,6 +9,7 @@ #pragma GCC diagnostic ignored "-Wunused-parameter" #include #include +#include #pragma GCC diagnostic pop #include @@ -54,6 +55,19 @@ class IClient virtual bool isMock() = 0; virtual std::string getLeaderUrl() = 0; + + // ResourceControl related. + virtual ::resource_manager::ListResourceGroupsResponse listResourceGroups() = 0; + + virtual ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) = 0; + + virtual ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) = 0; + + virtual ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) = 0; + + virtual ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) = 0; + + virtual ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) = 0; }; using ClientPtr = std::shared_ptr; diff --git a/include/pingcap/pd/MockPDClient.h b/include/pingcap/pd/MockPDClient.h index 66140da8..72f565ef 100644 --- a/include/pingcap/pd/MockPDClient.h +++ b/include/pingcap/pd/MockPDClient.h @@ -41,6 +41,18 @@ class MockPDClient : public IClient bool isMock() override { return true; } std::string getLeaderUrl() override { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::ListResourceGroupsResponse listResourceGroups() { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + + ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } }; } // namespace pd diff --git a/src/pd/Client.cc b/src/pd/Client.cc index fe710c0e..fa9502ae 100644 --- a/src/pd/Client.cc +++ b/src/pd/Client.cc @@ -508,5 +508,29 @@ bool Client::isClusterBootstrapped() return response.bootstrapped(); } +#define RESOURCE_MANAGER_CALL_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) + ::resource_manager::RESPONSE_TYPE Client::FUNC_NAME(const ::resource_manager::REQUEST_TYPE & request) \ + { \ + ::resource_manager::ListResourceGroupsResponse response; \ + grpc::ClientContext context; \ + context.set_deadline(std::chrono::system_clock::now() + pd_timeout); \ + auto status = leaderClient()->resource_manager_stub->ListResourceGroups(&context, request, &response); \ + if (!status.ok()) \ + { \ + std::string err_msg = ("get region by id failed: " + std::to_string(status.error_code()) + ": " + status.error_message()); \ + log->error(err_msg); \ + check_leader.store(true); \ + throw Exception(err_msg, GRPCErrorCode); \ + } \ + return response; \ + } + +RESOURCE_MANAGER_CALL_DEFINITION(listResourceGroups, ListResourceGroups, ListResourceGroupsRequest, ListResourceGroupsResponse) +RESOURCE_MANAGER_CALL_DEFINITION(getResourceGroup, GetResourceGroup, GetResourceGroupRequest, GetResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(addResourceGroup, AddResourceGroup, AddResourceGroupRequest, AddResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(modifyResourceGroup, ModifyResourceGroup, ModifyResourceGroupRequest, ModifyResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(deleteResourceGroup, DeleteResourceGroup, DeleteResourceGroupRequest, DeleteResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(acquireTokenBuckets, AcquireTokenBuckets, AcquireTokenBucketsRequest, AcquireTokenBucketsResponse) + } // namespace pd } // namespace pingcap From f4009679d5678f5efdd38d4523652726fbbe7f19 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Fri, 9 Jun 2023 13:27:28 +0800 Subject: [PATCH 2/5] add pd_client resource_control grpc api Signed-off-by: guo-shaoge --- include/pingcap/pd/Client.h | 1 + src/pd/Client.cc | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/include/pingcap/pd/Client.h b/include/pingcap/pd/Client.h index 98f0e5da..a421d05f 100644 --- a/include/pingcap/pd/Client.h +++ b/include/pingcap/pd/Client.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include diff --git a/src/pd/Client.cc b/src/pd/Client.cc index fa9502ae..daf57129 100644 --- a/src/pd/Client.cc +++ b/src/pd/Client.cc @@ -509,20 +509,20 @@ bool Client::isClusterBootstrapped() } #define RESOURCE_MANAGER_CALL_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) - ::resource_manager::RESPONSE_TYPE Client::FUNC_NAME(const ::resource_manager::REQUEST_TYPE & request) \ - { \ - ::resource_manager::ListResourceGroupsResponse response; \ - grpc::ClientContext context; \ - context.set_deadline(std::chrono::system_clock::now() + pd_timeout); \ - auto status = leaderClient()->resource_manager_stub->ListResourceGroups(&context, request, &response); \ - if (!status.ok()) \ - { \ - std::string err_msg = ("get region by id failed: " + std::to_string(status.error_code()) + ": " + status.error_message()); \ - log->error(err_msg); \ - check_leader.store(true); \ - throw Exception(err_msg, GRPCErrorCode); \ - } \ - return response; \ + ::resource_manager::RESPONSE_TYPE Client::FUNC_NAME(const ::resource_manager::REQUEST_TYPE & request) \ + { \ + ::resource_manager::RESPONSE_TYPE response; \ + grpc::ClientContext context; \ + context.set_deadline(std::chrono::system_clock::now() + pd_timeout); \ + auto status = leaderClient()->resource_manager_stub->GRPC_METHOD(&context, request, &response); \ + if (!status.ok()) \ + { \ + std::string err_msg = ("resource manager grpc call failed: " #GRPC_METHOD ". " + std::to_string(status.error_code()) + ": " + status.error_message()); \ + log->error(err_msg); \ + check_leader.store(true); \ + throw Exception(err_msg, GRPCErrorCode); \ + } \ + return response; \ } RESOURCE_MANAGER_CALL_DEFINITION(listResourceGroups, ListResourceGroups, ListResourceGroupsRequest, ListResourceGroupsResponse) From 9b046cec0b81035227e4b6851052a63e6ddc4ab6 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Sat, 10 Jun 2023 11:00:55 +0800 Subject: [PATCH 3/5] fix Signed-off-by: guo-shaoge --- include/pingcap/pd/Client.h | 12 ++++++------ include/pingcap/pd/IClient.h | 12 ++++++------ include/pingcap/pd/MockPDClient.h | 18 ++++++++++++------ src/pd/Client.cc | 14 ++++++++++---- 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/include/pingcap/pd/Client.h b/include/pingcap/pd/Client.h index a421d05f..1b421161 100644 --- a/include/pingcap/pd/Client.h +++ b/include/pingcap/pd/Client.h @@ -66,17 +66,17 @@ class Client : public IClient std::string getLeaderUrl() override; // ResourceControl related. - ::resource_manager::ListResourceGroupsResponse listResourceGroups() override; + resource_manager::ListResourceGroupsResponse listResourceGroups(const resource_manager::ListResourceGroupsRequest &) override; - ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) override; + resource_manager::GetResourceGroupResponse getResourceGroup(const resource_manager::GetResourceGroupRequest &) override; - ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) override; + resource_manager::PutResourceGroupResponse addResourceGroup(const resource_manager::PutResourceGroupRequest &) override; - ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) override; + resource_manager::PutResourceGroupResponse modifyResourceGroup(const resource_manager::PutResourceGroupRequest &) override; - ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) override; + resource_manager::DeleteResourceGroupResponse deleteResourceGroup(const resource_manager::DeleteResourceGroupRequest &) override; - ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) override; + std::shared_ptr> acquireTokenBuckets() override; private: void initClusterID(); diff --git a/include/pingcap/pd/IClient.h b/include/pingcap/pd/IClient.h index 2b0782ea..7f62b0d9 100644 --- a/include/pingcap/pd/IClient.h +++ b/include/pingcap/pd/IClient.h @@ -57,17 +57,17 @@ class IClient virtual std::string getLeaderUrl() = 0; // ResourceControl related. - virtual ::resource_manager::ListResourceGroupsResponse listResourceGroups() = 0; + virtual resource_manager::ListResourceGroupsResponse listResourceGroups(const resource_manager::ListResourceGroupsRequest &) = 0; - virtual ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) = 0; + virtual resource_manager::GetResourceGroupResponse getResourceGroup(const resource_manager::GetResourceGroupRequest &) = 0; - virtual ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) = 0; + virtual resource_manager::PutResourceGroupResponse addResourceGroup(const resource_manager::PutResourceGroupRequest &) = 0; - virtual ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) = 0; + virtual resource_manager::PutResourceGroupResponse modifyResourceGroup(const resource_manager::PutResourceGroupRequest &) = 0; - virtual ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) = 0; + virtual resource_manager::DeleteResourceGroupResponse deleteResourceGroup(const resource_manager::DeleteResourceGroupRequest &) = 0; - virtual ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) = 0; + virtual std::shared_ptr> acquireTokenBuckets() = 0; }; using ClientPtr = std::shared_ptr; diff --git a/include/pingcap/pd/MockPDClient.h b/include/pingcap/pd/MockPDClient.h index 72f565ef..04e8f43e 100644 --- a/include/pingcap/pd/MockPDClient.h +++ b/include/pingcap/pd/MockPDClient.h @@ -42,17 +42,23 @@ class MockPDClient : public IClient std::string getLeaderUrl() override { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::ListResourceGroupsResponse listResourceGroups() { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + ::resource_manager::ListResourceGroupsResponse listResourceGroups(const ::resource_manager::ListResourceGroupsRequest &) override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::GetResourceGroupResponse getResourceGroup(::resource_manager::GetResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + ::resource_manager::GetResourceGroupResponse getResourceGroup(const ::resource_manager::GetResourceGroupRequest &) override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::PutResourceGroupResponse putResourceGroup(::resource_manager::PutResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + ::resource_manager::PutResourceGroupResponse addResourceGroup(const ::resource_manager::PutResourceGroupRequest &) override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::PutResourceGroupResponse modifyResourceGroup(::resource_manager::PutResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + ::resource_manager::PutResourceGroupResponse modifyResourceGroup(const ::resource_manager::PutResourceGroupRequest &) override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::DeleteResourceGroupRequest deleteResourceGroup(::resource_manager::DeleteResourceGroupRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + ::resource_manager::DeleteResourceGroupResponse deleteResourceGroup(const ::resource_manager::DeleteResourceGroupRequest &) override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } - ::resource_manager::TokenBucketsResponse acquireTokenBuckets(::resource_manager::TokenBucketsRequest) { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } + std::shared_ptr> acquireTokenBuckets() override + { throw Exception("not implemented", pingcap::ErrorCodes::UnknownError); } }; } // namespace pd diff --git a/src/pd/Client.cc b/src/pd/Client.cc index daf57129..26090fee 100644 --- a/src/pd/Client.cc +++ b/src/pd/Client.cc @@ -508,7 +508,7 @@ bool Client::isClusterBootstrapped() return response.bootstrapped(); } -#define RESOURCE_MANAGER_CALL_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) +#define RESOURCE_MANAGER_CALL_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) \ ::resource_manager::RESPONSE_TYPE Client::FUNC_NAME(const ::resource_manager::REQUEST_TYPE & request) \ { \ ::resource_manager::RESPONSE_TYPE response; \ @@ -527,10 +527,16 @@ bool Client::isClusterBootstrapped() RESOURCE_MANAGER_CALL_DEFINITION(listResourceGroups, ListResourceGroups, ListResourceGroupsRequest, ListResourceGroupsResponse) RESOURCE_MANAGER_CALL_DEFINITION(getResourceGroup, GetResourceGroup, GetResourceGroupRequest, GetResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(addResourceGroup, AddResourceGroup, AddResourceGroupRequest, AddResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(modifyResourceGroup, ModifyResourceGroup, ModifyResourceGroupRequest, ModifyResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(addResourceGroup, AddResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) +RESOURCE_MANAGER_CALL_DEFINITION(modifyResourceGroup, ModifyResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) RESOURCE_MANAGER_CALL_DEFINITION(deleteResourceGroup, DeleteResourceGroup, DeleteResourceGroupRequest, DeleteResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(acquireTokenBuckets, AcquireTokenBuckets, AcquireTokenBucketsRequest, AcquireTokenBucketsResponse) + +std::shared_ptr> Client::acquireTokenBuckets() +{ + resource_manager::TokenBucketsResponse response; + grpc::ClientContext context; + return leaderClient()->resource_manager_stub->AcquireTokenBuckets(&context); +} } // namespace pd } // namespace pingcap From 4eb5d77a034f2dd31ab011b0c5dafea227502484 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Thu, 15 Jun 2023 11:43:21 +0800 Subject: [PATCH 4/5] fix stub Signed-off-by: guo-shaoge --- include/pingcap/pd/Client.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/pingcap/pd/Client.h b/include/pingcap/pd/Client.h index 1b421161..2ebaa601 100644 --- a/include/pingcap/pd/Client.h +++ b/include/pingcap/pd/Client.h @@ -95,7 +95,6 @@ class Client : public IClient std::shared_ptr channel; std::unique_ptr stub; std::unique_ptr keyspace_stub; - // gjt todo std::unique_ptr resource_manager_stub; PDConnClient(std::string addr, const ClusterConfig & config) { @@ -109,6 +108,7 @@ class Client : public IClient } stub = pdpb::PD::NewStub(channel); keyspace_stub = keyspacepb::Keyspace::NewStub(channel); + resource_manager_stub = resource_manager::ResourceManager::NewStub(channel); } }; From 861eb429922401a0836ea8817c747b6f34585500 Mon Sep 17 00:00:00 2001 From: guo-shaoge Date: Thu, 15 Jun 2023 11:50:08 +0800 Subject: [PATCH 5/5] refine macro name Signed-off-by: guo-shaoge --- src/pd/Client.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/pd/Client.cc b/src/pd/Client.cc index 26090fee..2b75fe23 100644 --- a/src/pd/Client.cc +++ b/src/pd/Client.cc @@ -508,7 +508,7 @@ bool Client::isClusterBootstrapped() return response.bootstrapped(); } -#define RESOURCE_MANAGER_CALL_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) \ +#define RESOURCE_CONTROL_FUNCTION_DEFINITION(FUNC_NAME, GRPC_METHOD, REQUEST_TYPE, RESPONSE_TYPE) \ ::resource_manager::RESPONSE_TYPE Client::FUNC_NAME(const ::resource_manager::REQUEST_TYPE & request) \ { \ ::resource_manager::RESPONSE_TYPE response; \ @@ -525,11 +525,11 @@ bool Client::isClusterBootstrapped() return response; \ } -RESOURCE_MANAGER_CALL_DEFINITION(listResourceGroups, ListResourceGroups, ListResourceGroupsRequest, ListResourceGroupsResponse) -RESOURCE_MANAGER_CALL_DEFINITION(getResourceGroup, GetResourceGroup, GetResourceGroupRequest, GetResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(addResourceGroup, AddResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(modifyResourceGroup, ModifyResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) -RESOURCE_MANAGER_CALL_DEFINITION(deleteResourceGroup, DeleteResourceGroup, DeleteResourceGroupRequest, DeleteResourceGroupResponse) +RESOURCE_CONTROL_FUNCTION_DEFINITION(listResourceGroups, ListResourceGroups, ListResourceGroupsRequest, ListResourceGroupsResponse) +RESOURCE_CONTROL_FUNCTION_DEFINITION(getResourceGroup, GetResourceGroup, GetResourceGroupRequest, GetResourceGroupResponse) +RESOURCE_CONTROL_FUNCTION_DEFINITION(addResourceGroup, AddResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) +RESOURCE_CONTROL_FUNCTION_DEFINITION(modifyResourceGroup, ModifyResourceGroup, PutResourceGroupRequest, PutResourceGroupResponse) +RESOURCE_CONTROL_FUNCTION_DEFINITION(deleteResourceGroup, DeleteResourceGroup, DeleteResourceGroupRequest, DeleteResourceGroupResponse) std::shared_ptr> Client::acquireTokenBuckets() {