Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(mixin): add manual changes for pubsub and generate mixin code #14756

Merged
merged 9 commits into from
Oct 3, 2024
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion generator/internal/make_generators.cc
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,9 @@ std::vector<std::unique_ptr<GeneratorInterface>> MakeGenerators(
YAML::Node const& service_config,
std::vector<std::pair<std::string, std::string>> const& vars) {
std::vector<MixinMethod> mixin_methods;
// mixin_methods = GetMixinMethods(service_config, *service);
if (service->file()->name() == "google/pubsub/v1/pubsub.proto") {
cuiy0006 marked this conversation as resolved.
Show resolved Hide resolved
mixin_methods = GetMixinMethods(service_config, *service);
}
std::vector<std::string> sources;
std::vector<std::unique_ptr<GeneratorInterface>> code_generators;
VarsDictionary service_vars =
Expand Down
2 changes: 2 additions & 0 deletions google/cloud/google_cloud_cpp_grpc_utils.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,7 @@ target_link_libraries(
google-cloud-cpp::iam_credentials_v1_iamcredentials_protos
google-cloud-cpp::iam_v1_policy_protos
google-cloud-cpp::longrunning_operations_protos
google-cloud-cpp::iam_v1_iam_policy_protos
google-cloud-cpp::rpc_error_details_protos
google-cloud-cpp::rpc_status_protos
google-cloud-cpp::common
Expand Down Expand Up @@ -174,6 +175,7 @@ google_cloud_cpp_add_pkgconfig(
"google_cloud_cpp_common"
"google_cloud_cpp_iam_credentials_v1_iamcredentials_protos"
"google_cloud_cpp_iam_v1_policy_protos"
"google_cloud_cpp_iam_v1_iam_policy_protos"
"google_cloud_cpp_longrunning_operations_protos"
"google_cloud_cpp_rpc_status_protos"
"absl_function_ref"
Expand Down
2 changes: 2 additions & 0 deletions google/cloud/pubsub/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@ cc_library(
deps = [
"//:common",
"//:grpc_utils",
"@com_google_googleapis//google/cloud/location:location_cc_grpc",
cuiy0006 marked this conversation as resolved.
Show resolved Hide resolved
"@com_google_googleapis//google/iam/v1:iam_cc_grpc",
"@com_google_googleapis//google/pubsub/v1:pubsub_cc_grpc",
# Do not sort: grpc++ must come last
"@com_github_grpc_grpc//:grpc++",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,31 @@ StatusOr<google::pubsub::v1::SeekResponse> SubscriptionAdminAuth::Seek(
return child_->Seek(context, options, request);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminAuth::SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) {
auto status = auth_->ConfigureContext(context);
if (!status.ok()) return status;
return child_->SetIamPolicy(context, options, request);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminAuth::GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) {
auto status = auth_->ConfigureContext(context);
if (!status.ok()) return status;
return child_->GetIamPolicy(context, options, request);
}

StatusOr<google::iam::v1::TestIamPermissionsResponse>
SubscriptionAdminAuth::TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) {
auto status = auth_->ConfigureContext(context);
if (!status.ok()) return status;
return child_->TestIamPermissions(context, options, request);
}

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace pubsub_admin_internal
} // namespace cloud
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,18 @@ class SubscriptionAdminAuth : public SubscriptionAdminStub {
grpc::ClientContext& context, Options const& options,
google::pubsub::v1::SeekRequest const& request) override;

StatusOr<google::iam::v1::Policy> SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::Policy> GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) override;

private:
std::shared_ptr<google::cloud::internal::GrpcAuthenticationStrategy> auth_;
std::shared_ptr<SubscriptionAdminStub> child_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -264,6 +264,46 @@ SubscriptionAdminConnectionImpl::Seek(
*current, request, __func__);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminConnectionImpl::SetIamPolicy(
google::iam::v1::SetIamPolicyRequest const& request) {
auto current = google::cloud::internal::SaveCurrentOptions();
return google::cloud::internal::RetryLoop(
retry_policy(*current), backoff_policy(*current),
idempotency_policy(*current)->SetIamPolicy(request),
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) {
return stub_->SetIamPolicy(context, options, request);
},
*current, request, __func__);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminConnectionImpl::GetIamPolicy(
google::iam::v1::GetIamPolicyRequest const& request) {
auto current = google::cloud::internal::SaveCurrentOptions();
return google::cloud::internal::RetryLoop(
retry_policy(*current), backoff_policy(*current),
idempotency_policy(*current)->GetIamPolicy(request),
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) {
return stub_->GetIamPolicy(context, options, request);
},
*current, request, __func__);
}

StatusOr<google::iam::v1::TestIamPermissionsResponse>
SubscriptionAdminConnectionImpl::TestIamPermissions(
google::iam::v1::TestIamPermissionsRequest const& request) {
auto current = google::cloud::internal::SaveCurrentOptions();
return google::cloud::internal::RetryLoop(
retry_policy(*current), backoff_policy(*current),
idempotency_policy(*current)->TestIamPermissions(request),
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) {
return stub_->TestIamPermissions(context, options, request);
},
*current, request, __func__);
}

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace pubsub_admin_internal
} // namespace cloud
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,15 @@ class SubscriptionAdminConnectionImpl
StatusOr<google::pubsub::v1::SeekResponse> Seek(
google::pubsub::v1::SeekRequest const& request) override;

