Skip to content

Commit a515560

Browse files
authored
feat(spanner): support instance edition (#14678)
1 parent 718f218 commit a515560

File tree

3 files changed

+70
-4
lines changed

3 files changed

+70
-4
lines changed

google/cloud/spanner/admin/integration_tests/instance_admin_rest_integration_test.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@ class InstanceAdminClientRestTest
153153
protected:
154154
void SetUp() override {
155155
if (Emulator()) {
156+
// TODO(#14679): Remove this GTEST_SKIP when emulator supports editions.
157+
GTEST_SKIP();
156158
// We expect test instances to exist when running against real services,
157159
// but if we are running against the emulator we're happy to create one.
158160
Instance in(ProjectId(), InstanceId());

google/cloud/spanner/create_instance_request_builder.h

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,13 +117,61 @@ class CreateInstanceRequestBuilder {
117117
return std::move(*this);
118118
}
119119

120+
// Available editions.
121+
// https://cloud.google.com/spanner/docs/editions-overview
122+
enum class Edition { kStandard, kEnterprise, kEnterprisePlus };
123+
124+
CreateInstanceRequestBuilder& SetEdition(Edition edition) & {
125+
switch (edition) {
126+
case Edition::kStandard:
127+
request_.mutable_instance()->set_edition(
128+
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
129+
break;
130+
case Edition::kEnterprise:
131+
request_.mutable_instance()->set_edition(
132+
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE);
133+
break;
134+
case Edition::kEnterprisePlus:
135+
request_.mutable_instance()->set_edition(
136+
google::spanner::admin::instance::v1::
137+
Instance_Edition_ENTERPRISE_PLUS);
138+
break;
139+
}
140+
return *this;
141+
}
142+
143+
CreateInstanceRequestBuilder&& SetEdition(Edition edition) && {
144+
switch (edition) {
145+
case Edition::kStandard:
146+
request_.mutable_instance()->set_edition(
147+
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
148+
break;
149+
case Edition::kEnterprise:
150+
request_.mutable_instance()->set_edition(
151+
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE);
152+
break;
153+
case Edition::kEnterprisePlus:
154+
request_.mutable_instance()->set_edition(
155+
google::spanner::admin::instance::v1::
156+
Instance_Edition_ENTERPRISE_PLUS);
157+
break;
158+
}
159+
return std::move(*this);
160+
}
161+
120162
google::spanner::admin::instance::v1::CreateInstanceRequest& Build() & {
121163
// Preserve original behavior of defaulting node_count to 1.
122164
if (request_.instance().processing_units() == 0) {
123165
if (request_.instance().node_count() == 0) {
124166
request_.mutable_instance()->set_node_count(1);
125167
}
126168
}
169+
if (request_.instance().edition() ==
170+
google::spanner::admin::instance::v1::
171+
Instance_Edition_EDITION_UNSPECIFIED) {
172+
request_.mutable_instance()->set_edition(
173+
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
174+
}
127175
return request_;
128176
}
129177
google::spanner::admin::instance::v1::CreateInstanceRequest&& Build() && {
@@ -133,6 +181,12 @@ class CreateInstanceRequestBuilder {
133181
request_.mutable_instance()->set_node_count(1);
134182
}
135183
}
184+
if (request_.instance().edition() ==
185+
google::spanner::admin::instance::v1::
186+
Instance_Edition_EDITION_UNSPECIFIED) {
187+
request_.mutable_instance()->set_edition(
188+
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
189+
}
136190
return std::move(request_);
137191
}
138192

google/cloud/spanner/create_instance_request_builder_test.cc

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ TEST(CreateInstanceRequestBuilder, DefaultValues) {
4646
EXPECT_EQ(1, req.instance().node_count());
4747
EXPECT_EQ(0, req.instance().labels_size());
4848
EXPECT_EQ(expected_display_name, req.instance().display_name());
49+
EXPECT_EQ(google::spanner::admin::instance::v1::Instance_Edition_STANDARD,
50+
req.instance().edition());
4951
}
5052

5153
TEST(CreateInstanceRequestBuilder, RvalueReference) {
@@ -58,6 +60,7 @@ TEST(CreateInstanceRequestBuilder, RvalueReference) {
5860
.SetDisplayName(expected_display_name)
5961
.SetNodeCount(1)
6062
.SetLabels({{"key", "value"}})
63+
.SetEdition(CreateInstanceRequestBuilder::Edition::kEnterprise)
6164
.Build();
6265
EXPECT_EQ(in.project().FullName(), req.parent());
6366
EXPECT_EQ(in.instance_id(), req.instance_id());
@@ -67,6 +70,8 @@ TEST(CreateInstanceRequestBuilder, RvalueReference) {
6770
EXPECT_EQ(1, req.instance().labels_size());
6871
EXPECT_EQ("value", req.instance().labels().at("key"));
6972
EXPECT_EQ(expected_display_name, req.instance().display_name());
73+
EXPECT_EQ(google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE,
74+
req.instance().edition());
7075
}
7176

7277
TEST(CreateInstanceRequestBuilder, Lvalue) {
@@ -76,10 +81,12 @@ TEST(CreateInstanceRequestBuilder, Lvalue) {
7681
std::string expected_display_name = "test-display-name";
7782

7883
auto builder = CreateInstanceRequestBuilder(in, expected_config);
79-
auto req = builder.SetDisplayName(expected_display_name)
80-
.SetProcessingUnits(500)
81-
.SetLabels({{"key", "value"}})
82-
.Build();
84+
auto req =
85+
builder.SetDisplayName(expected_display_name)
86+
.SetProcessingUnits(500)
87+
.SetLabels({{"key", "value"}})
88+
.SetEdition(CreateInstanceRequestBuilder::Edition::kEnterprisePlus)
89+
.Build();
8390
EXPECT_EQ(in.project().FullName(), req.parent());
8491
EXPECT_EQ(in.instance_id(), req.instance_id());
8592
EXPECT_EQ(in.FullName(), req.instance().name());
@@ -88,6 +95,9 @@ TEST(CreateInstanceRequestBuilder, Lvalue) {
8895
EXPECT_EQ(1, req.instance().labels_size());
8996
EXPECT_EQ("value", req.instance().labels().at("key"));
9097
EXPECT_EQ(expected_display_name, req.instance().display_name());
98+
EXPECT_EQ(
99+
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE_PLUS,
100+
req.instance().edition());
91101
}
92102

93103
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END

0 commit comments

Comments
 (0)