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
Changes from all 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
@@ -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") {
mixin_methods = GetMixinMethods(service_config, *service);
}
std::vector<std::string> sources;
std::vector<std::unique_ptr<GeneratorInterface>> code_generators;
VarsDictionary service_vars =
2 changes: 2 additions & 0 deletions google/cloud/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -169,7 +169,9 @@ cc_library(
"@com_google_absl//absl/functional:function_ref",
"@com_google_absl//absl/time",
"@com_google_googleapis//:googleapis_system_includes",
"@com_google_googleapis//google/cloud/location:location_cc_grpc",
"@com_google_googleapis//google/iam/credentials/v1:credentials_cc_grpc",
"@com_google_googleapis//google/iam/v1:iam_cc_grpc",
"@com_google_googleapis//google/longrunning:longrunning_cc_grpc",
"@com_google_googleapis//google/rpc:error_details_cc_proto",
"@com_google_googleapis//google/rpc:status_cc_proto",
2 changes: 2 additions & 0 deletions google/cloud/google_cloud_cpp_grpc_utils.cmake
Original file line number Diff line number Diff line change
@@ -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
@@ -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"
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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_;
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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_;
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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_;
Original file line number Diff line number Diff line change
@@ -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) {
Original file line number Diff line number Diff line change
@@ -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);
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
@@ -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
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
@@ -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>
@@ -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,
@@ -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
Original file line number Diff line number Diff line change
@@ -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>
@@ -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),
Loading