Skip to content

Commit

Permalink
feat(spanner): support instance edition (#14678)
Browse files Browse the repository at this point in the history
  • Loading branch information
scotthart authored Sep 5, 2024
1 parent 718f218 commit a515560
Show file tree
Hide file tree
Showing 3 changed files with 70 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ class InstanceAdminClientRestTest
protected:
void SetUp() override {
if (Emulator()) {
// TODO(#14679): Remove this GTEST_SKIP when emulator supports editions.
GTEST_SKIP();
// We expect test instances to exist when running against real services,
// but if we are running against the emulator we're happy to create one.
Instance in(ProjectId(), InstanceId());
Expand Down
54 changes: 54 additions & 0 deletions google/cloud/spanner/create_instance_request_builder.h
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,61 @@ class CreateInstanceRequestBuilder {
return std::move(*this);
}

// Available editions.
// https://cloud.google.com/spanner/docs/editions-overview
enum class Edition { kStandard, kEnterprise, kEnterprisePlus };

CreateInstanceRequestBuilder& SetEdition(Edition edition) & {
switch (edition) {
case Edition::kStandard:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
break;
case Edition::kEnterprise:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE);
break;
case Edition::kEnterprisePlus:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::
Instance_Edition_ENTERPRISE_PLUS);
break;
}
return *this;
}

CreateInstanceRequestBuilder&& SetEdition(Edition edition) && {
switch (edition) {
case Edition::kStandard:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
break;
case Edition::kEnterprise:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE);
break;
case Edition::kEnterprisePlus:
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::
Instance_Edition_ENTERPRISE_PLUS);
break;
}
return std::move(*this);
}

google::spanner::admin::instance::v1::CreateInstanceRequest& Build() & {
// Preserve original behavior of defaulting node_count to 1.
if (request_.instance().processing_units() == 0) {
if (request_.instance().node_count() == 0) {
request_.mutable_instance()->set_node_count(1);
}
}
if (request_.instance().edition() ==
google::spanner::admin::instance::v1::
Instance_Edition_EDITION_UNSPECIFIED) {
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
}
return request_;
}
google::spanner::admin::instance::v1::CreateInstanceRequest&& Build() && {
Expand All @@ -133,6 +181,12 @@ class CreateInstanceRequestBuilder {
request_.mutable_instance()->set_node_count(1);
}
}
if (request_.instance().edition() ==
google::spanner::admin::instance::v1::
Instance_Edition_EDITION_UNSPECIFIED) {
request_.mutable_instance()->set_edition(
google::spanner::admin::instance::v1::Instance_Edition_STANDARD);
}
return std::move(request_);
}

Expand Down
18 changes: 14 additions & 4 deletions google/cloud/spanner/create_instance_request_builder_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ TEST(CreateInstanceRequestBuilder, DefaultValues) {
EXPECT_EQ(1, req.instance().node_count());
EXPECT_EQ(0, req.instance().labels_size());
EXPECT_EQ(expected_display_name, req.instance().display_name());
EXPECT_EQ(google::spanner::admin::instance::v1::Instance_Edition_STANDARD,
req.instance().edition());
}

TEST(CreateInstanceRequestBuilder, RvalueReference) {
Expand All @@ -58,6 +60,7 @@ TEST(CreateInstanceRequestBuilder, RvalueReference) {
.SetDisplayName(expected_display_name)
.SetNodeCount(1)
.SetLabels({{"key", "value"}})
.SetEdition(CreateInstanceRequestBuilder::Edition::kEnterprise)
.Build();
EXPECT_EQ(in.project().FullName(), req.parent());
EXPECT_EQ(in.instance_id(), req.instance_id());
Expand All @@ -67,6 +70,8 @@ TEST(CreateInstanceRequestBuilder, RvalueReference) {
EXPECT_EQ(1, req.instance().labels_size());
EXPECT_EQ("value", req.instance().labels().at("key"));
EXPECT_EQ(expected_display_name, req.instance().display_name());
EXPECT_EQ(google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE,
req.instance().edition());
}

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

auto builder = CreateInstanceRequestBuilder(in, expected_config);
auto req = builder.SetDisplayName(expected_display_name)
.SetProcessingUnits(500)
.SetLabels({{"key", "value"}})
.Build();
auto req =
builder.SetDisplayName(expected_display_name)
.SetProcessingUnits(500)
.SetLabels({{"key", "value"}})
.SetEdition(CreateInstanceRequestBuilder::Edition::kEnterprisePlus)
.Build();
EXPECT_EQ(in.project().FullName(), req.parent());
EXPECT_EQ(in.instance_id(), req.instance_id());
EXPECT_EQ(in.FullName(), req.instance().name());
Expand All @@ -88,6 +95,9 @@ TEST(CreateInstanceRequestBuilder, Lvalue) {
EXPECT_EQ(1, req.instance().labels_size());
EXPECT_EQ("value", req.instance().labels().at("key"));
EXPECT_EQ(expected_display_name, req.instance().display_name());
EXPECT_EQ(
google::spanner::admin::instance::v1::Instance_Edition_ENTERPRISE_PLUS,
req.instance().edition());
}

GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
Expand Down

0 comments on commit a515560

Please sign in to comment.