From 5f837407a69ba5aed60d42bc7bba81380a4168b3 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 9 Jan 2026 10:33:48 -0500 Subject: [PATCH 1/2] doc(spanner): update sample implementation to match description --- google/cloud/spanner/samples/samples.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/google/cloud/spanner/samples/samples.cc b/google/cloud/spanner/samples/samples.cc index 69f5ed2424b6c..91cc2b657254e 100644 --- a/google/cloud/spanner/samples/samples.cc +++ b/google/cloud/spanner/samples/samples.cc @@ -3426,6 +3426,8 @@ void ReadDataWithStoringIndex(google::cloud::spanner::Client client) { //! [START spanner_read_write_transaction] void ReadWriteTransaction(google::cloud::spanner::Client client) { namespace spanner = ::google::cloud::spanner; + using ::google::cloud::Status; + using ::google::cloud::StatusCode; using ::google::cloud::StatusOr; // A helper to read a single album MarketingBudget. @@ -3451,6 +3453,11 @@ void ReadWriteTransaction(google::cloud::spanner::Client client) { if (!b2) return std::move(b2).status(); std::int64_t transfer_amount = 200000; + if (*b2 < transfer_amount) { + return Status(StatusCode::kFailedPrecondition, + "Album budget funds are insufficient"); + } + return spanner::Mutations{ spanner::UpdateMutationBuilder( "Albums", {"SingerId", "AlbumId", "MarketingBudget"}) @@ -3459,6 +3466,11 @@ void ReadWriteTransaction(google::cloud::spanner::Client client) { .Build()}; }); + if (!commit && commit.status().code() == StatusCode::kFailedPrecondition && + commit.status().message() == "Album budget funds are insufficient") { + std::cerr << commit.status().message() << ".\n"; + return; + } if (!commit) throw std::move(commit).status(); std::cout << "Transfer was successful [spanner_read_write_transaction]\n"; } From c7d8865ed5faf16e2826234578929513763ddfc0 Mon Sep 17 00:00:00 2001 From: Scott Hart Date: Fri, 9 Jan 2026 11:37:29 -0500 Subject: [PATCH 2/2] update error message and error handling --- google/cloud/spanner/samples/samples.cc | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/google/cloud/spanner/samples/samples.cc b/google/cloud/spanner/samples/samples.cc index 91cc2b657254e..1b677c184dda1 100644 --- a/google/cloud/spanner/samples/samples.cc +++ b/google/cloud/spanner/samples/samples.cc @@ -3444,9 +3444,10 @@ void ReadWriteTransaction(google::cloud::spanner::Client client) { return std::get<0>(*std::move(row)); }; + auto constexpr kInsufficientFundsMessage = + "The second album does not have enough funds to transfer"; auto commit = client.Commit( - [&client, &get_current_budget]( - spanner::Transaction const& txn) -> StatusOr { + [&](spanner::Transaction const& txn) -> StatusOr { auto b1 = get_current_budget(client, txn, 1, 1); if (!b1) return std::move(b1).status(); auto b2 = get_current_budget(client, txn, 2, 2); @@ -3455,7 +3456,7 @@ void ReadWriteTransaction(google::cloud::spanner::Client client) { if (*b2 < transfer_amount) { return Status(StatusCode::kFailedPrecondition, - "Album budget funds are insufficient"); + kInsufficientFundsMessage); } return spanner::Mutations{ @@ -3466,11 +3467,6 @@ void ReadWriteTransaction(google::cloud::spanner::Client client) { .Build()}; }); - if (!commit && commit.status().code() == StatusCode::kFailedPrecondition && - commit.status().message() == "Album budget funds are insufficient") { - std::cerr << commit.status().message() << ".\n"; - return; - } if (!commit) throw std::move(commit).status(); std::cout << "Transfer was successful [spanner_read_write_transaction]\n"; }