Skip to content

Commit 912f6d5

Browse files
authored
fix(pubsub): do not overwrite ConnectionOptions (#7408)
1 parent 58ea920 commit 912f6d5

File tree

7 files changed

+73
-4
lines changed

7 files changed

+73
-4
lines changed

google/cloud/pubsub/internal/defaults.cc

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ Options DefaultCommonOptions(Options opts) {
8585
}
8686

8787
Options DefaultPublisherOptions(Options opts) {
88+
return DefaultCommonOptions(DefaultPublisherOptionsOnly(std::move(opts)));
89+
}
90+
91+
Options DefaultPublisherOptionsOnly(Options opts) {
8892
if (!opts.has<pubsub::MaxHoldTimeOption>()) {
8993
opts.set<pubsub::MaxHoldTimeOption>(ms(10));
9094
}
@@ -110,10 +114,14 @@ Options DefaultPublisherOptions(Options opts) {
110114
pubsub::FullPublisherAction::kBlocks);
111115
}
112116

113-
return DefaultCommonOptions(std::move(opts));
117+
return opts;
114118
}
115119

116120
Options DefaultSubscriberOptions(Options opts) {
121+
return DefaultCommonOptions(DefaultSubscriberOptionsOnly(std::move(opts)));
122+
}
123+
124+
Options DefaultSubscriberOptionsOnly(Options opts) {
117125
if (!opts.has<pubsub::MaxDeadlineTimeOption>()) {
118126
opts.set<pubsub::MaxDeadlineTimeOption>(seconds(0));
119127
}
@@ -153,7 +161,7 @@ Options DefaultSubscriberOptions(Options opts) {
153161
auto& bytes = opts.lookup<pubsub::MaxOutstandingBytesOption>();
154162
bytes = std::max<std::int64_t>(0, bytes);
155163

156-
return DefaultCommonOptions(std::move(opts));
164+
return opts;
157165
}
158166

159167
} // namespace GOOGLE_CLOUD_CPP_PUBSUB_NS

google/cloud/pubsub/internal/defaults.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,12 @@ Options DefaultCommonOptions(Options opts);
2929

3030
Options DefaultPublisherOptions(Options opts);
3131

32+
Options DefaultPublisherOptionsOnly(Options opts);
33+
3234
Options DefaultSubscriberOptions(Options opts);
3335

36+
Options DefaultSubscriberOptionsOnly(Options opts);
37+
3438
} // namespace GOOGLE_CLOUD_CPP_PUBSUB_NS
3539
} // namespace pubsub_internal
3640
} // namespace cloud

google/cloud/pubsub/internal/defaults_test.cc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,55 @@ TEST(OptionsTest, UserSetSubscriberOptions) {
207207
EXPECT_EQ(6, opts.get<pubsub::MaxConcurrencyOption>());
208208
}
209209

210+
TEST(OptionsTest, DefaultSubscriberOnly) {
211+
// Ensure that we do not set common options
212+
auto opts = DefaultSubscriberOptionsOnly(Options{});
213+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
214+
EXPECT_FALSE(opts.has<EndpointOption>());
215+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
216+
EXPECT_FALSE(opts.has<GrpcNumChannelsOption>());
217+
EXPECT_FALSE(opts.has<TracingComponentsOption>());
218+
EXPECT_FALSE(opts.has<GrpcTracingOptionsOption>());
219+
EXPECT_FALSE(opts.has<pubsub::BackoffPolicyOption>());
220+
EXPECT_FALSE(opts.has<GrpcBackgroundThreadPoolSizeOption>());
221+
EXPECT_FALSE(opts.has<UserAgentProductsOption>());
222+
223+
// Ensure that we do set common options
224+
opts = DefaultSubscriberOptions(Options{});
225+
EXPECT_TRUE(opts.has<GrpcCredentialOption>());
226+
EXPECT_TRUE(opts.has<EndpointOption>());
227+
EXPECT_TRUE(opts.has<GrpcCredentialOption>());
228+
EXPECT_TRUE(opts.has<GrpcNumChannelsOption>());
229+
EXPECT_TRUE(opts.has<TracingComponentsOption>());
230+
EXPECT_TRUE(opts.has<GrpcTracingOptionsOption>());
231+
EXPECT_TRUE(opts.has<GrpcBackgroundThreadPoolSizeOption>());
232+
EXPECT_TRUE(opts.has<UserAgentProductsOption>());
233+
}
234+
235+
TEST(OptionsTest, DefaultPublisherOnly) {
236+
// Ensure that we do not set common options
237+
auto opts = DefaultPublisherOptionsOnly(Options{});
238+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
239+
EXPECT_FALSE(opts.has<EndpointOption>());
240+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
241+
EXPECT_FALSE(opts.has<GrpcNumChannelsOption>());
242+
EXPECT_FALSE(opts.has<TracingComponentsOption>());
243+
EXPECT_FALSE(opts.has<GrpcTracingOptionsOption>());
244+
EXPECT_FALSE(opts.has<GrpcBackgroundThreadPoolSizeOption>());
245+
EXPECT_FALSE(opts.has<UserAgentProductsOption>());
246+
247+
// Ensure that we do set common options
248+
opts = DefaultPublisherOptions(Options{});
249+
EXPECT_TRUE(opts.has<GrpcCredentialOption>());
250+
EXPECT_TRUE(opts.has<EndpointOption>());
251+
EXPECT_TRUE(opts.has<GrpcCredentialOption>());
252+
EXPECT_TRUE(opts.has<GrpcNumChannelsOption>());
253+
EXPECT_TRUE(opts.has<TracingComponentsOption>());
254+
EXPECT_TRUE(opts.has<GrpcTracingOptionsOption>());
255+
EXPECT_TRUE(opts.has<GrpcBackgroundThreadPoolSizeOption>());
256+
EXPECT_TRUE(opts.has<UserAgentProductsOption>());
257+
}
258+
210259
} // namespace
211260
} // namespace GOOGLE_CLOUD_CPP_PUBSUB_NS
212261
} // namespace pubsub_internal

