Kudu C++ client API
|
A handle for a connection to a cluster. More...
#include <client.h>
Public Types | |
enum | ReplicaSelection { LEADER_ONLY, CLOSEST_REPLICA, FIRST_REPLICA } |
Policy with which to choose amongst multiple replicas. More... | |
Public Member Functions | |
KuduTableCreator * | NewTableCreator () |
Status | IsCreateTableInProgress (const std::string &table_name, bool *create_in_progress) |
Status | DeleteTable (const std::string &table_name) |
KuduTableAlterer * | NewTableAlterer (const std::string &table_name) |
Status | IsAlterTableInProgress (const std::string &table_name, bool *alter_in_progress) |
Status | GetTableSchema (const std::string &table_name, KuduSchema *schema) |
Status | ListTabletServers (std::vector< KuduTabletServer * > *tablet_servers) |
Status | ListTables (std::vector< std::string > *tables, const std::string &filter="") |
Status | TableExists (const std::string &table_name, bool *exists) |
Status | OpenTable (const std::string &table_name, sp::shared_ptr< KuduTable > *table) |
sp::shared_ptr< KuduSession > | NewSession () |
bool | IsMultiMaster () const |
const MonoDelta & | default_admin_operation_timeout () const |
const MonoDelta & | default_rpc_timeout () const |
uint64_t | GetLatestObservedTimestamp () const |
void | SetLatestObservedTimestamp (uint64_t ht_timestamp) |
Status | ExportAuthenticationCredentials (std::string *authn_creds) const |
Static Public Attributes | |
static const uint64_t | kNoTimestamp |
A handle for a connection to a cluster.
The KuduClient class represents a connection to a cluster. From the user perspective, they should only need to create one of these in their application, likely a singleton – but it is not a singleton in Kudu in any way. Different KuduClient objects do not interact with each other – no connection pooling, etc. With the exception of common properties managed by free (non-member) functions in the kudu::client namespace, each KuduClient object is sandboxed with no global cross-client state.
In the implementation, the client holds various pieces of common infrastructure which is not table-specific:
In order to actually write data to the cluster, callers must first create a KuduSession object using NewSession(). A KuduClient may have several associated sessions.
const MonoDelta& kudu::client::KuduClient::default_admin_operation_timeout | ( | ) | const |
const MonoDelta& kudu::client::KuduClient::default_rpc_timeout | ( | ) | const |
Status kudu::client::KuduClient::DeleteTable | ( | const std::string & | table_name | ) |
Delete/drop a table.
[in] | table_name | Name of the table to drop. |
Status kudu::client::KuduClient::ExportAuthenticationCredentials | ( | std::string * | authn_creds | ) | const |
Export the current authentication credentials from this client. This includes the necessary credentials to authenticate to the cluster, as well as to authenticate the cluster to the client.
The resulting binary string may be passed into a new C++ client via the KuduClientBuilder::import_authentication_credentials
method, or into a new Java client via KuduClient::importAuthenticationCredentials
.
[out] | authn_creds | The resulting binary authentication credentials. |
uint64_t kudu::client::KuduClient::GetLatestObservedTimestamp | ( | ) | const |
Get the highest HybridTime timestamp observed by the client.
The latest observed timestamp can be used to start a snapshot scan on a table which is guaranteed to contain all data written or previously read by this client. See KuduScanner for more details on timestamps.
How to get Read-Your-Writes consistency: the code snippet below uses KuduClient::GetLatestObservedTimestamp() along with KuduScanner::SetSnapshotRaw() to perform READ_AT_SNAPSHOT scan containing the data which has just been written. Notice extra 1 added to the timestamp passed to KuduScanner::SetSnapshotRaw():
There are currently races in which, in rare occasions, Read-Your-Writes consistency might not hold even in this case. These are being taken care of as part of KUDU-430
Status kudu::client::KuduClient::GetTableSchema | ( | const std::string & | table_name, |
KuduSchema * | schema | ||
) |
Get table's schema.
[in] | table_name | Name of the table. |
[out] | schema | Raw pointer to the schema object; caller gets ownership. |
Status kudu::client::KuduClient::IsAlterTableInProgress | ( | const std::string & | table_name, |
bool * | alter_in_progress | ||
) |
Check if table alteration is in-progress.
[in] | table_name | Name of the table. |
[out] | alter_in_progress | The value is set only in case of success; it is true iff the operation is in progress. |
Status kudu::client::KuduClient::IsCreateTableInProgress | ( | const std::string & | table_name, |
bool * | create_in_progress | ||
) |
Check whether a create table operation is in-progress.
[in] | table_name | Name of the table. |
[out] | create_in_progress | The value is set only in case of success; it is true iff the operation is in progress. |
bool kudu::client::KuduClient::IsMultiMaster | ( | ) | const |
true
iff client is configured to talk to multiple Kudu master servers. Status kudu::client::KuduClient::ListTables | ( | std::vector< std::string > * | tables, |
const std::string & | filter = "" |
||
) |
List only those tables whose names pass a substring match on filter
.
[out] | tables | The placeholder for the result. Appended only on success. |
[in] | filter | Substring filter to use; empty sub-string filter matches all tables. |
Status kudu::client::KuduClient::ListTabletServers | ( | std::vector< KuduTabletServer * > * | tablet_servers | ) |
Get information on current tablet servers.
[out] | tablet_servers | The placeholder for the result. The caller takes ownership of the container's elements. |
sp::shared_ptr<KuduSession> kudu::client::KuduClient::NewSession | ( | ) |
Create a new session for interacting with the cluster.
This is a fully local operation (no RPCs or blocking).
KuduTableAlterer* kudu::client::KuduClient::NewTableAlterer | ( | const std::string & | table_name | ) |
Create a KuduTableAlterer object.
[in] | table_name | Name of the table to alter. |
KuduTableCreator* kudu::client::KuduClient::NewTableCreator | ( | ) |
Create a KuduTableCreator object.
Status kudu::client::KuduClient::OpenTable | ( | const std::string & | table_name, |
sp::shared_ptr< KuduTable > * | table | ||
) |
Open table with the given name.
This method does an RPC to ensure that the table exists and looks up its schema.
[in] | table_name | Name of the table. |
[out] | table | The result table. |
Should we offer an async version of this as well?
Probably should have a configurable timeout in KuduClientBuilder?
void kudu::client::KuduClient::SetLatestObservedTimestamp | ( | uint64_t | ht_timestamp | ) |
Sets the latest observed HybridTime timestamp.
This is only useful when forwarding timestamps between clients to enforce external consistency when using KuduSession::CLIENT_PROPAGATED external consistency mode.
The HybridTime encoded timestamp should be obtained from another client's KuduClient::GetLatestObservedTimestamp() method.
[in] | ht_timestamp | Timestamp encoded in HybridTime format. |
Status kudu::client::KuduClient::TableExists | ( | const std::string & | table_name, |
bool * | exists | ||
) |
Check if the table given by 'table_name' exists.
[in] | table_name | Name of the table. |
[out] | exists | Set only on success; set to true iff table exists. |
|
static |
Value for the latest observed timestamp when none has been observed or set.