Migrating from DataClient to DataConnection
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.