google-cloud-cpp v3 Migration Guide
This document helps users of previous major versions (v1.x.y, v2.x.y) of the
google-cloud-cpp SDK migrate to a release on the v3.x.y series.
While this repository does not strictly follow semver, it does use the major
version number to indicate large breaking changes. We strive to balance the
frequency in which we introduce breaking changes with improvements to the SDK.
Since our most recent major version increment, about 3 years ago, we have added
new API surfaces that supersede the previous deprecated types and functions. As
part of the v3 release series, we are decommissioning those deprecated API
surfaces.
C++17
Depending on your build system of choice, you should set the appropriate flag
for your compiler if it does not already default to --std=c++17 or higher.
Dependencies
Previously Optional Dependencies that are now Required
libcurl
nlohmann_json
opentelemetry-cpp
Relocated Dependencies
crc32c google-cloud-cpp now uses the crc32c implementation in Abseil.
Build system changes
Bazel
google-cloud-cpp module in Bazel Central Registry
Bazel is moving away from WORKSPACE file support to using modules from the Bazel
Central Registry. Part of the v3.x.y release series includes supporting the new
[google-cloud-cpp](https://registry.bazel.build/modules/google_cloud_cpp) Bazel
module which can be added to your `MODULE.bazel` file as a dependency.
google-cloud-cpp will support WORKSPACE files until Bazel 8 reaches end of
support (2027/12). However, some dependencies may stop supporting WORKSPACE
files before then which will limit what dependency versions can be used via
WORKSPACE.
CMake
Removed backward compatible proto interface libraries.
If your application links directly to one of these decommissioned proto
libraries, you should update your CMakeLists.txt with the preferred proto
library name.
| Library | Decommissioned Proto Library | Preferred Proto Library |
| -------------------------- | ------------------------------------- | -------------------------------------- |
| google/cloud/dialogflow_es | cloud_dialogflow_v2_protos | google-cloud-cpp::dialogflow_es_protos |
| google/cloud/logging | logging_type_protos | google-cloud-cpp::logging_protos |
| google/cloud/logging | logging_type_type_protos | google-cloud-cpp::logging_protos |
| google/cloud/speech | cloud_speech_protos | google-cloud-cpp::speech_protos |
| google/cloud/texttospeech | cloud_texttospeech_protos | google-cloud-cpp::texttospeech_protos |
| google/cloud/trace | devtools_cloudtrace_v2_tracing_protos | google-cloud-cpp::trace_protos |
| google/cloud/trace | devtools_cloudtrace_v2_trace_protos | google-cloud-cpp::trace_protos |
Decommissioned API Surfaces
Common
Removed v1 inline namespace alias.
Omit the `v1` namespace for unversioned libraries:
- Bigtable
- PubSub
- Spanner
- Storage
For example, code that used to look like this:
**Before:**
```cpp
google::cloud::v1::pubsub::Publisher publisher;
```
Should be changed to this:
**After:**
```cpp
google::cloud::pubsub::Publisher publisher;
```
Removed gcpcxxV1 inline namespace alias.
Omit the `gcpcxxV1` namespace from versioned libraries. The version is now part
of the service namespace.
For example, code that used to look like this:
**Before:**
```cpp
google::cloud::bigquery_storage_v1::gcpcxxV1::BigQueryReadClient client;
```
Should be changed to this:
**After:**
```cpp
google::cloud::bigquery_storage_v1::BigQueryReadClient client;
```
Removed google::cloud::grpc_utils namespace and headers.
Types that were previously defined in both `google::cloud::grpc_utils` and
`google::cloud` now only exist in `google::cloud`.
For example, code that used to look like this:
**Before:**
```cpp
#include "google/cloud/grpc_utils/completion_queue.h
google::cloud::grpc_utils::CompletionQueue cq;
```
Should be changed to this:
**After:**
```cpp
#include "google/cloud/completion_queue.h
google::cloud::CompletionQueue cq;
```
Removed unversioned forwarding headers.
We created some early libraries without version and/or service directories. For
backwards compatibility, forwarding headers were left at parent directory that
pointed at the first version of the library:
- google/cloud/accessapproval
- google/cloud/accesscontextmanager
- google/cloud/apigateway
- google/cloud/apigeeconnect
- google/cloud/apikeys
- google/cloud/appengine
- google/cloud/artifactregistry
- google/cloud/asset
- google/cloud/assuredworkloads
- google/cloud/automl
- google/cloud/baremetalsolution
- google/cloud/batch
- google/cloud/beyondcorp
- google/cloud/bigquery
- google/cloud/billing
- google/cloud/binaryauthorization
- google/cloud/certificatemanager
- google/cloud/channel
- google/cloud/cloudbuild
- google/cloud/composer
- google/cloud/connectors
- google/cloud/contactcenterinsights
- google/cloud/container
- google/cloud/containeranalysis
- google/cloud/datacatalog
- google/cloud/datamigration
- google/cloud/dataplex
- google/cloud/dataproc
- google/cloud/datastream
- google/cloud/deploy
- google/cloud/dlp
- google/cloud/documentai
- google/cloud/edgecontainer
- google/cloud/eventarc
- google/cloud/filestore
- google/cloud/functions
- google/cloud/gkehub
- google/cloud/iam
- google/cloud/iap
- google/cloud/ids
- google/cloud/kms
- google/cloud/language
- google/cloud/logging
- google/cloud/managedidentities
- google/cloud/memcache
- google/cloud/monitoring
- google/cloud/networkconnectivity
- google/cloud/networkmanagement
- google/cloud/notebooks
- google/cloud/optimization
- google/cloud/orgpolicy
- google/cloud/osconfig
- google/cloud/oslogin
- google/cloud/policytroubleshooter
- google/cloud/privateca
- google/cloud/profiler
- google/cloud/recommender
- google/cloud/redis
- google/cloud/resourcemanager
- google/cloud/retail
- google/cloud/run
- google/cloud/scheduler
- google/cloud/secretmanager
- google/cloud/securitycenter
- google/cloud/servicecontrol
- google/cloud/servicedirectory
- google/cloud/servicemanagement
- google/cloud/serviceusage
- google/cloud/shell
- google/cloud/speech
- google/cloud/storagetransfer
- google/cloud/talent
- google/cloud/tasks
- google/cloud/texttospeech
- google/cloud/tpu
- google/cloud/trace
- google/cloud/translate
- google/cloud/video
- google/cloud/videointelligence
- google/cloud/vision
- google/cloud/vmmigration
- google/cloud/vpcaccess
- google/cloud/webrisk
- google/cloud/websecurityscanner
- google/cloud/workflows
For example, code that used to look like this:
**Before:**
```cpp
#include "google/cloud/bigquery/bigquery_read_client.h"
```
Should be changed to this:
**After:**
```cpp
#include "google/cloud/bigquery/storage/v1/bigquery_read_client.h"
```
Bigquery
Removed bigquery/retry_traits.h file
The library no longer exposes the `google/cloud/bigquery/retry_traits.h` header
file. It only contained internal symbols.
Bigtable
Removed bigtable::RowReader constructors
We have removed the `bigtable::RowReader` constructors that accept `DataClient`
as an argument.
Developers that read rows by directly constructing a `RowReader` object should
instead construct a `Table` object and call `Table::ReadRows(...)`.
For example, code that used to look like this:
**Before:**
```cpp
#include "google/cloud/bigtable/data_client.h"
#include "google/cloud/bigtable/row_reader.h"
#include "google/cloud/bigtable/table.h"
// ...
auto client = google::cloud::bigtable::MakeDataClient(
"my-project", "my-instance", creds);
auto reader = google::cloud::bigtable::RowReader(
client, "my-table-id", google::cloud::bigtable::RowSet("r1", "r2"),
google::cloud::bigtable::RowReader::NO_ROWS_LIMIT,
google::cloud::bigtable::Filter::PassAllFilter(),
/*...retry and backoff policies...*/);
for (auto& row : reader) {
if (!row) throw std::move(row).status();
// ...
}
```
Should be changed to this:
**After:**
```cpp
#include "google/cloud/bigtable/table.h"
// ...
namespace cbt = google::cloud::bigtable;
cbt::Table table(cbt::MakeDataConnection(),
cbt::TableResource("my-project", "my-instance", "my-table-id"));
for (auto& row : table.ReadRows(
cbt::RowSet("r1", "r2"),
cbt::Filter::PassAllFilter())) {
if (!row) throw std::move(row).status();
// ...
}
```
Removed bigtable::ClientOptions
#### `bigtable::ClientOptions`
We have removed the deprecated `bigtable::ClientOptions` class. Please use
`google::cloud::Options` instead.
The following table shows the mapping from `bigtable::ClientOptions` methods to
their `google::cloud::Options` equivalents:
| `bigtable::ClientOptions` method | `google::cloud::Options` equivalent |
| ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| `(constructor)` | `google::cloud::Options{}` |
| `set_data_endpoint` | `google::cloud::EndpointOption` |
| `set_admin_endpoint` | `google::cloud::EndpointOption` |
| `set_connection_pool_name` | `google::cloud::GrpcChannelArgumentsOption` or`google::cloud::GrpcChannelArgumentsNativeOption` |
| `set_connection_pool_size` | `google::cloud::GrpcNumChannelsOption` |
| `SetCredentials` | `google::cloud::GrpcCredentialOption` |
| `set_channel_arguments` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetCompressionAlgorithm` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetGrpclbFallbackTimeout` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetUserAgentPrefix` | `google::cloud::UserAgentProductsOption` or`google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetResourceQuota` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetMaxReceiveMessageSize` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetMaxSendMessageSize` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetLoadBalancingPolicyName` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetServiceConfigJSON` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `SetSslTargetNameOverride` | `google::cloud::GrpcChannelArgumentsNativeOption` |
| `enable_tracing`, `disable_tracing` | `google::cloud::LoggingComponentsOption` |
| `tracing_options` | `google::cloud::GrpcTracingOptionsOption` |
| `set_max_conn_refresh_period` | `bigtable::MaxConnectionRefreshOption` |
| `set_min_conn_refresh_period` | `bigtable::MinConnectionRefreshOption` |
| `set_background_thread_pool_size` | `google::cloud::GrpcBackgroundThreadPoolSizeOption` |
| `DisableBackgroundThreads` | `google::cloud::GrpcCompletionQueueOption` |
Example usage of the replacements can be found below.
**Before:**
```cpp
auto client = bigtable::Client(
bigtable::ClientOptions().set_connection_pool_size(4));
```
**After:**
```cpp
auto client = bigtable::Client(
google::cloud::Options{}.set<google::cloud::GrpcNumChannelsOption>(4));
```
#### `bigtable::CreateDefaultDataClient`
We have removed the deprecated `bigtable::CreateDefaultDataClient` function.
Please use `bigtable::MakeDataClient` instead.
**Before:**
```cpp
auto client = bigtable::CreateDefaultDataClient(
"my-project", "my-instance",
bigtable::ClientOptions().set_connection_pool_size(4));
```
**After:**
```cpp
auto client = bigtable::MakeDataClient(
"my-project", "my-instance",
google::cloud::Options{}.set<google::cloud::GrpcNumChannelsOption>(4));
```
#### `bigtable::CreateDefaultAdminClient`
The deprecated `bigtable::CreateDefaultAdminClient` function has been removed.
Please use `bigtable::MakeAdminClient` instead.
**Before:**
```cpp
auto client = bigtable::CreateDefaultAdminClient(
"my-project", bigtable::ClientOptions().set_connection_pool_size(4));
```
**After:**
```cpp
auto client = bigtable::MakeAdminClient(
"my-project",
google::cloud::Options{}.set<google::cloud::GrpcNumChannelsOption>(4));
```
#### `bigtable::CreateDefaultInstanceAdminClient`
The deprecated `bigtable::CreateDefaultInstanceAdminClient` function has been
removed. Please use `bigtable::MakeInstanceAdminClient` instead.
**Before:**
```cpp
auto client = bigtable::CreateDefaultInstanceAdminClient(
"my-project", bigtable::ClientOptions().set_connection_pool_size(4));
```
**After:**
```cpp
auto client = bigtable::MakeInstanceAdminClient(
"my-project",
google::cloud::Options{}.set<google::cloud::GrpcNumChannelsOption>(4));
```
Removed bigtable::AsyncRowReader<>::NO_ROWS_LIMIT
AsyncRowReader::NO_ROWS_LIMIT has been removed. Please use
`google::cloud::bigtable::RowReader::NO_ROWS_LIMIT` instead.
```cpp
// Before
auto limit = google::cloud::bigtable::AsyncRowReader<>::NO_ROWS_LIMIT;
// After
auto limit = google::cloud::bigtable::RowReader::NO_ROWS_LIMIT;
```
Removed Endpoint Options
We have removed the `bigtable::DataEndpointOption`,
`bigtable::AdminEndpointOption`, and `bigtable::InstanceAdminEndpointOption`
classes. Applications should use `google::cloud::EndpointOption` instead.
**Before:**
```cpp
auto options = google::cloud::Options{}.set<google::cloud::bigtable::DataEndpointOption>("...");
```
**After:**
```cpp
auto options = google::cloud::Options{}.set<google::cloud::EndpointOption>("...");
```
Removed bigtable::DataClient and related functions
We have removed the `bigtable::DataClient` class and its associated factory
functions (e.g., `MakeDataClient`). Applications should now use
`bigtable::DataConnection` and `bigtable::MakeDataConnection()` instead. For
detailed migration steps and examples, please refer to the migration guide:
[Migrating from DataClient to DataConnection](https://docs.cloud.google.com/cpp/docs/reference/bigtable/latest/migrating-from-dataclient)
Removed bigtable::MetadataUpdatePolicy
We have removed the `bigtable::MetadataUpdatePolicy` class. It was only used in
internal legacy files.
Removed bigtable::AdminClient and bigtable::TableAdmin
We have replaced the `bigtable::AdminClient` class and `bigtable::TableAdmin`
class with `bigtable_admin::BigtableTableAdminClient`.
**Before:**
```cpp
std::shared_ptr<bigtable::AdminClient> admin_client =
bigtable::MakeAdminClient("project-id");
auto table_admin = std::make_unique<bigtable::TableAdmin>(
admin_client, "instance-id");
// Drop a selection of rows by key prefix.
auto result = table_admin.DropRowByPrefix("table-id", "row-key-prefix");
// Drop all rows.
result = table_admin.DropAllRows("table-id");
```
**After:**
```cpp
#include "google/cloud/bigtable/admin/bigtable_table_admin_client.h"
auto table_admin = bigtable_admin::BigtableTableAdminClient(
bigtable_admin::MakeBigtableAdminConnection());
auto table_name = bigtable::TableName("project-id", "instance-id", "table-id");
// Drop a selection of rows by key prefix.
google::bigtable::admin::v2::DropRowRangeRequest drop_rows_by_prefix;
drop_rows_by_prefix.set_name(table_name);
drop_rows_by_prefix.set_row_key_prefix("row-key-prefix");
auto result = table_admin.DropRowRange(drop_rows_by_prefix);
// Drop all rows.
google::bigtable::admin::v2::DropRowRangeRequest drop_all_rows;
drop_all_rows.set_name(table_name);
drop_all_rows.set_delete_all_data_from_table(true);
result = table_admin.DropRowRange(drop_all_rows);
```
WaitForConsistency is now a free function
With the removal of the `bigtable::TableAdmin` class, we have moved
`WaitForConsistency` to
`bigtable_admin::BigtableTableAdminClient::WaitForConsistency`.
**Before:**
```cpp
std::shared_ptr<bigtable::AdminClient> admin_client =
bigtable::MakeAdminClient("project-id");
auto table_admin = std::make_unique<bigtable::TableAdmin>(
admin_client, "instance-id");
auto token = table_admin.GenerateConsistencyToken("table-id");
if (!token) throw std::runtime_error(token.status().message());
auto result = table_admin.WaitForConsistency("table-id", *token);
```
**After:**
```cpp
#include "google/cloud/bigtable/admin/bigtable_table_admin_client.h"
auto connection = bigtable_admin::MakeBigtableAdminConnection();
auto table_admin = bigtable_admin::BigtableTableAdminClient(connection);
auto table_name = bigtable::TableName("project-id", "instance-id", "table-id");
auto token = table_admin.GenerateConsistencyToken(table_name);
if (!token) throw std::runtime_error(token.status().message());
google::bigtable::admin::v2::CheckConsistencyRequest wait_request;
wait_request.set_name(table_name);
wait_request.set_consistency_token(token->consistency_token());
auto wait_response = table_admin.WaitForConsistency(wait_request).get();
```
Removed bigtable::InstanceAdminClient and bigtable::InstanceAdmin
We have replaced the `bigtable::InstanceAdminClient` class and
`bigtable::InstanceAdmin` class with
`bigtable_admin::BigtableInstanceAdminClient`.
**Before:**
```cpp
auto instance_admin_client = bigtable::MakeInstanceAdminClient("project-id");
auto instance_admin =
std::make_unique<bigtable::InstanceAdmin>(instance_admin_client);
auto clusters = instance_admin->ListClusters();
```
**After:**
```cpp
#include "google/cloud/bigtable/admin/bigtable_instance_admin_client.h"
auto instance_admin =
std::make_unique<bigtable_admin::BigtableInstanceAdminClient>(
bigtable_admin::MakeBigtableInstanceAdminConnection());
auto clusters = instance_admin->ListClusters(
InstanceName("project-id", "instance-id"));
```
IAM
Removed iam/retry_traits.h file
The library no longer exposes `google/cloud/iam/retry_traits.h` header file. It
only contained internal symbols.
Pubsub
Removed pubsub::PublisherOptions
#### `pubsub::PublisherOptions`
We have removed the deprecated `pubsub::PublisherOptions`. Please use
`google::cloud::Options` instead.
The following table shows the mapping from `pubsub::PublisherOptions` methods to
their `google::cloud::Options` equivalents:
| `pubsub::PublisherOptions` method | `google::cloud::Options` equivalent |
| --------------------------------- | -------------------------------------------------- |
| `(constructor)` | `google::cloud::Options{}` |
| `set_maximum_hold_time` | `google::cloud::pubsub::MaxHoldTimeOption` |
| `set_maximum_batch_message_count` | `google::cloud::pubsub::MaxBatchMessagesOption` |
| `set_maximum_batch_bytes` | `google::cloud::pubsub::MaxBatchBytesOption` |
| `enable_message_ordering` | `google::cloud::pubsub::MessageOrderingOption` |
| `disable_message_ordering` | `google::cloud::pubsub::MessageOrderingOption` |
| `set_maximum_pending_bytes` | `google::cloud::pubsub::MaxPendingBytesOption` |
| `set_maximum_pending_messages` | `google::cloud::pubsub::MaxPendingMessagesOption` |
| `set_full_publisher_ignored` | `google::cloud::pubsub::FullPublisherActionOption` |
| `set_full_publisher_rejects` | `google::cloud::pubsub::FullPublisherActionOption` |
| `set_full_publisher_blocks` | `google::cloud::pubsub::FullPublisherActionOption` |
Example usage of the replacements can be found below.
**Before:**
```cpp
namespace gc = ::google::cloud;
namespace pubsub = ::google::cloud::pubsub;
auto publisher_options = pubsub::PublisherOptions{}
.enable_message_ordering()
.set_full_publisher_ignored();
auto publisher = pubsub::Publisher(pubsub::MakePublisherConnection(
topic, publisher_options);
```
**After:**
```cpp
namespace gc = ::google::cloud;
namespace pubsub = ::google::cloud::pubsub;
auto options = gc::Options{}
.set<pubsub::MessageOrderingOption>(true)
.set<pubsub::FullPublisherActionOption>(
pubsub::FullPublisherAction::kIgnored);
auto publisher = pubsub::Publisher(pubsub::MakePublisherConnection(
topic, options));
```
Removed pubsub::SubscriberOptions
#### `pubsub::SubscriberOptions`
We have removed the deprecated `pubsub::SubscriberOptions`. Please use
`google::cloud::Options` instead.
The following table shows the mapping from `pubsub::SubscriberOptions` methods
to their `google::cloud::Options` equivalents:
| `pubsub::SubscriberOptions` method | `google::cloud::Options` equivalent |
| ---------------------------------- | ----------------------------------------------------- |
| `(constructor)` | `google::cloud::Options{}` |
| `set_max_deadline_time` | `google::cloud::pubsub::MaxDeadlineTimeOption` |
| `set_max_deadline_extension` | `google::cloud::pubsub::MaxDeadlineExtensionOption` |
| `set_max_outstanding_messages` | `google::cloud::pubsub::MaxOutstandingMessagesOption` |
| `set_max_outstanding_bytes` | `google::cloud::pubsub::MaxOutstandingBytesOption` |
| `set_max_concurrency` | `google::cloud::pubsub::MaxConcurrencyOption` |
| `set_shutdown_polling_period` | `google::cloud::pubsub::ShutdownPollingPeriodOption` |
Example usage of the replacements can be found below.
**Before:**
```cpp
namespace gc = ::google::cloud;
namespace pubsub = ::google::cloud::pubsub;
auto subscriber_options = pubsub::SubscriberOptions{}
.set_max_deadline_time(std::chrono::seconds(10))
.set_max_outstanding_messages(42);
auto subscriber = pubsub::Subscriber(pubsub::MakeSubscriberConnection(
subscription, subscriber_options);
```
**After:**
```cpp
namespace gc = ::google::cloud;
namespace pubsub = ::google::cloud::pubsub;
auto options = gc::Options{}
.set<pubsub::MaxDeadlineTimeOption>(std::chrono::seconds(10))
.set<pubsub::MaxOutstandingMessagesOption>(42);
auto subscriber = pubsub::Subscriber(pubsub::MakeSubscriberConnection(
subscription, options));
```
Spanner
All sessions are now Multiplexed Sessions
The Spanner library now ignores all SessionPool related options, which are
marked as deprecated and will be removed in the future:
- `EnableMultiplexedSessionOption`
- `SessionPoolMinSessionsOption`
- `SessionPoolMaxSessionsPerChannelOption`
- `SessionPoolMaxIdleSessionsOption`
- `SessionPoolActionOnExhaustionOption`
- `SessionPoolKeepAliveIntervalOption`
Removed spanner::MakeTestRow
We have removed the `spanner::MakeTestRow` functions. Please use
`spanner_mocks::MakeRow` instead.
**Before:**
```cpp
#include "google/cloud/spanner/row.h"
// ...
auto row = google::cloud::spanner::MakeTestRow(
c0);
auto row2 = google::cloud::spanner::MakeTestRow(1, "foo", true);
```
**After:**
```cpp
#include "google/cloud/spanner/mocks/row.h"
// ...
auto row = google::cloud::spanner_mocks::MakeRow(
c0);
auto row2 = google::cloud::spanner_mocks::MakeRow(1, "foo", true);
```
Removed spanner::ClientOptions class
We have removed the `spanner::ClientOptions` class. Use `google::cloud::Options`
instead to set the following as needed:
- `spanner::QueryOptimizerVersionOption`
- `spanner::QueryOptimizerStatisticsPackageOption`
- `spanner::RequestPriorityOption`
- `spanner::RequestTagOption`
**Before:**
```cpp
#include "google/cloud/spanner/client.h"
// ...
namespace spanner = ::google::cloud::spanner;
auto client_options = spanner::ClientOptions().set_query_options(
spanner::QueryOptions().set_optimizer_version("1"));
auto client = spanner::Client(connection, client_options);
```
**After:**
```cpp
#include "google/cloud/spanner/client.h"
#include "google/cloud/spanner/options.h"
// ...
namespace spanner = ::google::cloud::spanner;
auto options = google::cloud::Options{}.set<spanner::QueryOptimizerVersionOption>("1");
auto client = spanner::Client(connection, options);
```
Removed admin/retry_traits.h file
The library no longer exposes `google/cloud/spanner/admin/retry_traits.h` header
file. It only contained internal symbols.
Removed Admin Clients from spanner namespace
We have removed the `DatabaseAdminClient` and `InstanceAdminClient` classes (and
their associated connection classes and factory functions) from the
`google::cloud::spanner` namespace. Please use the replacements in
`google::cloud::spanner_admin`.
**Before:**
```cpp
#include "google/cloud/spanner/database_admin_client.h"
#include "google/cloud/spanner/instance_admin_client.h"
namespace spanner = ::google::cloud::spanner;
void Function(spanner::DatabaseAdminClient db_admin,
spanner::InstanceAdminClient in_admin) {
// ...
}
```
**After:**
```cpp
#include "google/cloud/spanner/admin/database_admin_client.h"
#include "google/cloud/spanner/admin/instance_admin_client.h"
namespace spanner_admin = ::google::cloud::spanner_admin;
void Function(spanner_admin::DatabaseAdminClient db_admin,
spanner_admin::InstanceAdminClient in_admin) {
// ...
}
```
Storage
ClientOptions is removed
The `ClientOptions` class is no longer available. You should now use
`google::cloud::Options` to configure the `Client`.
**Before:**
```cpp
#include "google/cloud/storage/client.h"
void CreateClient() {
auto credentials = google::cloud::storage::oauth2::GoogleDefaultCredentials().value();
auto options = google::cloud::storage::ClientOptions(credentials);
options.set_project_id("my-project");
options.set_upload_buffer_size(1024 * 1024);
google::cloud::storage::Client client(options);
}
```
**After:**
```cpp
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/options.h" // For option structs
void CreateClient() {
auto credentials = google::cloud::MakeGoogleDefaultCredentials();
auto client = google::cloud::storage::Client(
google::cloud::Options{}
.set<google::cloud::Oauth2CredentialsOption>(credentials)
.set<google::cloud::storage::ProjectIdOption>("my-project")
.set<google::cloud::storage::UploadBufferSizeOption>(1024 * 1024));
}
```
Use the following table to map `ClientOptions` setters to
`google::cloud::Options`:
| `ClientOptions` Method | Replacement Option (`.set(value)`) |
| :------------------------------------ | :------------------------------------------------------ |
| `set_credentials(c)` | `google::cloud::storage::Oauth2CredentialsOption` |
| `set_project_id(p)` | `google::cloud::storage::ProjectIdOption` |
| `set_endpoint(url)` | `google::cloud::storage::RestEndpointOption` |
| `set_iam_endpoint(url)` | `google::cloud::storage::IamEndpointOption` |
| `SetDownloadBufferSize` | `google::cloud::storage::DownloadBufferSizeOption` |
| `SetUploadBufferSizee` | `google::cloud::storage::UploadBufferSizeOption` |
| `set_maximum_simple_upload_size(s)` | `google::cloud::storage::MaximumSimpleUploadSizeOption` |
| `set_enable_http_tracing(true)` | `google::cloud::LoggingComponentsOption` |
| `set_enable_raw_client_tracing(true)` | `google::cloud::LoggingComponentsOption` |
**Example for Tracing:**
```cpp
// Before
options.set_enable_http_tracing(true);
// After
auto opts = Options{}.lookup().insert("raw-client");
```
</details>
ChannelOptions is removed
The `ChannelOptions` class is no longer available. You should now use
`google::cloud::Options` to configure the transport channel.
**Before:**
```cpp
#include "google/cloud/storage/grpc_plugin.h"
void CreateClient() {
auto options = google::cloud::storage::ChannelOptions()
.set_ssl_root_path("path/to/roots.pem");
auto client = google::cloud::storage::MakeGrpcClient(
google::cloud::storage::ClientOptions(), options);
}
```
**After:**
```cpp
#include "google/cloud/storage/grpc_plugin.h"
#include "google/cloud/grpc_options.h"
#include "google/cloud/common_options.h"
void CreateClient() {
auto client = google::cloud::storage::MakeGrpcClient(
google::cloud::Options{}.set<google::cloud::CARootsFilePathOption>(
"path/to/roots.pem"));
}
```
ChannelOptions Mapping
Use the following table to map `ChannelOptions` setters to
`google::cloud::Options`:
| `ChannelOptions` Method | Replacement Option (`.set(value)`) |
| :---------------------- | :------------------------------------- |
| `set_ssl_root_path(p)` | `google::cloud::CARootsFilePathOption` |
</details>
Client Constructor removal
We have removed the `Client(ClientOptions)` constructor. The default constructor
`Client()` generally uses default options and default credentials. To customize,
use `Client(Options)`.
**Before:**
```cpp
#include "google/cloud/storage/client.h"
void CreateClient() {
auto credentials = google::cloud::storage::oauth2::GoogleDefaultCredentials().value();
auto options = google::cloud::storage::ClientOptions(credentials);
auto client = google::cloud::storage::Client(options);
}
```
**After:**
```cpp
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/options.h"
void CreateClient() {
auto credentials = google::cloud::MakeGoogleDefaultCredentials();
auto client = google::cloud::storage::Client(
google::cloud::Options{}.set<google::cloud::storage::Oauth2CredentialsOption>(credentials));
}
```
Removed Client(Connection, NoDecorations) constructor
We have removed the `Client` constructor that accepted a `StorageConnection` and
the `NoDecorations` tag. This was intended only for test code.
**Before:**
```cpp
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/testing/mock_storage_connection.h"
void TestClient() {
auto mock = std::make_shared<google::cloud::storage::testing::MockStorageConnection>();
// ...
auto client = google::cloud::storage::Client(
mock, google::cloud::storage::Client::NoDecorations{});
}
```
**After:**
```cpp
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/testing/mock_storage_connection.h"
void TestClient() {
auto mock = std::make_shared<google::cloud::storage::testing::MockStorageConnection>();
// ...
auto client = google::cloud::storage::internal::ClientImplDetails::CreateWithoutDecorations(mock);
}
```
Removed Client::raw_client()
We have removed the `Client::raw_client()` method. This was intended only for
internal use or testing. If you need access to the underlying connection for
testing purposes, use `google::cloud::storage::internal::ClientImplDetails`.
**Before:**
```cpp
#include "google/cloud/storage/client.h"
void UseRawClient(google::cloud::storage::Client client) {
auto connection = client.raw_client();
}
```
**After:**
```cpp
#include "google/cloud/storage/client.h"
void UseRawClient(google::cloud::storage::Client client) {
auto connection =
google::cloud::storage::internal::ClientImplDetails::GetConnection(client);
}
```
Removed storage_experimental::GrpcPluginOption and storage_experimental::DefaultGrpcClient
The `storage_experimental::GrpcPluginOption` is no longer necessary. Instead of
calling `storage_experimental::DefaultGrpcClient` now call
`storage::MakeGrpcClient`
**Before:**
```cpp
#include "google/cloud/storage/grpc_plugin.h"
namespace gc = ::google::cloud;
auto options = gc::Options{}
.set<gc::storage_experimental::GrpcPluginOption>("media");
auto client = gc::storage_experimental::DefaultGrpcClient(options);
```
**After:**
```cpp
#include "google/cloud/storage/grpc_plugin.h"
namespace gc = ::google::cloud;
auto client = gc::storage::MakeGrpcClient();
```
Removed experimental-storage_grpc targets from CMake and Bazel
CMake should now link to `google-cloud-cpp::storage_grpc`.
Bazel should now depend on `@google_cloud_cpp//:storage_grpc`
Removed deprecated Oauth2CredentialsOption
You should use the `google::cloud::UnifiedCredentialsOption` and the unified
credentials API documented at
https://docs.cloud.google.com/cpp/docs/reference/common/latest/group__guac
instead.
**Before:**
```cpp
#include "google/cloud/options.h"
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/oauth2/google_credentials.h"
namespace gc = ::google::cloud;
namespace gcs = ::google::cloud::storage;
namespace oauth2 = ::google::cloud::storage::oauth2;
auto options = gc::Options{}
.set<gcs::Oauth2CredentialsOption>(oauth2::CreateAnonymousCredentials());
auto client = gcs::Client(options);
```
**After:**
```cpp
#include "google/cloud/options.h"
#include "google/cloud/storage/client.h"
#include "google/cloud/credentials.h"
namespace gc = ::google::cloud;
namespace gcs = ::google::cloud::storage;
auto options = gc::Options{}
.set<gc::UnifiedCredentialsOption>(gc::MakeInsecureCredentials());
auto client = gcs::Client(options);
```
Removed deprecated CreateServiceAccountCredentialsFromFilePath
You should use the `google::cloud::MakeServiceAccountCredentialsFromFile`
factory function and associated override options `google::cloud::ScopesOption`
and `google::cloud::subjectOption` instead.
**Before:**
```cpp
#include "google/cloud/options.h"
#include "google/cloud/storage/client.h"
#include "google/cloud/storage/oauth2/google_credentials.h"
namespace gc = ::google::cloud;
namespace gcs = ::google::cloud::storage;
namespace oauth2 = ::google::cloud::storage::oauth2;
std::set<std::string> scopes = {"scope1", "scope2"};
auto credentials = CreateServiceAccountCredentialsFromFilePath(
"path-to-file", scopes, "my-subject");
auto options = gc::Options{}
.set<gcs::Oauth2CredentialsOption>(credentials);
auto client = gcs::Client(options);
```
**After:**
```cpp
#include "google/cloud/options.h"
#include "google/cloud/storage/client.h"
#include "google/cloud/credentials.h"
namespace gc = ::google::cloud;
namespace gcs = ::google::cloud::storage;
auto options = gc::Options{}
.set<gc::ScopesOption>(std::vector<std::string>({"scope1", "scope2"}))
.set<gc::SubjectOption>("my-subject");
options = options.set<gc::UnifiedCredentialsOption>(
gc::MakeServiceAccountCredentialsFromFile("path-to-file", options));
auto client = gcs::Client(options);
```