StatusOr<google::iam::v1::Policy> SetIamPolicy(
google::iam::v1::SetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::Policy> GetIamPolicy(
google::iam::v1::GetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
google::iam::v1::TestIamPermissionsRequest const& request) override;

private:
std::unique_ptr<google::cloud::BackgroundThreads> background_;
std::shared_ptr<pubsub_admin_internal::SubscriptionAdminStub> stub_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,40 @@ StatusOr<google::pubsub::v1::SeekResponse> SubscriptionAdminLogging::Seek(
context, options, request, __func__, tracing_options_);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminLogging::SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) {
return google::cloud::internal::LogWrapper(
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) {
return child_->SetIamPolicy(context, options, request);
},
context, options, request, __func__, tracing_options_);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminLogging::GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) {
return google::cloud::internal::LogWrapper(
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) {
return child_->GetIamPolicy(context, options, request);
},
context, options, request, __func__, tracing_options_);
}

StatusOr<google::iam::v1::TestIamPermissionsResponse>
SubscriptionAdminLogging::TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) {
return google::cloud::internal::LogWrapper(
[this](grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) {
return child_->TestIamPermissions(context, options, request);
},
context, options, request, __func__, tracing_options_);
}

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace pubsub_admin_internal
} // namespace cloud
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,18 @@ class SubscriptionAdminLogging : public SubscriptionAdminStub {
grpc::ClientContext& context, Options const& options,
google::pubsub::v1::SeekRequest const& request) override;

StatusOr<google::iam::v1::Policy> SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::Policy> GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) override;

private:
std::shared_ptr<SubscriptionAdminStub> child_;
TracingOptions tracing_options_;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,34 @@ StatusOr<google::pubsub::v1::SeekResponse> SubscriptionAdminMetadata::Seek(
return child_->Seek(context, options, request);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminMetadata::SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) {
SetMetadata(
context, options,
absl::StrCat("resource=", internal::UrlEncode(request.resource())));
return child_->SetIamPolicy(context, options, request);
}

StatusOr<google::iam::v1::Policy> SubscriptionAdminMetadata::GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) {
SetMetadata(
context, options,
absl::StrCat("resource=", internal::UrlEncode(request.resource())));
return child_->GetIamPolicy(context, options, request);
}

StatusOr<google::iam::v1::TestIamPermissionsResponse>
SubscriptionAdminMetadata::TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) {
SetMetadata(
context, options,
absl::StrCat("resource=", internal::UrlEncode(request.resource())));
return child_->TestIamPermissions(context, options, request);
}

void SubscriptionAdminMetadata::SetMetadata(grpc::ClientContext& context,
Options const& options,
std::string const& request_params) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,18 @@ class SubscriptionAdminMetadata : public SubscriptionAdminStub {
grpc::ClientContext& context, Options const& options,
google::pubsub::v1::SeekRequest const& request) override;

StatusOr<google::iam::v1::Policy> SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::Policy> GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) override;

private:
void SetMetadata(grpc::ClientContext& context, Options const& options,
std::string const& request_params);
Expand Down
35 changes: 35 additions & 0 deletions google/cloud/pubsub/admin/internal/subscription_admin_stub.cc
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,41 @@ StatusOr<google::pubsub::v1::SeekResponse> DefaultSubscriptionAdminStub::Seek(
return response;
}

StatusOr<google::iam::v1::Policy> DefaultSubscriptionAdminStub::SetIamPolicy(
grpc::ClientContext& context, Options const&,
google::iam::v1::SetIamPolicyRequest const& request) {
google::iam::v1::Policy response;
auto status = iampolicy_stub_->SetIamPolicy(&context, request, &response);
if (!status.ok()) {
return google::cloud::MakeStatusFromRpcError(status);
}
return response;
}

