Skip to content
Merged
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
27 changes: 25 additions & 2 deletions google/cloud/spanner/database_admin_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "google/cloud/internal/disable_deprecation_warnings.inc"
#include "google/cloud/spanner/database_admin_client.h"
#include "google/cloud/spanner/timestamp.h"
#include "google/cloud/options.h"
#include <algorithm>

namespace google {
Expand All @@ -31,53 +32,63 @@ DatabaseAdminClient::DatabaseAdminClient(ConnectionOptions const& options)
future<StatusOr<gcsa::Database>> DatabaseAdminClient::CreateDatabase(
Database db, std::vector<std::string> extra_statements,
EncryptionConfig encryption_config) {
internal::OptionsSpan span(conn_->options());
return conn_->CreateDatabase({std::move(db), std::move(extra_statements),
std::move(encryption_config)});
}

StatusOr<gcsa::Database> DatabaseAdminClient::GetDatabase(Database db) {
internal::OptionsSpan span(conn_->options());
return conn_->GetDatabase({std::move(db)});
}

StatusOr<gcsa::GetDatabaseDdlResponse> DatabaseAdminClient::GetDatabaseDdl(
Database db) {
internal::OptionsSpan span(conn_->options());
return conn_->GetDatabaseDdl({std::move(db)});
}

future<StatusOr<gcsa::UpdateDatabaseDdlMetadata>>
DatabaseAdminClient::UpdateDatabase(Database db,
std::vector<std::string> statements) {
internal::OptionsSpan span(conn_->options());
return conn_->UpdateDatabase({std::move(db), std::move(statements)});
}

ListDatabaseRange DatabaseAdminClient::ListDatabases(Instance in) {
internal::OptionsSpan span(conn_->options());
return conn_->ListDatabases({std::move(in)});
}

Status DatabaseAdminClient::DropDatabase(Database db) {
internal::OptionsSpan span(conn_->options());
return conn_->DropDatabase({std::move(db)});
}

future<StatusOr<gcsa::Database>> DatabaseAdminClient::RestoreDatabase(
Database db, Backup const& backup, EncryptionConfig encryption_config) {
internal::OptionsSpan span(conn_->options());
return conn_->RestoreDatabase(
{std::move(db), backup.FullName(), std::move(encryption_config)});
}

future<StatusOr<gcsa::Database>> DatabaseAdminClient::RestoreDatabase(
Database db, google::spanner::admin::database::v1::Backup const& backup,
EncryptionConfig encryption_config) {
internal::OptionsSpan span(conn_->options());
return conn_->RestoreDatabase(
{std::move(db), backup.name(), std::move(encryption_config)});
}

StatusOr<google::iam::v1::Policy> DatabaseAdminClient::GetIamPolicy(
Database db) {
internal::OptionsSpan span(conn_->options());
return conn_->GetIamPolicy({std::move(db)});
}

StatusOr<google::iam::v1::Policy> DatabaseAdminClient::SetIamPolicy(
Database db, google::iam::v1::Policy policy) {
internal::OptionsSpan span(conn_->options());
return conn_->SetIamPolicy({std::move(db), std::move(policy)});
}

Expand All @@ -103,11 +114,12 @@ StatusOr<google::iam::v1::Policy> DatabaseAdminClient::SetIamPolicy(
Database const& db, IamUpdater const& updater,
std::unique_ptr<TransactionRerunPolicy> rerun_policy,
std::unique_ptr<BackoffPolicy> backoff_policy) {
internal::OptionsSpan span(conn_->options());
using RerunnablePolicy = spanner_internal::SafeTransactionRerun;

Status last_status;
do {
auto current_policy = GetIamPolicy(db);
auto current_policy = conn_->GetIamPolicy({db});
if (!current_policy) {
last_status = std::move(current_policy).status();
} else {
Expand All @@ -117,7 +129,7 @@ StatusOr<google::iam::v1::Policy> DatabaseAdminClient::SetIamPolicy(
return current_policy;
}
desired->set_etag(std::move(etag));
auto result = SetIamPolicy(db, *std::move(desired));
auto result = conn_->SetIamPolicy({db, *std::move(desired)});
if (RerunnablePolicy::IsOk(result.status())) {
return result;
}
Expand All @@ -132,13 +144,15 @@ StatusOr<google::iam::v1::Policy> DatabaseAdminClient::SetIamPolicy(
StatusOr<google::iam::v1::TestIamPermissionsResponse>
DatabaseAdminClient::TestIamPermissions(Database db,
std::vector<std::string> permissions) {
internal::OptionsSpan span(conn_->options());
return conn_->TestIamPermissions({std::move(db), std::move(permissions)});
}

future<StatusOr<gcsa::Backup>> DatabaseAdminClient::CreateBackup(
Database db, std::string backup_id, Timestamp expire_time,
absl::optional<Timestamp> version_time,
EncryptionConfig encryption_config) {
internal::OptionsSpan span(conn_->options());
auto expire_time_point =
expire_time.get<std::chrono::system_clock::time_point>();
if (!expire_time_point) {
Expand All @@ -152,32 +166,38 @@ future<StatusOr<gcsa::Backup>> DatabaseAdminClient::CreateBackup(
future<StatusOr<gcsa::Backup>> DatabaseAdminClient::CreateBackup(
Database db, std::string backup_id,
std::chrono::system_clock::time_point expire_time) {
internal::OptionsSpan span(conn_->options());
auto ts = MakeTimestamp(expire_time);
if (!ts) return make_ready_future(StatusOr<gcsa::Backup>(ts.status()));
return CreateBackup(std::move(db), std::move(backup_id), *ts);
}

StatusOr<gcsa::Backup> DatabaseAdminClient::GetBackup(Backup const& backup) {
internal::OptionsSpan span(conn_->options());
return conn_->GetBackup({backup.FullName()});
}

Status DatabaseAdminClient::DeleteBackup(
google::spanner::admin::database::v1::Backup const& backup) {
internal::OptionsSpan span(conn_->options());
return conn_->DeleteBackup({backup.name()});
}

Status DatabaseAdminClient::DeleteBackup(Backup const& backup) {
internal::OptionsSpan span(conn_->options());
return conn_->DeleteBackup({backup.FullName()});
}

ListBackupsRange DatabaseAdminClient::ListBackups(Instance in,
std::string filter) {
internal::OptionsSpan span(conn_->options());
return conn_->ListBackups({std::move(in), std::move(filter)});
}

StatusOr<gcsa::Backup> DatabaseAdminClient::UpdateBackupExpireTime(
google::spanner::admin::database::v1::Backup const& backup,
Timestamp expire_time) {
internal::OptionsSpan span(conn_->options());
google::spanner::admin::database::v1::UpdateBackupRequest request;
request.mutable_backup()->set_name(backup.name());
*request.mutable_backup()->mutable_expire_time() =
Expand All @@ -188,6 +208,7 @@ StatusOr<gcsa::Backup> DatabaseAdminClient::UpdateBackupExpireTime(

StatusOr<gcsa::Backup> DatabaseAdminClient::UpdateBackupExpireTime(
Backup const& backup, Timestamp expire_time) {
internal::OptionsSpan span(conn_->options());
google::spanner::admin::database::v1::UpdateBackupRequest request;
request.mutable_backup()->set_name(backup.FullName());
*request.mutable_backup()->mutable_expire_time() =
Expand All @@ -214,11 +235,13 @@ StatusOr<gcsa::Backup> DatabaseAdminClient::UpdateBackupExpireTime(

ListBackupOperationsRange DatabaseAdminClient::ListBackupOperations(
Instance in, std::string filter) {
internal::OptionsSpan span(conn_->options());
return conn_->ListBackupOperations({std::move(in), std::move(filter)});
}

ListDatabaseOperationsRange DatabaseAdminClient::ListDatabaseOperations(
Instance in, std::string filter) {
internal::OptionsSpan span(conn_->options());
return conn_->ListDatabaseOperations({std::move(in), std::move(filter)});
}

Expand Down
15 changes: 9 additions & 6 deletions google/cloud/spanner/database_admin_connection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -117,18 +117,20 @@ class DatabaseAdminConnectionImpl : public DatabaseAdminConnection {
// Note all the policies will be set to their default non-null values in the
// `MakeDatabaseAdminConnection()` function below.
explicit DatabaseAdminConnectionImpl(
std::shared_ptr<spanner_internal::DatabaseAdminStub> stub,
Options const& opts)
std::shared_ptr<spanner_internal::DatabaseAdminStub> stub, Options opts)
: stub_(std::move(stub)),
retry_policy_prototype_(opts.get<SpannerRetryPolicyOption>()->clone()),
opts_(std::move(opts)),
retry_policy_prototype_(opts_.get<SpannerRetryPolicyOption>()->clone()),
backoff_policy_prototype_(
opts.get<SpannerBackoffPolicyOption>()->clone()),
opts_.get<SpannerBackoffPolicyOption>()->clone()),
polling_policy_prototype_(
opts.get<SpannerPollingPolicyOption>()->clone()),
background_threads_(internal::MakeBackgroundThreadsFactory(opts)()) {}
opts_.get<SpannerPollingPolicyOption>()->clone()),
background_threads_(internal::MakeBackgroundThreadsFactory(opts_)()) {}

~DatabaseAdminConnectionImpl() override = default;

Options options() override { return opts_; }

future<StatusOr<google::spanner::admin::database::v1::Database>>
CreateDatabase(CreateDatabaseParams p) override {
gcsa::CreateDatabaseRequest request;
Expand Down Expand Up @@ -593,6 +595,7 @@ class DatabaseAdminConnectionImpl : public DatabaseAdminConnection {

private:
std::shared_ptr<spanner_internal::DatabaseAdminStub> stub_;
Options opts_;
std::unique_ptr<RetryPolicy const> retry_policy_prototype_;
std::unique_ptr<BackoffPolicy const> backoff_policy_prototype_;
std::unique_ptr<PollingPolicy const> polling_policy_prototype_;
Expand Down
3 changes: 3 additions & 0 deletions google/cloud/spanner/database_admin_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
#include "google/cloud/spanner/version.h"
#include "google/cloud/backoff_policy.h"
#include "google/cloud/internal/pagination_range.h"
#include "google/cloud/options.h"
#include "absl/types/optional.h"
#include <google/spanner/admin/database/v1/spanner_database_admin.pb.h>
#include <chrono>
Expand Down Expand Up @@ -240,6 +241,8 @@ class GOOGLE_CLOUD_CPP_SPANNER_ADMIN_API_DEPRECATED("DatabaseAdminConnection")
};
//@}

virtual Options options() { return Options{}; }

/// Define the interface for a google.spanner.v1.DatabaseAdmin.CreateDatabase
/// RPC.
virtual future<StatusOr<google::spanner::admin::database::v1::Database>>
Expand Down
16 changes: 14 additions & 2 deletions google/cloud/spanner/instance_admin_client.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
// TODO(#7356): Remove this file after the deprecation period expires
#include "google/cloud/internal/disable_deprecation_warnings.inc"
#include "google/cloud/spanner/instance_admin_client.h"
#include "google/cloud/options.h"

namespace google {
namespace cloud {
Expand All @@ -23,49 +24,58 @@ GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN

StatusOr<google::spanner::admin::instance::v1::Instance>
InstanceAdminClient::GetInstance(Instance const& in) {
internal::OptionsSpan span(conn_->options());
return conn_->GetInstance({in.FullName()});
}

future<StatusOr<google::spanner::admin::instance::v1::Instance>>
InstanceAdminClient::CreateInstance(
google::spanner::admin::instance::v1::CreateInstanceRequest const&
request) {
internal::OptionsSpan span(conn_->options());
return conn_->CreateInstance({request});
}

future<StatusOr<google::spanner::admin::instance::v1::Instance>>
InstanceAdminClient::UpdateInstance(
google::spanner::admin::instance::v1::UpdateInstanceRequest const&
request) {
internal::OptionsSpan span(conn_->options());
return conn_->UpdateInstance({request});
}

Status InstanceAdminClient::DeleteInstance(Instance const& in) {
internal::OptionsSpan span(conn_->options());
return conn_->DeleteInstance({in.FullName()});
}

StatusOr<google::spanner::admin::instance::v1::InstanceConfig>
InstanceAdminClient::GetInstanceConfig(std::string const& name) {
internal::OptionsSpan span(conn_->options());
return conn_->GetInstanceConfig({name});
}

ListInstanceConfigsRange InstanceAdminClient::ListInstanceConfigs(
std::string project_id) {
internal::OptionsSpan span(conn_->options());
return conn_->ListInstanceConfigs({std::move(project_id)});
}

ListInstancesRange InstanceAdminClient::ListInstances(std::string project_id,
std::string filter) {
internal::OptionsSpan span(conn_->options());
return conn_->ListInstances({std::move(project_id), std::move(filter)});
}

StatusOr<google::iam::v1::Policy> InstanceAdminClient::GetIamPolicy(
Instance const& in) {
internal::OptionsSpan span(conn_->options());
return conn_->GetIamPolicy({in.FullName()});
}

StatusOr<google::iam::v1::Policy> InstanceAdminClient::SetIamPolicy(
Instance const& in, google::iam::v1::Policy policy) {
internal::OptionsSpan span(conn_->options());
return conn_->SetIamPolicy({in.FullName(), std::move(policy)});
}

Expand All @@ -91,11 +101,12 @@ StatusOr<google::iam::v1::Policy> InstanceAdminClient::SetIamPolicy(
Instance const& in, IamUpdater const& updater,
std::unique_ptr<TransactionRerunPolicy> rerun_policy,
std::unique_ptr<BackoffPolicy> backoff_policy) {
internal::OptionsSpan span(conn_->options());
using RerunnablePolicy = spanner_internal::SafeTransactionRerun;

Status last_status;
do {
auto current_policy = GetIamPolicy(in);
auto current_policy = conn_->GetIamPolicy({in.FullName()});
if (!current_policy) {
last_status = std::move(current_policy).status();
} else {
Expand All @@ -105,7 +116,7 @@ StatusOr<google::iam::v1::Policy> InstanceAdminClient::SetIamPolicy(
return current_policy;
}
desired->set_etag(std::move(etag));
auto result = SetIamPolicy(in, *std::move(desired));
auto result = conn_->SetIamPolicy({in.FullName(), *std::move(desired)});
if (RerunnablePolicy::IsOk(result.status())) {
return result;
}
Expand All @@ -120,6 +131,7 @@ StatusOr<google::iam::v1::Policy> InstanceAdminClient::SetIamPolicy(
StatusOr<google::iam::v1::TestIamPermissionsResponse>
InstanceAdminClient::TestIamPermissions(Instance const& in,
std::vector<std::string> permissions) {
internal::OptionsSpan span(conn_->options());
return conn_->TestIamPermissions({in.FullName(), std::move(permissions)});
}

Expand Down
15 changes: 9 additions & 6 deletions google/cloud/spanner/instance_admin_connection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,20 @@ namespace {
class InstanceAdminConnectionImpl : public InstanceAdminConnection {
public:
InstanceAdminConnectionImpl(
std::shared_ptr<spanner_internal::InstanceAdminStub> stub,
Options const& opts)
std::shared_ptr<spanner_internal::InstanceAdminStub> stub, Options opts)
: stub_(std::move(stub)),
retry_policy_prototype_(opts.get<SpannerRetryPolicyOption>()->clone()),
opts_(std::move(opts)),
retry_policy_prototype_(opts_.get<SpannerRetryPolicyOption>()->clone()),
backoff_policy_prototype_(
opts.get<SpannerBackoffPolicyOption>()->clone()),
opts_.get<SpannerBackoffPolicyOption>()->clone()),
polling_policy_prototype_(
opts.get<SpannerPollingPolicyOption>()->clone()),
background_threads_(internal::MakeBackgroundThreadsFactory(opts)()) {}
opts_.get<SpannerPollingPolicyOption>()->clone()),
background_threads_(internal::MakeBackgroundThreadsFactory(opts_)()) {}

~InstanceAdminConnectionImpl() override = default;

Options options() override { return opts_; }

StatusOr<gcsa::Instance> GetInstance(GetInstanceParams gip) override {
gcsa::GetInstanceRequest request;
request.set_name(std::move(gip.instance_name));
Expand Down Expand Up @@ -258,6 +260,7 @@ class InstanceAdminConnectionImpl : public InstanceAdminConnection {

private:
std::shared_ptr<spanner_internal::InstanceAdminStub> stub_;
Options opts_;
std::unique_ptr<RetryPolicy const> retry_policy_prototype_;
std::unique_ptr<BackoffPolicy const> backoff_policy_prototype_;
std::unique_ptr<PollingPolicy const> polling_policy_prototype_;
Expand Down
3 changes: 3 additions & 0 deletions google/cloud/spanner/instance_admin_connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
#include "google/cloud/spanner/version.h"
#include "google/cloud/backoff_policy.h"
#include "google/cloud/internal/pagination_range.h"
#include "google/cloud/options.h"
#include <google/spanner/admin/instance/v1/spanner_instance_admin.pb.h>
#include <map>
#include <string>
Expand Down Expand Up @@ -156,6 +157,8 @@ class GOOGLE_CLOUD_CPP_SPANNER_ADMIN_API_DEPRECATED("InstanceAdminConnection")
};
//@}

virtual Options options() { return Options{}; }

/// Return the metadata for the given instance.
virtual StatusOr<google::spanner::admin::instance::v1::Instance> GetInstance(
GetInstanceParams) = 0;
Expand Down