Showing content from https://cloud.google.com/cpp/docs/reference/spanner/2.40.0/spanner-retry-policies below:
C++ Client Libraries | Google Cloud
Skip to main content
- Overview
-
Library reference docs
- Cloud Spanner C++ Client Library
-
Namespaces
-
google::cloud::spanner
- Overview
-
Classes
-
Structs
-
ExcludeTransactionFromChangeStreamsOption
-
QueryOptimizerStatisticsPackageOption
-
SessionPoolActionOnExhaustionOption
-
SessionPoolKeepAliveIntervalOption
-
SessionPoolMaxIdleSessionsOption
-
SessionPoolMaxSessionsPerChannelOption
-
StreamingResumabilityBufferSizeOption
-
Functions
- ToInteger(Decimal< Mode > const &, int)
- MakeNumeric(std::string)
- MakeNumeric(double)
- MakeNumeric(T, int)
- MakePgNumeric(std::string)
- MakePgNumeric(double)
- MakePgNumeric(T, int)
- MakeBackup(std::string const &)
- MakeConnection(spanner::Database const &, Options)
- MakeConnection(Database const &, ConnectionOptions const &, SessionPoolOptions)
- MakeConnection(Database const &, ConnectionOptions const &, SessionPoolOptions, std::unique_ptr< RetryPolicy >, std::unique_ptr< BackoffPolicy >)
- MakeDatabase(std::string const &)
- MakeDatabaseAdminConnection(Options)
- MakeDatabaseAdminConnection(ConnectionOptions const &)
- MakeDatabaseAdminConnection(ConnectionOptions const &, std::unique_ptr< RetryPolicy >, std::unique_ptr< BackoffPolicy >, std::unique_ptr< PollingPolicy >)
- MakeInstance(std::string const &)
- MakeInstanceAdminConnection(Options)
- MakeInstanceAdminConnection(ConnectionOptions const &)
- MakeInstanceAdminConnection(ConnectionOptions const &, std::unique_ptr< RetryPolicy >, std::unique_ptr< BackoffPolicy >, std::unique_ptr< PollingPolicy >)
- MakeInterval(absl::string_view)
- JustifyDays(Interval)
- JustifyHours(Interval)
- JustifyInterval(Interval)
- MakeKey(Ts &&...)
- MakeKeyBoundClosed(Ts &&...)
- MakeKeyBoundOpen(Ts &&...)
- MakeInsertMutation(std::string, std::vector< std::string >, Ts &&...)
- MakeUpdateMutation(std::string, std::vector< std::string >, Ts &&...)
- MakeInsertOrUpdateMutation(std::string, std::vector< std::string >, Ts &&...)
- MakeReplaceMutation(std::string, std::vector< std::string >, Ts &&...)
- MakeDeleteMutation(std::string, KeySet)
- MakeDecimal(std::string)
- MakeDecimal(double)
- MakeDecimal(T, int)
- ToDouble(Decimal< Mode > const &)
- ToOptions(PartitionOptions const &)
- ToPartitionOptions(Options const &)
- SerializeQueryPartition(QueryPartition const &)
- DeserializeQueryPartition(std::string const &)
- ToOptions(ReadOptions const &)
- ToReadOptions(Options const &)
- SerializeReadPartition(ReadPartition const &)
- DeserializeReadPartition(std::string const &)
- MakeTestRow(std::vector< std::pair< std::string, Value > >)
- MakeTestRow(Ts &&...)
- StreamOf(RowRange &&)
- GetSingularRow(RowRange)
- MakeTimestamp(absl::Time)
- MakeTimestamp(protobuf::Timestamp const &)
- MakeTimestamp(sys_time< Duration > const &)
- MakeReadOnlyTransaction(Transaction::ReadOnlyOptions)
- MakeReadWriteTransaction(Transaction::ReadWriteOptions)
- MakeReadWriteTransaction(Transaction const &, Transaction::ReadWriteOptions)
- MakeUuid(absl::string_view)
- MakeNullValue()
- VersionMajor()
- VersionMinor()
- VersionPatch()
- VersionPreRelease()
- Version()
- VersionString()
-
Operators
- operator==(Json const &, Json const &)
- operator!=(Json const &, Json const &)
- operator==(JsonB const &, JsonB const &)
- operator!=(JsonB const &, JsonB const &)
- operator==(ReplicaSelection const &, ReplicaSelection const &)
- operator!=(ReplicaSelection const &, ReplicaSelection const &)
- operator<<(std::ostream &, Json const &)
- operator<<(std::ostream &, JsonB const &)
- operator<<(std::ostream &, PgOid const &)
- operator==(PartitionOptions const &, PartitionOptions const &)
- operator!=(PartitionOptions const &, PartitionOptions const &)
- operator==(ReadOptions const &, ReadOptions const &)
- operator!=(ReadOptions const &, ReadOptions const &)
-
google::cloud::spanner_admin
- Overview
-
Classes
-
DatabaseAdminClient
- Overview
-
Functions
- ListDatabases(std::string const &, Options)
- ListDatabases(google::spanner::admin::database::v1::ListDatabasesRequest, Options)
- CreateDatabase(std::string const &, std::string const &, Options)
- CreateDatabase(NoAwaitTag, std::string const &, std::string const &, Options)
- CreateDatabase(google::spanner::admin::database::v1::CreateDatabaseRequest const &, Options)
- CreateDatabase(NoAwaitTag, google::spanner::admin::database::v1::CreateDatabaseRequest const &, Options)
- CreateDatabase(google::longrunning::Operation const &, Options)
- GetDatabase(std::string const &, Options)
- GetDatabase(google::spanner::admin::database::v1::GetDatabaseRequest const &, Options)
- UpdateDatabase(google::spanner::admin::database::v1::Database const &, google::protobuf::FieldMask const &, Options)
- UpdateDatabase(NoAwaitTag, google::spanner::admin::database::v1::Database const &, google::protobuf::FieldMask const &, Options)
- UpdateDatabase(google::spanner::admin::database::v1::UpdateDatabaseRequest const &, Options)
- UpdateDatabase(NoAwaitTag, google::spanner::admin::database::v1::UpdateDatabaseRequest const &, Options)
- UpdateDatabase(google::longrunning::Operation const &, Options)
- UpdateDatabaseDdl(std::string const &, std::vector< std::string > const &, Options)
- UpdateDatabaseDdl(NoAwaitTag, std::string const &, std::vector< std::string > const &, Options)
- UpdateDatabaseDdl(google::spanner::admin::database::v1::UpdateDatabaseDdlRequest const &, Options)
- UpdateDatabaseDdl(NoAwaitTag, google::spanner::admin::database::v1::UpdateDatabaseDdlRequest const &, Options)
- UpdateDatabaseDdl(google::longrunning::Operation const &, Options)
- DropDatabase(std::string const &, Options)
- DropDatabase(google::spanner::admin::database::v1::DropDatabaseRequest const &, Options)
- GetDatabaseDdl(std::string const &, Options)
- GetDatabaseDdl(google::spanner::admin::database::v1::GetDatabaseDdlRequest const &, Options)
- SetIamPolicy(std::string const &, google::iam::v1::Policy const &, Options)
- SetIamPolicy(std::string const &, IamUpdater const &, Options)
- SetIamPolicy(google::iam::v1::SetIamPolicyRequest const &, Options)
- GetIamPolicy(std::string const &, Options)
- GetIamPolicy(google::iam::v1::GetIamPolicyRequest const &, Options)
- TestIamPermissions(std::string const &, std::vector< std::string > const &, Options)
- TestIamPermissions(google::iam::v1::TestIamPermissionsRequest const &, Options)
- CreateBackup(std::string const &, google::spanner::admin::database::v1::Backup const &, std::string const &, Options)
- CreateBackup(NoAwaitTag, std::string const &, google::spanner::admin::database::v1::Backup const &, std::string const &, Options)
- CreateBackup(google::spanner::admin::database::v1::CreateBackupRequest const &, Options)
- CreateBackup(NoAwaitTag, google::spanner::admin::database::v1::CreateBackupRequest const &, Options)
- CreateBackup(google::longrunning::Operation const &, Options)
- CopyBackup(std::string const &, std::string const &, std::string const &, google::protobuf::Timestamp const &, Options)
- CopyBackup(NoAwaitTag, std::string const &, std::string const &, std::string const &, google::protobuf::Timestamp const &, Options)
- CopyBackup(google::spanner::admin::database::v1::CopyBackupRequest const &, Options)
- CopyBackup(NoAwaitTag, google::spanner::admin::database::v1::CopyBackupRequest const &, Options)
- CopyBackup(google::longrunning::Operation const &, Options)
- GetBackup(std::string const &, Options)
- GetBackup(google::spanner::admin::database::v1::GetBackupRequest const &, Options)
- UpdateBackup(google::spanner::admin::database::v1::Backup const &, google::protobuf::FieldMask const &, Options)
- UpdateBackup(google::spanner::admin::database::v1::UpdateBackupRequest const &, Options)
- DeleteBackup(std::string const &, Options)
- DeleteBackup(google::spanner::admin::database::v1::DeleteBackupRequest const &, Options)
- ListBackups(std::string const &, Options)
- ListBackups(google::spanner::admin::database::v1::ListBackupsRequest, Options)
- RestoreDatabase(std::string const &, std::string const &, std::string const &, Options)
- RestoreDatabase(NoAwaitTag, std::string const &, std::string const &, std::string const &, Options)
- RestoreDatabase(google::spanner::admin::database::v1::RestoreDatabaseRequest const &, Options)
- RestoreDatabase(NoAwaitTag, google::spanner::admin::database::v1::RestoreDatabaseRequest const &, Options)
- RestoreDatabase(google::longrunning::Operation const &, Options)
- ListDatabaseOperations(std::string const &, Options)
- ListDatabaseOperations(google::spanner::admin::database::v1::ListDatabaseOperationsRequest, Options)
- ListBackupOperations(std::string const &, Options)
- ListBackupOperations(google::spanner::admin::database::v1::ListBackupOperationsRequest, Options)
- ListDatabaseRoles(std::string const &, Options)
- ListDatabaseRoles(google::spanner::admin::database::v1::ListDatabaseRolesRequest, Options)
- AddSplitPoints(std::string const &, std::vector< google::spanner::admin::database::v1::SplitPoints > const &, Options)
- AddSplitPoints(google::spanner::admin::database::v1::AddSplitPointsRequest const &, Options)
- CreateBackupSchedule(std::string const &, google::spanner::admin::database::v1::BackupSchedule const &, std::string const &, Options)
- CreateBackupSchedule(google::spanner::admin::database::v1::CreateBackupScheduleRequest const &, Options)
- GetBackupSchedule(std::string const &, Options)
- GetBackupSchedule(google::spanner::admin::database::v1::GetBackupScheduleRequest const &, Options)
- UpdateBackupSchedule(google::spanner::admin::database::v1::BackupSchedule const &, google::protobuf::FieldMask const &, Options)
- UpdateBackupSchedule(google::spanner::admin::database::v1::UpdateBackupScheduleRequest const &, Options)
- DeleteBackupSchedule(std::string const &, Options)
- DeleteBackupSchedule(google::spanner::admin::database::v1::DeleteBackupScheduleRequest const &, Options)
- ListBackupSchedules(std::string const &, Options)
- ListBackupSchedules(google::spanner::admin::database::v1::ListBackupSchedulesRequest, Options)
- ListOperations(std::string const &, std::string const &, Options)
- ListOperations(google::longrunning::ListOperationsRequest, Options)
- GetOperation(std::string const &, Options)
- GetOperation(google::longrunning::GetOperationRequest const &, Options)
- DeleteOperation(std::string const &, Options)
- DeleteOperation(google::longrunning::DeleteOperationRequest const &, Options)
- CancelOperation(std::string const &, Options)
- CancelOperation(google::longrunning::CancelOperationRequest const &, Options)
-
DatabaseAdminConnectionIdempotencyPolicy
-
DatabaseAdminLimitedErrorCountRetryPolicy
-
DatabaseAdminLimitedTimeRetryPolicy
-
InstanceAdminClient
- Overview
-
Functions
- ListInstanceConfigs(std::string const &, Options)
- ListInstanceConfigs(google::spanner::admin::instance::v1::ListInstanceConfigsRequest, Options)
- GetInstanceConfig(std::string const &, Options)
- GetInstanceConfig(google::spanner::admin::instance::v1::GetInstanceConfigRequest const &, Options)
- CreateInstanceConfig(std::string const &, google::spanner::admin::instance::v1::InstanceConfig const &, std::string const &, Options)
- CreateInstanceConfig(NoAwaitTag, std::string const &, google::spanner::admin::instance::v1::InstanceConfig const &, std::string const &, Options)
- CreateInstanceConfig(google::spanner::admin::instance::v1::CreateInstanceConfigRequest const &, Options)
- CreateInstanceConfig(NoAwaitTag, google::spanner::admin::instance::v1::CreateInstanceConfigRequest const &, Options)
- CreateInstanceConfig(google::longrunning::Operation const &, Options)
- UpdateInstanceConfig(google::spanner::admin::instance::v1::InstanceConfig const &, google::protobuf::FieldMask const &, Options)
- UpdateInstanceConfig(NoAwaitTag, google::spanner::admin::instance::v1::InstanceConfig const &, google::protobuf::FieldMask const &, Options)
- UpdateInstanceConfig(google::spanner::admin::instance::v1::UpdateInstanceConfigRequest const &, Options)
- UpdateInstanceConfig(NoAwaitTag, google::spanner::admin::instance::v1::UpdateInstanceConfigRequest const &, Options)
- UpdateInstanceConfig(google::longrunning::Operation const &, Options)
- DeleteInstanceConfig(std::string const &, Options)
- DeleteInstanceConfig(google::spanner::admin::instance::v1::DeleteInstanceConfigRequest const &, Options)
- ListInstanceConfigOperations(std::string const &, Options)
- ListInstanceConfigOperations(google::spanner::admin::instance::v1::ListInstanceConfigOperationsRequest, Options)
- ListInstances(std::string const &, Options)
- ListInstances(google::spanner::admin::instance::v1::ListInstancesRequest, Options)
- ListInstancePartitions(std::string const &, Options)
- ListInstancePartitions(google::spanner::admin::instance::v1::ListInstancePartitionsRequest, Options)
- GetInstance(std::string const &, Options)
- GetInstance(google::spanner::admin::instance::v1::GetInstanceRequest const &, Options)
- CreateInstance(std::string const &, std::string const &, google::spanner::admin::instance::v1::Instance const &, Options)
- CreateInstance(NoAwaitTag, std::string const &, std::string const &, google::spanner::admin::instance::v1::Instance const &, Options)
- CreateInstance(google::spanner::admin::instance::v1::CreateInstanceRequest const &, Options)
- CreateInstance(NoAwaitTag, google::spanner::admin::instance::v1::CreateInstanceRequest const &, Options)
- CreateInstance(google::longrunning::Operation const &, Options)
- UpdateInstance(google::spanner::admin::instance::v1::Instance const &, google::protobuf::FieldMask const &, Options)
- UpdateInstance(NoAwaitTag, google::spanner::admin::instance::v1::Instance const &, google::protobuf::FieldMask const &, Options)
- UpdateInstance(google::spanner::admin::instance::v1::UpdateInstanceRequest const &, Options)
- UpdateInstance(NoAwaitTag, google::spanner::admin::instance::v1::UpdateInstanceRequest const &, Options)
- UpdateInstance(google::longrunning::Operation const &, Options)
- DeleteInstance(std::string const &, Options)
- DeleteInstance(google::spanner::admin::instance::v1::DeleteInstanceRequest const &, Options)
- SetIamPolicy(std::string const &, google::iam::v1::Policy const &, Options)
- SetIamPolicy(std::string const &, IamUpdater const &, Options)
- SetIamPolicy(google::iam::v1::SetIamPolicyRequest const &, Options)
- GetIamPolicy(std::string const &, Options)
- GetIamPolicy(google::iam::v1::GetIamPolicyRequest const &, Options)
- TestIamPermissions(std::string const &, std::vector< std::string > const &, Options)
- TestIamPermissions(google::iam::v1::TestIamPermissionsRequest const &, Options)
- GetInstancePartition(std::string const &, Options)
- GetInstancePartition(google::spanner::admin::instance::v1::GetInstancePartitionRequest const &, Options)
- CreateInstancePartition(std::string const &, google::spanner::admin::instance::v1::InstancePartition const &, std::string const &, Options)
- CreateInstancePartition(NoAwaitTag, std::string const &, google::spanner::admin::instance::v1::InstancePartition const &, std::string const &, Options)
- CreateInstancePartition(google::spanner::admin::instance::v1::CreateInstancePartitionRequest const &, Options)
- CreateInstancePartition(NoAwaitTag, google::spanner::admin::instance::v1::CreateInstancePartitionRequest const &, Options)
- CreateInstancePartition(google::longrunning::Operation const &, Options)
- DeleteInstancePartition(std::string const &, Options)
- DeleteInstancePartition(google::spanner::admin::instance::v1::DeleteInstancePartitionRequest const &, Options)
- UpdateInstancePartition(google::spanner::admin::instance::v1::InstancePartition const &, google::protobuf::FieldMask const &, Options)
- UpdateInstancePartition(NoAwaitTag, google::spanner::admin::instance::v1::InstancePartition const &, google::protobuf::FieldMask const &, Options)
- UpdateInstancePartition(google::spanner::admin::instance::v1::UpdateInstancePartitionRequest const &, Options)
- UpdateInstancePartition(NoAwaitTag, google::spanner::admin::instance::v1::UpdateInstancePartitionRequest const &, Options)
- UpdateInstancePartition(google::longrunning::Operation const &, Options)
- ListInstancePartitionOperations(std::string const &, Options)
- ListInstancePartitionOperations(google::spanner::admin::instance::v1::ListInstancePartitionOperationsRequest, Options)
- MoveInstance(google::spanner::admin::instance::v1::MoveInstanceRequest const &, Options)
- MoveInstance(NoAwaitTag, google::spanner::admin::instance::v1::MoveInstanceRequest const &, Options)
- MoveInstance(google::longrunning::Operation const &, Options)
- ListOperations(std::string const &, std::string const &, Options)
- ListOperations(google::longrunning::ListOperationsRequest, Options)
- GetOperation(std::string const &, Options)
- GetOperation(google::longrunning::GetOperationRequest const &, Options)
- DeleteOperation(std::string const &, Options)
- DeleteOperation(google::longrunning::DeleteOperationRequest const &, Options)
- CancelOperation(std::string const &, Options)
- CancelOperation(google::longrunning::CancelOperationRequest const &, Options)
-
InstanceAdminConnectionIdempotencyPolicy
-
InstanceAdminLimitedErrorCountRetryPolicy
-
InstanceAdminLimitedTimeRetryPolicy
-
Structs
-
DatabaseAdminBackoffPolicyOption
-
DatabaseAdminConnectionIdempotencyPolicyOption
-
DatabaseAdminPollingPolicyOption
-
InstanceAdminBackoffPolicyOption
-
InstanceAdminConnectionIdempotencyPolicyOption
-
InstanceAdminPollingPolicyOption
-
google::cloud::spanner_admin_mocks
-
google::cloud::spanner_experimental
Stay organized with collections Save and categorize content based on your preferences.
Override Retry, Backoff, and Re-Run Policies
When it is safe to do so, the library automatically retries requests that fail due to a transient error. The library then uses [exponential backoff] to delay before trying again. Which operations are considered safe to retry, which errors are treated as transient failures, the parameters of the exponential backoff algorithm, and the limits of library retries, are all configurable via policies.
The library provides defaults for any policy that is not set. This document provides examples showing how to override those default policies.
The policies can be set when a Connection
, object is created. Some of the policies can also be overridden when the corresponding Client
object is created. This can be useful if multiple Client
objects share the same Connection
object, but you want different retry behavior in some of those clients. Finally, some retry policies can be overridden when calling a specific Client
member function.
The library uses two different policy options to control the retry loops.
Configuring the transient errors and retry duration
The SpannerRetryPolicyOption
controls:
- Which errors are to be treated as transient errors.
- How long the library will keep retrying transient errors.
You can provide your own class for this option. The library also provides two built-in policies:
LimitedErrorCountRetryPolicy
: stops retrying after a specified number of transient errors.
LimitedTimeRetryPolicy
: stops retrying after a specified time.
In most cases, only kUnavailable and kResourceExhausted are treated as a transient errors.
See Also
google::cloud::spanner::SpannerRetryPolicyOption
See Also
google::cloud::spanner::RetryPolicy
See Also
google::cloud::spanner::LimitedErrorCountRetryPolicy
See Also
google::cloud::spanner::LimitedTimeRetryPolicy
Controlling the backoff algorithm
The SpannerBackoffPolicyOption
controls how long the client library will wait before retrying a request that failed with a transient error. You can provide your own class for this option.
The only built-in backoff policy is ExponentialBackoffPolicy
. This class implements a truncated exponential backoff algorithm, with jitter. In summary, it doubles the current backoff time after each failure. The actual backoff time for an RPC is chosen at random, but never exceeds the current backoff. The current backoff is doubled after each failure, but never exceeds (or is "truncated" if it reaches) a prescribed maximum.
See Also
google::cloud::spanner::SpannerBackoffPolicyOption
See Also
google::cloud::spanner::BackoffPolicy
See Also
google::cloud::spanner::ExponentialBackoffPolicy
Example
For example, this will override the retry and backoff policies through options passed to spanner::MakeConnection()
:
namespace spanner = ::google::cloud::spanner;
using ::google::cloud::StatusOr;
[](std::string const& project_id, std::string const& instance_id,
std::string const& database_id) {
// Use a truncated exponential backoff with jitter to wait between
// retries:
// https://en.wikipedia.org/wiki/Exponential_backoff
// https://cloud.google.com/storage/docs/exponential-backoff
auto client = spanner::Client(spanner::MakeConnection(
spanner::Database(project_id, instance_id, database_id),
google::cloud::Options{}
.set<spanner::SpannerRetryPolicyOption>(
std::make_shared<spanner::LimitedTimeRetryPolicy>(
/*maximum_duration=*/std::chrono::seconds(60)))
.set<spanner::SpannerBackoffPolicyOption>(
std::make_shared<spanner::ExponentialBackoffPolicy>(
/*initial_delay=*/std::chrono::milliseconds(500),
/*maximum_delay=*/std::chrono::seconds(16),
/*scaling=*/1.5))));
std::int64_t rows_inserted;
auto commit_result = client.Commit(
[&client, &rows_inserted](
spanner::Transaction txn) -> StatusOr<spanner::Mutations> {
auto insert = client.ExecuteDml(
std::move(txn),
spanner::SqlStatement(
"INSERT INTO Singers (SingerId, FirstName, LastName)"
" VALUES (20, 'George', 'Washington')"));
if (!insert) return std::move(insert).status();
rows_inserted = insert->RowsModified();
return spanner::Mutations{};
});
if (!commit_result) throw std::move(commit_result).status();
std::cout << "Rows inserted: " << rows_inserted;
}
Controlling which commits are rerunnable
The library also uses a special TransactionRerunPolicy
to control how the commit of a read-write transaction will be reattempted after a failure with a rerunnable status (typically kAborted). The lock priority of the commit increases after each rerun, meaning that the next attempt has a slightly better chance of success.
You can provide your own class for this policy. The library also provides two built-in policies:
LimitedErrorCountTransactionRerunPolicy
: stops rerunning the commit after a specified number of rerunnable errors.
LimitedTimeTransactionRerunPolicy
: stops rerunnable the commit after a specified time.
void CommitWithPolicies(google::cloud::spanner::Client client) {
using ::google::cloud::StatusOr;
namespace spanner = ::google::cloud::spanner;
auto commit = client.Commit(
[&client](spanner::Transaction txn) -> StatusOr<spanner::Mutations> {
auto update = client.ExecuteDml(
std::move(txn),
spanner::SqlStatement(
"UPDATE Albums SET MarketingBudget = MarketingBudget * 2"
" WHERE SingerId = 1 AND AlbumId = 1"));
if (!update) return std::move(update).status();
return spanner::Mutations{};
},
// Retry for up to 42 minutes.
spanner::LimitedTimeTransactionRerunPolicy(std::chrono::minutes(42))
.clone(),
// After a failure backoff for 2 seconds (with jitter), then triple the
// backoff time on each retry, up to 5 minutes.
spanner::ExponentialBackoffPolicy(std::chrono::seconds(2),
std::chrono::minutes(5), 3.0)
.clone());
if (!commit) throw std::move(commit).status();
std::cout << "commit-with-policies was successful\n";
}
See Also
google::cloud::spanner::TransactionRerunPolicy
See Also
google::cloud::spanner::LimitedErrorCountTransactionRerunPolicy
See Also
google::cloud::spanner::LimitedTimeTransactionRerunPolicy
More Information See Also
google::cloud::Options
See Also
google::cloud::RetryPolicy
See Also
google::cloud::BackoffPolicy
Follow these links to find examples for other spanner *Client
classes:
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-14 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-14 UTC."],[],[]]
RetroSearch is an open source project built by @garambo
| Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4