StatusOr<google::iam::v1::Policy> DefaultSubscriptionAdminStub::GetIamPolicy(
grpc::ClientContext& context, Options const&,
google::iam::v1::GetIamPolicyRequest const& request) {
google::iam::v1::Policy response;
auto status = iampolicy_stub_->GetIamPolicy(&context, request, &response);
if (!status.ok()) {
return google::cloud::MakeStatusFromRpcError(status);
}
return response;
}

StatusOr<google::iam::v1::TestIamPermissionsResponse>
DefaultSubscriptionAdminStub::TestIamPermissions(
grpc::ClientContext& context, Options const&,
google::iam::v1::TestIamPermissionsRequest const& request) {
google::iam::v1::TestIamPermissionsResponse response;
auto status =
iampolicy_stub_->TestIamPermissions(&context, request, &response);
if (!status.ok()) {
return google::cloud::MakeStatusFromRpcError(status);
}
return response;
}

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace pubsub_admin_internal
} // namespace cloud
Expand Down
33 changes: 31 additions & 2 deletions google/cloud/pubsub/admin/internal/subscription_admin_stub.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "google/cloud/options.h"
#include "google/cloud/status_or.h"
#include "google/cloud/version.h"
#include <google/iam/v1/iam_policy.grpc.pb.h>
#include <google/pubsub/v1/pubsub.grpc.pb.h>
#include <memory>
#include <utility>
Expand Down Expand Up @@ -83,13 +84,28 @@ class SubscriptionAdminStub {
virtual StatusOr<google::pubsub::v1::SeekResponse> Seek(
grpc::ClientContext& context, Options const& options,
google::pubsub::v1::SeekRequest const& request) = 0;

virtual StatusOr<google::iam::v1::Policy> SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) = 0;

virtual StatusOr<google::iam::v1::Policy> GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) = 0;

virtual StatusOr<google::iam::v1::TestIamPermissionsResponse>
TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) = 0;
};

class DefaultSubscriptionAdminStub : public SubscriptionAdminStub {
public:
explicit DefaultSubscriptionAdminStub(
std::unique_ptr<google::pubsub::v1::Subscriber::StubInterface> grpc_stub)
: grpc_stub_(std::move(grpc_stub)) {}
std::unique_ptr<google::pubsub::v1::Subscriber::StubInterface> grpc_stub,
std::unique_ptr<google::iam::v1::IAMPolicy::StubInterface> iampolicy_stub)
: grpc_stub_(std::move(grpc_stub)),
iampolicy_stub_(std::move(iampolicy_stub)) {}

StatusOr<google::pubsub::v1::Subscription> CreateSubscription(
grpc::ClientContext& context, Options const& options,
Expand Down Expand Up @@ -139,8 +155,21 @@ class DefaultSubscriptionAdminStub : public SubscriptionAdminStub {
grpc::ClientContext& context, Options const& options,
google::pubsub::v1::SeekRequest const& request) override;

StatusOr<google::iam::v1::Policy> SetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::SetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::Policy> GetIamPolicy(
grpc::ClientContext& context, Options const& options,
google::iam::v1::GetIamPolicyRequest const& request) override;

StatusOr<google::iam::v1::TestIamPermissionsResponse> TestIamPermissions(
grpc::ClientContext& context, Options const& options,
google::iam::v1::TestIamPermissionsRequest const& request) override;

private:
std::unique_ptr<google::pubsub::v1::Subscriber::StubInterface> grpc_stub_;
std::unique_ptr<google::iam::v1::IAMPolicy::StubInterface> iampolicy_stub_;
};

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "google/cloud/internal/opentelemetry.h"
#include "google/cloud/log.h"
#include "google/cloud/options.h"
#include <google/iam/v1/iam_policy.grpc.pb.h>
#include <google/pubsub/v1/pubsub.grpc.pb.h>
#include <memory>
#include <utility>
Expand All @@ -43,9 +44,10 @@ std::shared_ptr<SubscriptionAdminStub> CreateDefaultSubscriptionAdminStub(
auto channel = auth->CreateChannel(options.get<EndpointOption>(),
internal::MakeChannelArguments(options));
auto service_grpc_stub = google::pubsub::v1::Subscriber::NewStub(channel);
auto service_iampolicy_stub = google::iam::v1::IAMPolicy::NewStub(channel);
std::shared_ptr<SubscriptionAdminStub> stub =
std::make_shared<DefaultSubscriptionAdminStub>(
std::move(service_grpc_stub));
std::move(service_grpc_stub), std::move(service_iampolicy_stub));

if (auth->RequiresConfigureContext()) {
stub = std::make_shared<SubscriptionAdminAuth>(std::move(auth),
Expand Down
Loading
Loading