Migrating from DataClient to DataConnection
Stay organized with collections
Save and categorize content based on your preferences.
In this document we describe how to migrate existing code that uses DataClient
to use DataConnection
.
All examples use the following aliases:
namespace gc = ::google::cloud;
namespace cbt = ::google::cloud::bigtable;
Simple case
cbt::Table OldCode() {
auto data_client = cbt::MakeDataClient("project-id", "instance-id");
return cbt::Table(data_client, "table-id");
}
cbt::Table UpdatedCode() {
auto connection = cbt::MakeDataConnection();
return cbt::Table(
connection, cbt::TableResource("project-id", "instance-id", "table-id"));
}
Note that the DataConnection
is not associated with any resource ids. They are instead packaged as a TableResource
and passed as a single object to Table
.
Optional configuration
Note that there is only one Table
constructor that accepts a DataConnection
. All configuration is done via the Options
parameter.
Set an application profile id
cbt::Table OldCode() {
auto data_client = cbt::MakeDataClient("project-id", "instance-id");
return cbt::Table(data_client, "app-profile-id", "table-id");
}
cbt::Table UpdatedCode() {
auto connection = cbt::MakeDataConnection();
return cbt::Table(
connection, cbt::TableResource("project-id", "instance-id", "table-id"),
gc::Options{}.set<cbt::AppProfileIdOption>("app-profile-id"));
}
Set a custom retry policy
cbt::Table OldCode() {
auto data_client = cbt::MakeDataClient("project-id", "instance-id");
return cbt::Table(data_client, "table-id",
cbt::LimitedErrorCountRetryPolicy(7));
}
cbt::Table UpdatedCode() {
auto connection = cbt::MakeDataConnection();
return cbt::Table(connection,
cbt::TableResource("project-id", "instance-id", "table-id"),
gc::Options{}.set<cbt::DataRetryPolicyOption>(
cbt::DataLimitedErrorCountRetryPolicy(7).clone()));
}
The retry, backoff, and idempotency policies are packaged in Options
as shared_ptr
s, instead of passed by value as variadic parameters to Table(..., Policies&&)
.
Also note that the retry and backoff policy types have changed. If you defined your own policy, extending RPCRetryPolicy
or RPCBackoffPolicy
, it will not be compatible with the new types. The new policies do not have a Setup(grpc::ClientContext&)
function. This function has not been included because we believe that setting up the grpc::ClientContext
...
- Should not be tied to the retry policies.
- Is unlikely to be needed by external customers.
If you do need a Setup()
feature, please open a feature request explaining your use case, and we will be happy to accommodate you.