google/cloud/pubsub/publisher_options.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ inline namespace GOOGLE_CLOUD_CPP_PUBSUB_NS {
2222

2323
PublisherOptions::PublisherOptions(Options opts) {
2424
internal::CheckExpectedOptions<PublisherOptionList>(opts, __func__);
25-
opts_ = pubsub_internal::DefaultPublisherOptions(std::move(opts));
25+
opts_ = pubsub_internal::DefaultPublisherOptionsOnly(std::move(opts));
2626
}
2727

2828
} // namespace GOOGLE_CLOUD_CPP_PUBSUB_NS

google/cloud/pubsub/publisher_options_test.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
// limitations under the License.
1414

1515
#include "google/cloud/pubsub/publisher_options.h"
16+
#include "google/cloud/grpc_options.h"
1617
#include "google/cloud/testing_util/scoped_log.h"
1718
#include <gmock/gmock.h>
1819

@@ -146,6 +147,9 @@ TEST(PublisherOptions, MakeOptions) {
146147
opts = pubsub_internal::MakeOptions(std::move(blocks));
147148
EXPECT_EQ(FullPublisherAction::kBlocks,
148149
opts.get<FullPublisherActionOption>());
150+
151+
// Ensure that we are not setting any extra options
152+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
149153
}
150154

151155
} // namespace

google/cloud/pubsub/subscriber_options.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ using seconds = std::chrono::seconds;
2525

2626
SubscriberOptions::SubscriberOptions(Options opts) {
2727
internal::CheckExpectedOptions<SubscriberOptionList>(opts, __func__);
28-
opts_ = pubsub_internal::DefaultSubscriberOptions(std::move(opts));
28+
opts_ = pubsub_internal::DefaultSubscriberOptionsOnly(std::move(opts));
2929
}
3030

3131
SubscriberOptions& SubscriberOptions::set_max_deadline_extension(

google/cloud/pubsub/subscriber_options_test.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414

1515
#include "google/cloud/pubsub/subscriber_options.h"
1616
#include "google/cloud/pubsub/options.h"
17+
#include "google/cloud/grpc_options.h"
1718
#include "google/cloud/testing_util/scoped_log.h"
1819
#include <gmock/gmock.h>
1920
#include <chrono>
@@ -112,6 +113,9 @@ TEST(SubscriberOptionsTest, MakeOptions) {
112113
EXPECT_EQ(4, opts.get<MaxOutstandingMessagesOption>());
113114
EXPECT_EQ(5, opts.get<MaxOutstandingBytesOption>());
114115
EXPECT_EQ(6, opts.get<MaxConcurrencyOption>());
116+
117+
// Ensure that we are not setting any extra options
118+
EXPECT_FALSE(opts.has<GrpcCredentialOption>());
115119
}
116120

117121
} // namespace

0 commit comments

Comments
 (0)