Skip to content

Commit 618fdfa

Browse files
authored
feat(pubsub): add MakeConnection overloads to support regional and locational endpoints (#15190)
1 parent b9c983a commit 618fdfa

30 files changed

+455
-45
lines changed

generator/generator_config.textproto

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3177,6 +3177,7 @@ service {
31773177
"Publish"
31783178
]
31793179
omit_repo_metadata: true
3180+
endpoint_location_style: LOCATION_OPTIONALLY_DEPENDENT
31803181
}
31813182
31823183
# Cloud Pub/Sub Generated Admin API
@@ -3199,6 +3200,7 @@ service {
31993200
service_name_mapping { key: "Subscriber" value: "SubscriptionAdmin"}
32003201
service_name_to_comment { key: "TopicAdmin" value: " A service to manipulate topics."}
32013202
service_name_to_comment { key: "SubscriptionAdmin" value: " A service to manipulate subscriptions."}
3203+
endpoint_location_style: LOCATION_OPTIONALLY_DEPENDENT
32023204
}
32033205
32043206
service {
@@ -3207,6 +3209,7 @@ service {
32073209
initial_copyright_year: "2023"
32083210
retryable_status_codes: ["kUnavailable"]
32093211
emulator_endpoint_env_var: "PUBSUB_EMULATOR_HOST"
3212+
endpoint_location_style: LOCATION_OPTIONALLY_DEPENDENT
32103213
}
32113214
32123215
# Pub/Sub Lite

google/cloud/pubsub/admin/internal/subscription_admin_option_defaults.cc

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "google/cloud/pubsub/admin/internal/subscription_admin_option_defaults.h"
2020
#include "google/cloud/pubsub/admin/subscription_admin_connection.h"
2121
#include "google/cloud/pubsub/admin/subscription_admin_options.h"
22+
#include "google/cloud/internal/absl_str_cat_quiet.h"
2223
#include "google/cloud/internal/populate_common_options.h"
2324
#include "google/cloud/internal/populate_grpc_options.h"
2425
#include <memory>
@@ -33,11 +34,14 @@ namespace {
3334
auto constexpr kBackoffScaling = 2.0;
3435
} // namespace
3536

36-
Options SubscriptionAdminDefaultOptions(Options options) {
37+
Options SubscriptionAdminDefaultOptions(std::string const& location,
38+
Options options) {
3739
options = internal::PopulateCommonOptions(
3840
std::move(options), "GOOGLE_CLOUD_CPP_SUBSCRIBER_ENDPOINT",
3941
"PUBSUB_EMULATOR_HOST", "GOOGLE_CLOUD_CPP_SUBSCRIBER_AUTHORITY",
40-
"pubsub.googleapis.com");
42+
// optional location tag for generating docs
43+
absl::StrCat(location, location.empty() ? "" : "-",
44+
"pubsub.googleapis.com"));
4145
options = internal::PopulateGrpcOptions(std::move(options));
4246
if (!options.has<pubsub_admin::SubscriptionAdminRetryPolicyOption>()) {
4347
options.set<pubsub_admin::SubscriptionAdminRetryPolicyOption>(

google/cloud/pubsub/admin/internal/subscription_admin_option_defaults.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,15 @@
2121

2222
#include "google/cloud/options.h"
2323
#include "google/cloud/version.h"
24+
#include <string>
2425

2526
namespace google {
2627
namespace cloud {
2728
namespace pubsub_admin_internal {
2829
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2930

30-
Options SubscriptionAdminDefaultOptions(Options options);
31+
Options SubscriptionAdminDefaultOptions(std::string const& location,
32+
Options options);
3133

3234
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
3335
} // namespace pubsub_admin_internal

google/cloud/pubsub/admin/internal/topic_admin_option_defaults.cc

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "google/cloud/pubsub/admin/internal/topic_admin_option_defaults.h"
2020
#include "google/cloud/pubsub/admin/topic_admin_connection.h"
2121
#include "google/cloud/pubsub/admin/topic_admin_options.h"
22+
#include "google/cloud/internal/absl_str_cat_quiet.h"
2223
#include "google/cloud/internal/populate_common_options.h"
2324
#include "google/cloud/internal/populate_grpc_options.h"
2425
#include <memory>
@@ -33,11 +34,13 @@ namespace {
3334
auto constexpr kBackoffScaling = 2.0;
3435
} // namespace
3536

36-
Options TopicAdminDefaultOptions(Options options) {
37+
Options TopicAdminDefaultOptions(std::string const& location, Options options) {
3738
options = internal::PopulateCommonOptions(
3839
std::move(options), "GOOGLE_CLOUD_CPP_PUBLISHER_ENDPOINT",
3940
"PUBSUB_EMULATOR_HOST", "GOOGLE_CLOUD_CPP_PUBLISHER_AUTHORITY",
40-
"pubsub.googleapis.com");
41+
// optional location tag for generating docs
42+
absl::StrCat(location, location.empty() ? "" : "-",
43+
"pubsub.googleapis.com"));
4144
options = internal::PopulateGrpcOptions(std::move(options));
4245
if (!options.has<pubsub_admin::TopicAdminRetryPolicyOption>()) {
4346
options.set<pubsub_admin::TopicAdminRetryPolicyOption>(

google/cloud/pubsub/admin/internal/topic_admin_option_defaults.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@
2121

2222
#include "google/cloud/options.h"
2323
#include "google/cloud/version.h"
24+
#include <string>
2425

2526
namespace google {
2627
namespace cloud {
2728
namespace pubsub_admin_internal {
2829
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
2930

30-
Options TopicAdminDefaultOptions(Options options);
31+
Options TopicAdminDefaultOptions(std::string const& location, Options options);
3132

3233
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
3334
} // namespace pubsub_admin_internal

google/cloud/pubsub/admin/samples/subscription_admin_client_samples.cc

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,13 @@ void SetClientEndpoint(std::vector<std::string> const& argv) {
3838
throw google::cloud::testing_util::Usage{"set-client-endpoint"};
3939
}
4040
//! [set-client-endpoint]
41+
// This service supports specifying a regional or locational endpoint prefix
42+
// when creating the SubscriptionAdminConnection.
43+
// For example, to connect to "europe-central2-pubsub.googleapis.com":
44+
auto client = google::cloud::pubsub_admin::SubscriptionAdminClient(
45+
google::cloud::pubsub_admin::MakeSubscriptionAdminConnection(
46+
"europe-central2"));
47+
4148
// This configuration is common with Private Google Access:
4249
// https://cloud.google.com/vpc/docs/private-google-access
4350
auto options = google::cloud::Options{}.set<google::cloud::EndpointOption>(

google/cloud/pubsub/admin/samples/topic_admin_client_samples.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ void SetClientEndpoint(std::vector<std::string> const& argv) {
3838
throw google::cloud::testing_util::Usage{"set-client-endpoint"};
3939
}
4040
//! [set-client-endpoint]
41+
// This service supports specifying a regional or locational endpoint prefix
42+
// when creating the TopicAdminConnection.
43+
// For example, to connect to "europe-central2-pubsub.googleapis.com":
44+
auto client = google::cloud::pubsub_admin::TopicAdminClient(
45+
google::cloud::pubsub_admin::MakeTopicAdminConnection("europe-central2"));
46+
4147
// This configuration is common with Private Google Access:
4248
// https://cloud.google.com/vpc/docs/private-google-access
4349
auto options = google::cloud::Options{}.set<google::cloud::EndpointOption>(

google/cloud/pubsub/admin/subscription_admin_connection.cc

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,13 @@ SubscriptionAdminConnection::TestIamPermissions(
126126
}
127127

128128
std::shared_ptr<SubscriptionAdminConnection> MakeSubscriptionAdminConnection(
129-
Options options) {
129+
std::string const& location, Options options) {
130130
internal::CheckExpectedOptions<CommonOptionList, GrpcOptionList,
131131
UnifiedCredentialsOptionList,
132132
SubscriptionAdminPolicyOptionList>(options,
133133
__func__);
134134
options = pubsub_admin_internal::SubscriptionAdminDefaultOptions(
135-
std::move(options));
135+
location, std::move(options));
136136
auto background = internal::MakeBackgroundThreadsFactory(options)();
137137
auto auth = internal::CreateAuthenticationStrategy(background->cq(), options);
138138
auto stub = pubsub_admin_internal::CreateDefaultSubscriptionAdminStub(
@@ -142,6 +142,11 @@ std::shared_ptr<SubscriptionAdminConnection> MakeSubscriptionAdminConnection(
142142
std::move(background), std::move(stub), std::move(options)));
143143
}
144144

145+
std::shared_ptr<SubscriptionAdminConnection> MakeSubscriptionAdminConnection(
146+
Options options) {
147+
return MakeSubscriptionAdminConnection(std::string{}, std::move(options));
148+
}
149+
145150
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
146151
} // namespace pubsub_admin
147152
} // namespace cloud

google/cloud/pubsub/admin/subscription_admin_connection.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
#include "google/cloud/version.h"
3030
#include <google/pubsub/v1/pubsub.pb.h>
3131
#include <memory>
32+
#include <string>
3233

3334
namespace google {
3435
namespace cloud {
@@ -249,9 +250,20 @@ class SubscriptionAdminConnection {
249250
* @note Unexpected options will be ignored. To log unexpected options instead,
250251
* set `GOOGLE_CLOUD_CPP_ENABLE_CLOG=yes` in the environment.
251252
*
253+
* @param location Sets the prefix for the default `EndpointOption` value.
252254
* @param options (optional) Configure the `SubscriptionAdminConnection` created
253255
* by this function.
254256
*/
257+
std::shared_ptr<SubscriptionAdminConnection> MakeSubscriptionAdminConnection(
258+
std::string const& location, Options options = {});
259+
260+
/**
261+
* A factory function to construct an object of type
262+
* `SubscriptionAdminConnection`.
263+
*
264+
* This overload of `MakeSubscriptionAdminConnection` does not require a
265+
* location argument, creating a connection to the global service endpoint.
266+
*/
255267
std::shared_ptr<SubscriptionAdminConnection> MakeSubscriptionAdminConnection(
256268
Options options = {});
257269

google/cloud/pubsub/admin/topic_admin_connection.cc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,11 +102,12 @@ TopicAdminConnection::TestIamPermissions(
102102
}
103103

104104
std::shared_ptr<TopicAdminConnection> MakeTopicAdminConnection(
105-
Options options) {
105+
std::string const& location, Options options) {
106106
internal::CheckExpectedOptions<CommonOptionList, GrpcOptionList,
107107
UnifiedCredentialsOptionList,
108108
TopicAdminPolicyOptionList>(options, __func__);
109-
options = pubsub_admin_internal::TopicAdminDefaultOptions(std::move(options));
109+
options = pubsub_admin_internal::TopicAdminDefaultOptions(location,
110+
std::move(options));
110111
auto background = internal::MakeBackgroundThreadsFactory(options)();
111112
auto auth = internal::CreateAuthenticationStrategy(background->cq(), options);
112113
auto stub = pubsub_admin_internal::CreateDefaultTopicAdminStub(
@@ -116,6 +117,11 @@ std::shared_ptr<TopicAdminConnection> MakeTopicAdminConnection(
116117
std::move(background), std::move(stub), std::move(options)));
117118
}
118119

120+
std::shared_ptr<TopicAdminConnection> MakeTopicAdminConnection(
121+
Options options) {
122+
return MakeTopicAdminConnection(std::string{}, std::move(options));
123+
}
124+
119125
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
120126
} // namespace pubsub_admin
121127
} // namespace cloud

0 commit comments

Comments
 (0)