Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions google/cloud/spanner/commit_options.cc
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,9 @@ CommitOptions::CommitOptions(Options const& opts)
if (opts.has<TransactionTagOption>()) {
transaction_tag_ = opts.get<TransactionTagOption>();
}
if (opts.has<MaxBatchingDelayMsOption>()) {
max_batching_delay_ms_ = opts.get<MaxBatchingDelayMsOption>();
}
}

CommitOptions::operator Options() const {
Expand Down
11 changes: 11 additions & 0 deletions google/cloud/spanner/commit_options.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,16 @@ class CommitOptions {
return request_priority_;
}

CommitOptions& set_max_batching_delay_ms(
int max_batching_delay_ms) {
max_batching_delay_ms_ = std::move(max_batching_delay_ms);
return *this;
}

absl::optional<int> max_batching_delay_ms() const {
return max_batching_delay_ms;
}

/**
* Set the transaction tag for the `spanner::Client::Commit()` call.
* Ignored for the overload that already takes a `spanner::Transaction`.
Expand All @@ -90,6 +100,7 @@ class CommitOptions {
// so we do not even provide a mechanism to specify one.
bool return_stats_ = false;
absl::optional<RequestPriority> request_priority_;
absl::optional<int> max_batching_delay_ms_;
absl::optional<std::string> transaction_tag_;
};

Expand Down
6 changes: 6 additions & 0 deletions google/cloud/spanner/internal/connection_impl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1025,6 +1025,12 @@ StatusOr<spanner::CommitResult> ConnectionImpl::CommitImpl(
request.mutable_request_options()->set_priority(
ProtoRequestPriority(params.options.request_priority()));

if (params.options.has<spanner::MaxBatchingDelayMsOption>()) {
*request.mutable_max_batching_delay() =
google::protobuf::util::TimeUtil::MillisecondsToDuration(
params.options.get<spanner::MaxBatchingDelayMsOption>());
}

// params.options.transaction_tag() was either already used to set
// ctx.tag (for a library-generated transaction), or it is ignored
// (for a user-supplied transaction).
Expand Down
9 changes: 9 additions & 0 deletions google/cloud/spanner/options.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,15 @@ struct RequestPriorityOption {
using Type = spanner::RequestPriority;
};

/**
* Option for `google::cloud::Options` to set a maximum batching delay.
*
* @ingroup spanner-options
*/
struct MaxBatchingDelayMsOption {
using Type = int;
};

/**
* Option for `google::cloud::Options` to set a per-request tag.
*
Expand Down
23 changes: 23 additions & 0 deletions google/cloud/spanner/samples/samples.cc
Original file line number Diff line number Diff line change
Expand Up @@ -3951,6 +3951,22 @@ void QueryInformationSchemaDatabaseOptions(
}
// [END spanner_query_information_schema_database_options]

// [START spanner_commit_with_batching_delay]
void UpdateDataWithBatchingDelay(google::cloud::spanner::Client client) {
namespace spanner = ::google::cloud::spanner;
Options ops;
ops.set<MaxBatchingDelayMsOption>(100);
auto commit_result = client.Commit(spanner::Mutations{
spanner::UpdateMutationBuilder("Albums",
{"SingerId", "AlbumId", "MarketingBudget"})
.EmplaceRow(1, 1, 100000)
.EmplaceRow(2, 2, 500000)
.Build()}, ops);
if (!commit_result) throw std::move(commit_result).status();
std::cout << "Update was successful [spanner_update_data]\n";
}
// [END spanner_set_batching_delay]

std::string Basename(absl::string_view name) {
auto last_sep = name.find_last_of("/\\");
if (last_sep != absl::string_view::npos) name.remove_prefix(last_sep + 1);
Expand Down Expand Up @@ -4147,6 +4163,8 @@ int RunOneCommand(std::vector<std::string> argv) {
make_command_entry("make-delete-mutation", MakeDeleteMutation),
make_command_entry("query-information-schema-database-options",
QueryInformationSchemaDatabaseOptions),
make_command_entry("spanner-commit-with-batching-delay",
UpdateDataWithBatchingDelay),
};

static std::string usage_msg = [&argv, &commands] {
Expand Down Expand Up @@ -4869,6 +4887,11 @@ void RunAll(bool emulator) {
QueryInformationSchemaDatabaseOptions(client);
}

if (!emulator) {
SampleBanner("spanner_commit_with_batching_delay");
UpdateDataWithBatchingDelay(client);
}

if (!emulator) {
SampleBanner("spanner_create_table_with_foreign_key_delete_cascade");
CreateTableWithForeignKeyDeleteCascade(database_admin_client, project_id,
Expand Down