16 #include "google/cloud/spanner/internal/time_utils.h" 24 namespace gcsa = ::google::spanner::admin::database::v1;
30 Database db, std::vector<std::string> extra_statements) {
31 return conn_->CreateDatabase({std::move(db), std::move(extra_statements)});
35 return conn_->GetDatabase({std::move(db)});
40 return conn_->GetDatabaseDdl({std::move(db)});
43 future<StatusOr<gcsa::UpdateDatabaseDdlMetadata>>
45 std::vector<std::string> statements) {
46 return conn_->UpdateDatabase({std::move(db), std::move(statements)});
50 return conn_->ListDatabases({std::move(in)});
54 return conn_->DropDatabase({std::move(db)});
59 return conn_->RestoreDatabase({std::move(db), backup.
FullName()});
63 Database db, google::spanner::admin::database::v1::Backup
const& backup) {
64 return conn_->RestoreDatabase({std::move(db), backup.name()});
69 return conn_->GetIamPolicy({std::move(db)});
73 Database db, google::iam::v1::Policy policy) {
74 return conn_->SetIamPolicy({std::move(db), std::move(policy)});
79 auto const rerun_maximum_duration = std::chrono::minutes(15);
80 auto default_rerun_policy =
83 auto const backoff_initial_delay = std::chrono::milliseconds(1000);
84 auto const backoff_maximum_delay = std::chrono::minutes(5);
85 auto const backoff_scaling = 2.0;
86 auto default_backoff_policy =
91 return SetIamPolicy(db, updater, std::move(default_rerun_policy),
92 std::move(default_backoff_policy));
97 std::unique_ptr<TransactionRerunPolicy> rerun_policy,
98 std::unique_ptr<BackoffPolicy> backoff_policy) {
99 using RerunnablePolicy = internal::SafeTransactionRerun;
104 if (!current_policy) {
105 last_status = std::move(current_policy).status();
107 auto etag = current_policy->etag();
108 auto desired = updater(*current_policy);
109 if (!desired.has_value()) {
110 return current_policy;
112 desired->set_etag(std::move(etag));
114 if (RerunnablePolicy::IsOk(result.status())) {
117 last_status = std::move(result).status();
119 if (!rerun_policy->OnFailure(last_status))
break;
120 std::this_thread::sleep_for(backoff_policy->OnCompletion());
121 }
while (!rerun_policy->IsExhausted());
125 StatusOr<google::iam::v1::TestIamPermissionsResponse>
127 std::vector<std::string> permissions) {
128 return conn_->TestIamPermissions({std::move(db), std::move(permissions)});
133 std::chrono::system_clock::time_point expire_time) {
134 return conn_->CreateBackup(
135 {std::move(db), std::move(backup_id), expire_time});
139 return conn_->GetBackup({backup.
FullName()});
143 google::spanner::admin::database::v1::Backup
const& backup) {
144 return conn_->DeleteBackup({backup.name()});
148 return conn_->DeleteBackup({backup.
FullName()});
152 std::string filter) {
153 return conn_->ListBackups({std::move(in), std::move(filter)});
157 google::spanner::admin::database::v1::Backup
const& backup,
158 std::chrono::system_clock::time_point
const& expire_time) {
159 auto proto_expire_time =
160 internal::ConvertTimePointToProtoTimestamp(expire_time);
161 if (!proto_expire_time) {
162 return proto_expire_time.status();
164 google::spanner::admin::database::v1::UpdateBackupRequest request;
165 request.mutable_backup()->set_name(backup.name());
166 *request.mutable_backup()->mutable_expire_time() = *proto_expire_time;
167 request.mutable_update_mask()->add_paths(
"expire_time");
168 return conn_->UpdateBackup({request});
173 std::chrono::system_clock::time_point
const& expire_time) {
174 auto proto_expire_time =
175 internal::ConvertTimePointToProtoTimestamp(expire_time);
176 if (!proto_expire_time) {
177 return proto_expire_time.status();
179 google::spanner::admin::database::v1::UpdateBackupRequest request;
180 request.mutable_backup()->set_name(backup.
FullName());
181 *request.mutable_backup()->mutable_expire_time() = *proto_expire_time;
182 request.mutable_update_mask()->add_paths(
"expire_time");
183 return conn_->UpdateBackup({request});
188 return conn_->ListBackupOperations({std::move(in), std::move(filter)});
193 return conn_->ListDatabaseOperations({std::move(in), std::move(filter)});
This class identifies a Cloud Spanner Backup.
google::cloud::internal::PaginationRange< google::spanner::admin::database::v1::Backup, google::spanner::admin::database::v1::ListBackupsRequest, google::spanner::admin::database::v1::ListBackupsResponse > ListBackupsRange
An input range to stream backups in Cloud Spanner instance.
google::cloud::internal::PaginationRange< google::longrunning::Operation, google::spanner::admin::database::v1::ListBackupOperationsRequest, google::spanner::admin::database::v1::ListBackupOperationsResponse > ListBackupOperationsRange
An input range to stream backup operations in Cloud Spanner instance.
future< StatusOr< google::spanner::admin::database::v1::Database > > RestoreDatabase(Database db, Backup const &backup)
Create a new database by restoring from a completed backup.
Status DeleteBackup(google::spanner::admin::database::v1::Backup const &backup)
Deletes a pending or completed Backup.
ListDatabaseRange ListDatabases(Instance in)
List all the databases in a give project and instance.
This class identifies a Cloud Spanner Instance.
StatusOr< google::spanner::admin::database::v1::Backup > UpdateBackupExpireTime(google::spanner::admin::database::v1::Backup const &backup, std::chrono::system_clock::time_point const &expire_time)
Update backup's expire_time.
StatusOr< google::iam::v1::Policy > SetIamPolicy(Database db, google::iam::v1::Policy policy)
Set the IAM policy for the given database.
future< StatusOr< google::spanner::admin::database::v1::UpdateDatabaseDdlMetadata > > UpdateDatabase(Database db, std::vector< std::string > statements)
Updates the database using a series of DDL statements.
google::cloud::internal::LimitedTimeRetryPolicy< google::cloud::Status, internal::SafeTransactionRerun > LimitedTimeTransactionRerunPolicy
A transaction rerun policy that limits the duration of the rerun loop.
Contains all the Cloud Spanner C++ client types and functions.
StatusOr< google::spanner::admin::database::v1::Backup > GetBackup(Backup const &backup)
Retrieve metadata information about a Backup.
StatusOr< google::spanner::admin::database::v1::GetDatabaseDdlResponse > GetDatabaseDdl(Database db)
Retrieve a database schema.
StatusOr< google::spanner::admin::database::v1::Database > GetDatabase(Database db)
Retrieve metadata information about a database.
ListBackupOperationsRange ListBackupOperations(Instance in, std::string filter={})
List all the backup operations in a given project and instance that match the filter.
Status DropDatabase(Database db)
Drops (deletes) an existing Cloud Spanner database.
google::cloud::ConnectionOptions< ConnectionOptionsTraits > ConnectionOptions
The options for Cloud Spanner connections.
future< StatusOr< google::spanner::admin::database::v1::Database > > CreateDatabase(Database db, std::vector< std::string > extra_statements={})
Creates a new Cloud Spanner database in the given project and instance.
StatusOr< google::iam::v1::Policy > GetIamPolicy(Database db)
Gets the IAM policy for a database.
google::cloud::internal::ExponentialBackoffPolicy ExponentialBackoffPolicy
A truncated exponential backoff policy with randomized periods.
#define SPANNER_CLIENT_NS
StatusOr< google::iam::v1::TestIamPermissionsResponse > TestIamPermissions(Database db, std::vector< std::string > permissions)
Get the subset of the permissions the caller has on the given database.
ListDatabaseOperationsRange ListDatabaseOperations(Instance in, std::string filter={})
List all the database operations in a given project and instance that match the filter.
ListBackupsRange ListBackups(Instance in, std::string filter={})
List all the backups in a given project and instance that match the filter.
google::cloud::internal::PaginationRange< google::spanner::admin::database::v1::Database, google::spanner::admin::database::v1::ListDatabasesRequest, google::spanner::admin::database::v1::ListDatabasesResponse > ListDatabaseRange
An input range to stream all the databases in a Cloud Spanner instance.
std::function< optional< google::iam::v1::Policy >(google::iam::v1::Policy)> IamUpdater
This class identifies a Cloud Spanner Database.
std::string FullName() const
Returns the fully qualified backup name as a string of the form: "projects/<project-id>/instances/<in...
google::cloud::internal::PaginationRange< google::longrunning::Operation, google::spanner::admin::database::v1::ListDatabaseOperationsRequest, google::spanner::admin::database::v1::ListDatabaseOperationsResponse > ListDatabaseOperationsRange
An input range to stream database operations in Cloud Spanner instance.
std::shared_ptr< DatabaseAdminConnection > MakeDatabaseAdminConnection(ConnectionOptions const &options)
Returns an DatabaseAdminConnection object that can be used for interacting with Cloud Spanner's admin...
future< StatusOr< google::spanner::admin::database::v1::Backup > > CreateBackup(Database db, std::string backup_id, std::chrono::system_clock::time_point expire_time)
Creates a new Cloud Spanner backup for the given database.