Performs instance administration operations on Cloud Spanner.
Applications use this class to perform operations on Spanner Databases.
Performance
InstanceAdminClient
objects are cheap to create, copy, and move. However, each InstanceAdminClient
object must be created with a std::shared_ptr<
InstanceAdminConnection
>
, which itself is relatively expensive to create. Therefore, connection instances should be shared when possible. See the MakeInstanceAdminConnection()
method and the InstanceAdminConnection
interface for more details.
Thread Safety
Instances of this class created via copy-construction or copy-assignment share the underlying pool of connections. Access to these copies via multiple threads is guaranteed to work. Two threads operating on the same instance of this class is not guaranteed to work.
Error Handling
This class uses StatusOr
<T>
to report errors. When an operation fails to perform its work the returned StatusOr
<T>
contains the error details. If the ok()
member function in the StatusOr
<T>
returns true
then it contains the expected result. For more information, see the Error Handling Guide.
Constructors
InstanceAdminClient(InstanceAdminClient const &)
Copy and move support
Parameter | |
---|---|
Name | Description |
|
InstanceAdminClient const &
|
InstanceAdminClient(InstanceAdminClient &&)
Copy and move support
Parameter | |
---|---|
Name | Description |
|
InstanceAdminClient &&
|
InstanceAdminClient(std::shared_ptr< InstanceAdminConnection >)
Parameter | |
---|---|
Name | Description |
conn |
std::shared_ptr< InstanceAdminConnection >
|
InstanceAdminClient()
No default construction.
Use InstanceAdminClient
(std::shared_ptr<
InstanceAdminConnection
>)
Operators
operator=(InstanceAdminClient const &)
Copy and move support
Parameter | |
---|---|
Name | Description |
|
InstanceAdminClient const &
|
Returns | |
---|---|
Type | Description |
InstanceAdminClient & |
operator=(InstanceAdminClient &&)
Copy and move support
Parameter | |
---|---|
Name | Description |
|
InstanceAdminClient &&
|
Returns | |
---|---|
Type | Description |
InstanceAdminClient & |
Functions
GetInstance(Instance const &)
Retrieve metadata information about a Cloud Spanner Instance.
Idempotency
This is a read-only operation and therefore it is always treated as idempotent.
Example
void GetInstance(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& instance_id) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto instance = client.GetInstance(in.FullName());
if (!instance) throw std::move(instance).status();
std::cout << "The instance " << instance->name()
<< " exists and its metadata is:\n"
<< instance->DebugString();
}
Parameter | |
---|---|
Name | Description |
in |
Instance const &
|
Returns | |
---|---|
Type | Description |
StatusOr< google::spanner::admin::instance::v1::Instance > |
CreateInstance(google::spanner::admin::instance::v1::CreateInstanceRequest const &)
Creates a new Cloud Spanner instance in the given project.
Use CreateInstanceRequestBuilder to build the google::spanner::admin::instance::v1::CreateInstanceRequest
object.
Note that the instance id must be between 2 and 64 characters long, it must start with a lowercase letter ([a-z]
), it must end with a lowercase letter or a number ([a-z0-9]
) and any characters between the beginning and ending characters must be lower case letters, numbers, or dashes (-
), that is, they must belong to the [-a-z0-9]
character set.
Example
void CreateInstance(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& instance_id,
std::string const& display_name,
std::string const& config_id) {
namespace spanner = ::google::cloud::spanner;
spanner::Instance in(project_id, instance_id);
auto project = google::cloud::Project(project_id);
std::string config_name =
project.FullName() + "/instanceConfigs/" + config_id;
auto instance =
client
.CreateInstance(spanner::CreateInstanceRequestBuilder(in, config_name)
.SetDisplayName(display_name)
.SetNodeCount(1)
.SetLabels({{"cloud_spanner_samples", "true"}})
.Build())
.get();
if (!instance) throw std::move(instance).status();
std::cout << "Created instance [" << in << "]:\n" << instance->DebugString();
}
Parameter | |
---|---|
Name | Description |
|
google::spanner::admin::instance::v1::CreateInstanceRequest const &
|
Returns | |
---|---|
Type | Description |
future< StatusOr< google::spanner::admin::instance::v1::Instance > > |
UpdateInstance(google::spanner::admin::instance::v1::UpdateInstanceRequest const &)
Updates a Cloud Spanner instance.
Use google::cloud::spanner::UpdateInstanceRequestBuilder
to build the google::spanner::admin::instance::v1::UpdateInstanceRequest
object.
Idempotency
This operation is idempotent as its result does not depend on the previous state of the instance. Note that, as is the case with all operations, it is subject to race conditions if multiple tasks are attempting to change the same fields in the same instance.
Example
void UpdateInstance(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& instance_id,
std::string const& new_display_name) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto f = client.UpdateInstance(
google::cloud::spanner::UpdateInstanceRequestBuilder(in)
.SetDisplayName(new_display_name)
.Build());
auto instance = f.get();
if (!instance) throw std::move(instance).status();
std::cout << "Updated instance [" << in << "]\n";
}
Parameter | |
---|---|
Name | Description |
|
google::spanner::admin::instance::v1::UpdateInstanceRequest const &
|
Returns | |
---|---|
Type | Description |
future< StatusOr< google::spanner::admin::instance::v1::Instance > > |
DeleteInstance(Instance const &)
Deletes an existing Cloud Spanner instance.
Example
void DeleteInstance(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& instance_id) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto status = client.DeleteInstance(in.FullName());
if (!status.ok()) throw std::move(status);
std::cout << "Deleted instance [" << in << "]\n";
}
Parameter | |
---|---|
Name | Description |
in |
Instance const &
|
Returns | |
---|---|
Type | Description |
Status |
GetInstanceConfig(std::string const &)
Retrieve information about a Cloud Spanner Instance Config.
Idempotency
This is a read-only operation and therefore it is always treated as idempotent.
Example
void GetInstanceConfig(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& config_id) {
auto project = google::cloud::Project(project_id);
auto config = client.GetInstanceConfig(project.FullName() +
"/instanceConfigs/" + config_id);
if (!config) throw std::move(config).status();
std::cout << "The instanceConfig " << config->name()
<< " exists and its metadata is:\n"
<< config->DebugString();
}
Parameter | |
---|---|
Name | Description |
name |
std::string const &
|
Returns | |
---|---|
Type | Description |
StatusOr< google::spanner::admin::instance::v1::InstanceConfig > |
ListInstanceConfigs(std::string)
Retrieve a list of instance configs for a given project.
Idempotency
This is a read-only operation and therefore it is always treated as idempotent.
Example
void ListInstanceConfigs(
google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id) {
int count = 0;
auto project = google::cloud::Project(project_id);
for (auto& config : client.ListInstanceConfigs(project.FullName())) {
if (!config) throw std::move(config).status();
++count;
std::cout << "Instance config [" << count << "]:\n"
<< config->DebugString();
}
if (count == 0) {
std::cout << "No instance configs found in project " << project_id << "\n";
}
}
Parameter | |
---|---|
Name | Description |
project_id |
std::string
|
Returns | |
---|---|
Type | Description |
ListInstanceConfigsRange |
ListInstances(std::string, std::string)
Retrieve a list of instances for a given project.
Idempotency
This is a read-only operation and therefore it is always treated as idempotent.
Example
void ListInstances(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id) {
int count = 0;
auto project = google::cloud::Project(project_id);
for (auto& instance : client.ListInstances(project.FullName())) {
if (!instance) throw std::move(instance).status();
++count;
std::cout << "Instance [" << count << "]:\n" << instance->DebugString();
}
if (count == 0) {
std::cout << "No instances found in project " << project_id << "\n";
}
}
Parameters | |
---|---|
Name | Description |
project_id |
std::string
|
filter |
std::string
|
Returns | |
---|---|
Type | Description |
ListInstancesRange |
GetIamPolicy(Instance const &)
Get the IAM policy in effect for the given instance.
This function retrieves the IAM policy configured in the given instance, that is, which roles are enabled in the instance, and what entities are members of each role.
Idempotency
This is a read-only operation and therefore it is always treated as idempotent.
Example
void InstanceGetIamPolicy(
google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id, std::string const& instance_id) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto actual = client.GetIamPolicy(in.FullName());
if (!actual) throw std::move(actual).status();
std::cout << "The IAM policy for instance " << instance_id << " is:\n"
<< actual->DebugString();
}
See Also
The Cloud Spanner documentation for a description of the roles and permissions supported by Cloud Spanner.
See Also
IAM Overview for an introduction to Identity and Access Management in Google Cloud Platform.
Parameter | |
---|---|
Name | Description |
in |
Instance const &
|
Returns | |
---|---|
Type | Description |
StatusOr< google::iam::v1::Policy > |
SetIamPolicy(Instance const &, google::iam::v1::Policy)
Set the IAM policy for the given instance.
This function changes the IAM policy configured in the given instance to the value of policy
.
Idempotency
This function is only idempotent if the etag
field in policy
is set. Therefore, the underlying RPCs are only retried if the field is set, and the function returns the first RPC error in any other case.
Example
void AddDatabaseReader(google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id,
std::string const& instance_id,
std::string const& new_reader) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto result = client.SetIamPolicy(
in.FullName(),
[&new_reader](google::iam::v1::Policy current)
-> absl::optional<google::iam::v1::Policy> {
// Find (or create) the binding for "roles/spanner.databaseReader".
auto& binding = [¤t]() -> google::iam::v1::Binding& {
auto role_pos = std::find_if(
current.mutable_bindings()->begin(),
current.mutable_bindings()->end(),
[](google::iam::v1::Binding const& b) {
return b.role() == "roles/spanner.databaseReader" &&
!b.has_condition();
});
if (role_pos != current.mutable_bindings()->end()) {
return *role_pos;
}
auto& binding = *current.add_bindings();
binding.set_role("roles/spanner.databaseReader");
return binding;
}();
auto member_pos = std::find(binding.members().begin(),
binding.members().end(), new_reader);
if (member_pos != binding.members().end()) {
std::cout << "The entity " << new_reader
<< " is already a database reader:\n"
<< current.DebugString();
return {};
}
binding.add_members(new_reader);
return current;
});
if (!result) throw std::move(result).status();
std::cout << "Successfully added " << new_reader
<< " to the database reader role:\n"
<< result->DebugString();
}
See Also
The Cloud Spanner documentation for a description of the roles and permissions supported by Cloud Spanner.
See Also
IAM Overview for an introduction to Identity and Access Management in Google Cloud Platform.
Parameters | |
---|---|
Name | Description |
in |
Instance const &
|
policy |
google::iam::v1::Policy
|
Returns | |
---|---|
Type | Description |
StatusOr< google::iam::v1::Policy > |
SetIamPolicy(Instance const &, IamUpdater const &)
Updates the IAM policy for an instance using an optimistic concurrency control loop.
This function repeatedly reads the current IAM policy in in
, and then calls the updater
with the this policy. The updater
returns an empty optional if no changes are required, or it returns the new desired value for the IAM policy. This function then updates the policy.
Updating an IAM policy can fail with retryable errors or can be aborted because there were simultaneous changes the to IAM policy. In these cases this function reruns the loop until it succeeds.
The function returns the final IAM policy, or an error if the rerun policy for the underlying connection has expired.
Idempotency
This function always sets the etag
field on the policy, so the underlying RPCs are retried automatically.
Parameters | |
---|---|
Name | Description |
in |
Instance const &
the identifier for the instance where you want to change the IAM policy. |
updater |
IamUpdater const &
a callback to modify the policy. Return an unset optional to indicate that no changes to the policy are needed. |
Returns | |
---|---|
Type | Description |
StatusOr< google::iam::v1::Policy > |
SetIamPolicy(Instance const &, IamUpdater const &, std::unique_ptr< TransactionRerunPolicy >, std::unique_ptr< BackoffPolicy >)
Updates the IAM policy for an instance using an optimistic concurrency control loop.
This function repeatedly reads the current IAM policy in in
, and then calls the updater
with the this policy. The updater
returns an empty optional if no changes are required, or it returns the new desired value for the IAM policy. This function then updates the policy.
Updating an IAM policy can fail with retryable errors or can be aborted because there were simultaneous changes the to IAM policy. In these cases this function reruns the loop until it succeeds.
The function returns the final IAM policy, or an error if the rerun policy for the underlying connection has expired.
Idempotency
This function always sets the etag
field on the policy, so the underlying RPCs are retried automatically.
Parameters | |
---|---|
Name | Description |
in |
Instance const &
the identifier for the instance where you want to change the IAM policy. |
updater |
IamUpdater const &
a callback to modify the policy. Return an unset optional to indicate that no changes to the policy are needed. |
rerun_policy |
std::unique_ptr< TransactionRerunPolicy >
controls for how long (or how many times) the updater will be rerun after the IAM policy update aborts. |
backoff_policy |
std::unique_ptr< BackoffPolicy >
controls how long |
Returns | |
---|---|
Type | Description |
StatusOr< google::iam::v1::Policy > |
TestIamPermissions(Instance const &, std::vector< std::string >)
Get the subset of the permissions the caller has on the given instance.
This function compares the given list of permissions against those permissions granted to the caller, and returns the subset of the list that the caller actually holds.
Example
void InstanceTestIamPermissions(
google::cloud::spanner_admin::InstanceAdminClient client,
std::string const& project_id, std::string const& instance_id) {
google::cloud::spanner::Instance in(project_id, instance_id);
auto actual =
client.TestIamPermissions(in.FullName(), {"spanner.databases.list"});
if (!actual) throw std::move(actual).status();
char const* msg = actual->permissions().empty() ? "does not" : "does";
std::cout
<< "The caller " << msg
<< " have permission to list databases on the Cloud Spanner instance "
<< in.instance_id() << "\n";
}
See Also
The Cloud Spanner documentation for a description of the roles and permissions supported by Cloud Spanner.
See Also
IAM Overview for an introduction to Identity and Access Management in Google Cloud Platform.
Parameters | |
---|---|
Name | Description |
in |
Instance const &
|
permissions |
std::vector< std::string >
|
Returns | |
---|---|
Type | Description |
StatusOr< google::iam::v1::TestIamPermissionsResponse > |