Kudu C++ client API
client.h
1 // Licensed to the Apache Software Foundation (ASF) under one
2 // or more contributor license agreements. See the NOTICE file
3 // distributed with this work for additional information
4 // regarding copyright ownership. The ASF licenses this file
5 // to you under the Apache License, Version 2.0 (the
6 // "License"); you may not use this file except in compliance
7 // with the License. You may obtain a copy of the License at
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
11 // Unless required by applicable law or agreed to in writing,
12 // software distributed under the License is distributed on an
13 // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14 // KIND, either express or implied. See the License for the
15 // specific language governing permissions and limitations
16 // under the License.
17 
24 
25 #ifndef KUDU_CLIENT_CLIENT_H
26 #define KUDU_CLIENT_CLIENT_H
27 
28 #include <stdint.h>
29 
30 #include <cstddef>
31 #include <map>
32 // Not safe to include <memory>; this header must remain compatible with C++98.
33 //
34 // IWYU pragma: no_include <memory>
35 #include <string>
36 #include <vector>
37 
38 #include "kudu/client/row_result.h"
39 #include "kudu/client/scan_predicate.h"
40 #include "kudu/client/schema.h"
41 #include "kudu/client/shared_ptr.h" // IWYU pragma: keep
42 #ifdef KUDU_HEADERS_NO_STUBS
43 #include <gtest/gtest_prod.h>
44 
45 #include "kudu/gutil/macros.h"
46 #include "kudu/gutil/port.h"
47 #else
48 #include "kudu/client/stubs.h"
49 #endif
50 #include "kudu/util/kudu_export.h"
51 #include "kudu/util/slice.h"
52 #include "kudu/util/status.h"
53 
54 namespace kudu {
55 
56 class AuthzTokenTest;
57 class ClientStressTest_TestUniqueClientIds_Test;
58 class KuduPartialRow;
59 class MonoDelta;
60 class Partition;
61 class PartitionSchema;
62 class SecurityUnknownTskTest;
63 class TxnId;
64 
65 namespace client {
66 class KuduClient;
67 class KuduTable;
68 } // namespace client
69 
70 namespace tablet {
71 class FuzzTest;
72 } // namespace tablet
73 
74 namespace transactions {
75 class CoordinatorRpc;
76 class ParticipantRpc;
77 class TxnSystemClient;
78 } // namespace transactions
79 
80 namespace tools {
81 class LeaderMasterProxy;
82 class RemoteKsckCluster;
83 } // namespace tools
84 
85 namespace client {
86 
87 class KuduColumnarScanBatch;
88 class KuduDelete;
89 class KuduDeleteIgnore;
90 class KuduInsert;
91 class KuduInsertIgnore;
92 class KuduLoggingCallback;
93 class KuduPartitioner;
94 class KuduScanBatch;
95 class KuduSession;
96 class KuduStatusCallback;
97 class KuduTableAlterer;
98 class KuduTableCreator;
99 class KuduTableStatistics;
100 class KuduTablet;
101 class KuduTabletServer;
102 class KuduUpdate;
103 class KuduUpdateIgnore;
104 class KuduUpsert;
105 class KuduValue;
106 class KuduWriteOperation;
107 class ResourceMetrics;
108 
109 namespace internal {
110 class Batcher;
111 class ErrorCollector;
112 class GetTableSchemaRpc;
113 class LookupRpc;
114 class MetaCache;
115 class RemoteTablet;
116 class RemoteTabletServer;
117 class ReplicaController;
118 class RetrieveAuthzTokenRpc;
119 class ScanBatchDataInterface;
120 class WriteRpc;
121 template <class ReqClass, class RespClass>
122 class AsyncLeaderMasterRpc; // IWYU pragma: keep
123 template <class ReqClass, class RespClass>
124 class AsyncRandomTxnManagerRpc; // IWYU pragma: keep
125 } // namespace internal
126 
139 void KUDU_EXPORT InstallLoggingCallback(KuduLoggingCallback* cb);
140 
147 void KUDU_EXPORT UninstallLoggingCallback();
148 
164 void KUDU_EXPORT SetVerboseLogLevel(int level);
165 
175 Status KUDU_EXPORT SetInternalSignalNumber(int signum) WARN_UNUSED_RESULT;
176 
188 Status KUDU_EXPORT DisableSaslInitialization() WARN_UNUSED_RESULT;
189 
190 
213 Status KUDU_EXPORT DisableOpenSSLInitialization() WARN_UNUSED_RESULT;
214 
217 std::string KUDU_EXPORT GetShortVersionString();
218 
221 std::string KUDU_EXPORT GetAllVersionInfo();
222 
227 class KUDU_EXPORT KuduClientBuilder {
228  public:
231 
236 
242  KuduClientBuilder& master_server_addrs(const std::vector<std::string>& addrs);
243 
251  KuduClientBuilder& add_master_server_addr(const std::string& addr);
252 
263 
272 
287 
288 
297 
307  KuduClientBuilder& num_reactors(int num_reactors);
308 
319  Status Build(sp::shared_ptr<KuduClient>* client);
320 
321  private:
322  class KUDU_NO_EXPORT Data;
323 
324  friend class internal::ReplicaController;
325 
326  // Owned.
327  Data* data_;
328 
329  DISALLOW_COPY_AND_ASSIGN(KuduClientBuilder);
330 };
331 
349 class KUDU_EXPORT KuduTransaction :
350  public sp::enable_shared_from_this<KuduTransaction> {
351  public:
352  ~KuduTransaction();
353 
366  Status CreateSession(sp::shared_ptr<KuduSession>* session) WARN_UNUSED_RESULT;
367 
381  Status Commit(bool wait = true) WARN_UNUSED_RESULT;
382 
410  Status IsCommitComplete(bool* is_complete,
411  Status* completion_status) WARN_UNUSED_RESULT;
412 
416  Status Rollback() WARN_UNUSED_RESULT;
417 
427  class KUDU_EXPORT SerializationOptions {
428  public:
431 
473  bool keepalive() const;
474 
487 
488  private:
489  friend class KuduTransaction;
490  class KUDU_NO_EXPORT Data;
491  Data* data_; // Owned.
492 
493  DISALLOW_COPY_AND_ASSIGN(SerializationOptions);
494  };
495 
522  std::string* serialized_txn,
523  const SerializationOptions& options = SerializationOptions()) const WARN_UNUSED_RESULT;
524 
540  static Status Deserialize(const sp::shared_ptr<KuduClient>& client,
541  const std::string& serialized_txn,
542  sp::shared_ptr<KuduTransaction>* txn) WARN_UNUSED_RESULT;
543  private:
544  DISALLOW_COPY_AND_ASSIGN(KuduTransaction);
545 
546  friend class KuduClient;
547  friend class KuduSession;
548  FRIEND_TEST(ClientTest, TxnIdOfTransactionalSession);
549  FRIEND_TEST(ClientTest, TxnToken);
550 
551  class KUDU_NO_EXPORT Data;
552 
553  explicit KuduTransaction(const sp::shared_ptr<KuduClient>& client);
554  Data* data_; // Owned.
555 };
556 
583 class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> {
584  public:
585  ~KuduClient();
586 
592 
601  Status IsCreateTableInProgress(const std::string& table_name,
602  bool* create_in_progress);
603 
609  Status DeleteTable(const std::string& table_name);
610 
612 
623  Status DeleteTableInCatalogs(const std::string& table_name,
624  bool modify_external_catalogs) KUDU_NO_EXPORT;
626 
633  KuduTableAlterer* NewTableAlterer(const std::string& table_name);
634 
643  Status IsAlterTableInProgress(const std::string& table_name,
644  bool* alter_in_progress);
652  Status GetTableSchema(const std::string& table_name,
653  KuduSchema* schema);
654 
661  Status ListTabletServers(std::vector<KuduTabletServer*>* tablet_servers);
662 
670  Status ListTables(std::vector<std::string>* tables,
671  const std::string& filter = "");
672 
680  Status TableExists(const std::string& table_name, bool* exists);
681 
698  Status OpenTable(const std::string& table_name,
699  sp::shared_ptr<KuduTable>* table);
700 
706  sp::shared_ptr<KuduSession> NewSession();
707 
731  Status NewTransaction(sp::shared_ptr<KuduTransaction>* txn) WARN_UNUSED_RESULT;
732 
734 
747  Status GetTablet(const std::string& tablet_id,
748  KuduTablet** tablet) KUDU_NO_EXPORT;
749 
757  Status GetTableStatistics(const std::string& table_name,
758  KuduTableStatistics** statistics);
759 
767  std::string GetMasterAddresses() const KUDU_NO_EXPORT;
768 
770 
774 
775  CLOSEST_REPLICA,
780 
781  FIRST_REPLICA
782  };
783 
786  bool IsMultiMaster() const;
787 
790 
793 
796 
799  static const uint64_t kNoTimestamp;
800 
811  uint64_t GetLatestObservedTimestamp() const;
812 
827  void SetLatestObservedTimestamp(uint64_t ht_timestamp);
828 
840  Status ExportAuthenticationCredentials(std::string* authn_creds) const;
841 
843 
849  std::string GetHiveMetastoreUris() const KUDU_NO_EXPORT;
850 
856  bool GetHiveMetastoreSaslEnabled() const KUDU_NO_EXPORT;
857 
867  std::string GetHiveMetastoreUuid() const KUDU_NO_EXPORT;
868 
875  std::string location() const KUDU_NO_EXPORT;
876 
880  std::string cluster_id() const KUDU_NO_EXPORT;
882 
883  private:
884  class KUDU_NO_EXPORT Data;
885 
886  template <class ReqClass, class RespClass>
887  friend class internal::AsyncLeaderMasterRpc;
888  template <class ReqClass, class RespClass>
889  friend class internal::AsyncRandomTxnManagerRpc;
890 
891  friend class ClientTest;
892  friend class ConnectToClusterBaseTest;
893  friend class KuduClientBuilder;
894  friend class KuduPartitionerBuilder;
895  friend class KuduTransaction;
896  friend class KuduScanToken;
897  friend class KuduScanTokenBuilder;
898  friend class KuduScanner;
899  friend class KuduSession;
900  friend class KuduTable;
901  friend class KuduTableAlterer;
902  friend class KuduTableCreator;
903  friend class internal::Batcher;
904  friend class internal::GetTableSchemaRpc;
905  friend class internal::LookupRpc;
906  friend class internal::MetaCache;
907  friend class internal::RemoteTablet;
908  friend class internal::RemoteTabletServer;
909  friend class internal::RetrieveAuthzTokenRpc;
910  friend class internal::WriteRpc;
911  friend class kudu::AuthzTokenTest;
912  friend class kudu::SecurityUnknownTskTest;
913  friend class transactions::CoordinatorRpc;
914  friend class transactions::ParticipantRpc;
915  friend class transactions::TxnSystemClient;
916  friend class tools::LeaderMasterProxy;
917  friend class tools::RemoteKsckCluster;
918 
919  FRIEND_TEST(kudu::ClientStressTest, TestUniqueClientIds);
920  FRIEND_TEST(ClientTest, ClearCacheAndConcurrentWorkload);
921  FRIEND_TEST(ClientTest, ConnectionNegotiationTimeout);
922  FRIEND_TEST(ClientTest, TestBasicIdBasedLookup);
923  FRIEND_TEST(ClientTest, TestCacheAuthzTokens);
924  FRIEND_TEST(ClientTest, TestGetSecurityInfoFromMaster);
925  FRIEND_TEST(ClientTest, TestGetTabletServerBlacklist);
926  FRIEND_TEST(ClientTest, TestMasterDown);
927  FRIEND_TEST(ClientTest, TestMasterLookupPermits);
928  FRIEND_TEST(ClientTest, TestMetaCacheExpiry);
929  FRIEND_TEST(ClientTest, TestMetaCacheExpiryById);
930  FRIEND_TEST(ClientTest, TestMetaCacheExpiryWithKeysAndIds);
931  FRIEND_TEST(ClientTest, TestMetaCacheLookupNoLeaders);
932  FRIEND_TEST(ClientTest, TestMetaCacheWithKeysAndIds);
933  FRIEND_TEST(ClientTest, TestNonCoveringRangePartitions);
934  FRIEND_TEST(ClientTest, TestRetrieveAuthzTokenInParallel);
935  FRIEND_TEST(ClientTest, TestReplicatedTabletWritesWithLeaderElection);
936  FRIEND_TEST(ClientTest, TestScanFaultTolerance);
937  FRIEND_TEST(ClientTest, TestScanTimeout);
938  FRIEND_TEST(ClientTest, TestWriteWithDeadMaster);
939  FRIEND_TEST(MasterFailoverTest, TestPauseAfterCreateTableIssued);
940 
941  KuduClient();
942 
943  // Owned.
944  Data* data_;
945 
946  DISALLOW_COPY_AND_ASSIGN(KuduClient);
947 };
948 
950 class KUDU_EXPORT KuduTabletServer {
951  public:
952  ~KuduTabletServer();
953 
956  const std::string& uuid() const;
957 
960  const std::string& hostname() const;
961 
964  uint16_t port() const;
965 
967 
972  const std::string& location() const KUDU_NO_EXPORT;
974 
975  private:
976  class KUDU_NO_EXPORT Data;
977 
978  friend class KuduClient;
979  friend class KuduScanner;
980  friend class KuduScanTokenBuilder;
981 
983 
984  // Owned.
985  Data* data_;
986 
987  DISALLOW_COPY_AND_ASSIGN(KuduTabletServer);
988 };
989 
991 class KUDU_EXPORT KuduReplica {
992  public:
993  ~KuduReplica();
994 
999  bool is_leader() const;
1000 
1002  const KuduTabletServer& ts() const;
1003 
1004  private:
1005  friend class KuduClient;
1006  friend class KuduScanTokenBuilder;
1007  friend class internal::ReplicaController;
1008 
1009  class KUDU_NO_EXPORT Data;
1010 
1011  KuduReplica();
1012 
1013  // Owned.
1014  Data* data_;
1015 
1016  DISALLOW_COPY_AND_ASSIGN(KuduReplica);
1017 };
1018 
1020 class KUDU_EXPORT KuduTablet {
1021  public:
1022  ~KuduTablet();
1023 
1026  const std::string& id() const;
1027 
1033  const std::vector<const KuduReplica*>& replicas() const;
1034 
1035  private:
1036  friend class KuduClient;
1037  friend class KuduScanTokenBuilder;
1038 
1039  class KUDU_NO_EXPORT Data;
1040 
1041  KuduTablet();
1042 
1043  // Owned.
1044  Data* data_;
1045 
1046  DISALLOW_COPY_AND_ASSIGN(KuduTablet);
1047 };
1048 
1050 class KUDU_EXPORT KuduTableCreator {
1051  public:
1052  ~KuduTableCreator();
1053 
1065  KuduTableCreator& table_name(const std::string& name);
1066 
1078 
1095  KuduTableCreator& add_hash_partitions(const std::vector<std::string>& columns,
1096  int32_t num_buckets);
1097 
1113  KuduTableCreator& add_hash_partitions(const std::vector<std::string>& columns,
1114  int32_t num_buckets, int32_t seed);
1115 
1128  KuduTableCreator& set_range_partition_columns(const std::vector<std::string>& columns);
1129 
1134  };
1135 
1165  KuduPartialRow* upper_bound,
1166  RangePartitionBound lower_bound_type = INCLUSIVE_BOUND,
1167  RangePartitionBound upper_bound_type = EXCLUSIVE_BOUND);
1168 
1178 
1186  KuduTableCreator& set_owner(const std::string& owner);
1187 
1193  KuduTableCreator& split_rows(const std::vector<const KuduPartialRow*>& split_rows)
1194  ATTRIBUTE_DEPRECATED("use add_range_partition_split() instead");
1195 
1205  KuduTableCreator& num_replicas(int n_replicas);
1206 
1218  KuduTableCreator& dimension_label(const std::string& dimension_label);
1219 
1227  KuduTableCreator& extra_configs(const std::map<std::string, std::string>& extra_configs);
1228 
1239 
1247  KuduTableCreator& wait(bool wait);
1248 
1263 
1264  private:
1265  class KUDU_NO_EXPORT Data;
1266 
1267  friend class KuduClient;
1268  friend class transactions::TxnSystemClient;
1269 
1270  explicit KuduTableCreator(KuduClient* client);
1271 
1272  // Owned.
1273  Data* data_;
1274 
1275  DISALLOW_COPY_AND_ASSIGN(KuduTableCreator);
1276 };
1277 
1279 class KUDU_EXPORT KuduTableStatistics {
1280  public:
1283 
1288  int64_t on_disk_size() const;
1289 
1294  int64_t live_row_count() const;
1295 
1299  std::string ToString() const;
1300 
1301  private:
1302  class KUDU_NO_EXPORT Data;
1303 
1304  friend class KuduClient;
1305 
1306  // Owned.
1307  Data* data_;
1308 
1309  DISALLOW_COPY_AND_ASSIGN(KuduTableStatistics);
1310 };
1311 
1332 class KUDU_EXPORT KuduTable : public sp::enable_shared_from_this<KuduTable> {
1333  public:
1334  ~KuduTable();
1335 
1337  const std::string& name() const;
1338 
1346  const std::string& id() const;
1347 
1349  const KuduSchema& schema() const;
1350 
1352  int num_replicas() const;
1353 
1355  const std::string& owner() const;
1356 
1361 
1366 
1371 
1376 
1381 
1386 
1391 
1417  KuduValue* value);
1418 
1451  std::vector<KuduBloomFilter*>* bloom_filters);
1452 
1457 
1494  const std::vector<Slice>& bloom_filters);
1496 
1521  std::vector<KuduValue*>* values);
1522 
1534 
1546 
1549  KuduClient* client() const;
1550 
1552  const PartitionSchema& partition_schema() const;
1553 
1555  const std::map<std::string, std::string>& extra_configs() const;
1556 
1558 
1568  Status ListPartitions(std::vector<Partition>* partitions) KUDU_NO_EXPORT;
1569 
1571 
1572  private:
1573  class KUDU_NO_EXPORT Data;
1574 
1575  friend class KuduClient;
1576  friend class KuduPartitioner;
1577  friend class KuduScanToken;
1578 
1579  KuduTable(const sp::shared_ptr<KuduClient>& client,
1580  const std::string& name,
1581  const std::string& id,
1582  int num_replicas,
1583  const std::string& owner,
1584  const KuduSchema& schema,
1585  const PartitionSchema& partition_schema,
1586  const std::map<std::string, std::string>& extra_configs);
1587 
1588  // Owned.
1589  Data* data_;
1590 
1591  DISALLOW_COPY_AND_ASSIGN(KuduTable);
1592 };
1593 
1605 class KUDU_EXPORT KuduTableAlterer {
1606  public:
1607  ~KuduTableAlterer();
1608 
1614  KuduTableAlterer* RenameTo(const std::string& new_name);
1615 
1621  KuduTableAlterer* SetOwner(const std::string& new_owner);
1622 
1632  KuduColumnSpec* AddColumn(const std::string& name);
1633 
1642  KuduColumnSpec* AlterColumn(const std::string& name);
1643 
1651  KuduTableAlterer* DropColumn(const std::string& name);
1652 
1685  KuduPartialRow* lower_bound,
1686  KuduPartialRow* upper_bound,
1689 
1725  KuduPartialRow* lower_bound,
1726  KuduPartialRow* upper_bound,
1727  const std::string& dimension_label,
1730 
1759  KuduPartialRow* lower_bound,
1760  KuduPartialRow* upper_bound,
1763 
1773  KuduTableAlterer* AlterExtraConfig(const std::map<std::string, std::string>& extra_configs);
1774 
1785 
1797  KuduTableAlterer* wait(bool wait);
1798 
1800 
1809  KuduTableAlterer* modify_external_catalogs(bool modify_external_catalogs) KUDU_NO_EXPORT;
1810 
1812 
1818 
1819  private:
1820  class KUDU_NO_EXPORT Data;
1821 
1822  friend class KuduClient;
1823 
1824  KuduTableAlterer(KuduClient* client,
1825  const std::string& name);
1826 
1827  // Owned.
1828  Data* data_;
1829 
1830  DISALLOW_COPY_AND_ASSIGN(KuduTableAlterer);
1831 };
1832 
1838 class KUDU_EXPORT KuduError {
1839  public:
1840  ~KuduError();
1841 
1843  const Status& status() const;
1844 
1847 
1856 
1868 
1869  private:
1870  class KUDU_NO_EXPORT Data;
1871 
1872  friend class internal::Batcher;
1873  friend class internal::ErrorCollector;
1874  friend class KuduSession;
1875 
1876  KuduError(KuduWriteOperation* failed_op, const Status& error);
1877 
1878  // Owned.
1879  Data* data_;
1880 
1881  DISALLOW_COPY_AND_ASSIGN(KuduError);
1882 };
1883 
1884 
1943 class KUDU_EXPORT KuduSession : public sp::enable_shared_from_this<KuduSession> {
1944  public:
1945  ~KuduSession();
1946 
1948  enum FlushMode {
1954 
1982 
1995  MANUAL_FLUSH
1996  };
1997 
2006  Status SetFlushMode(FlushMode m) WARN_UNUSED_RESULT;
2007 
2029 
2044  COMMIT_WAIT
2045  };
2046 
2053  WARN_UNUSED_RESULT;
2054 
2072  Status SetMutationBufferSpace(size_t size_bytes) WARN_UNUSED_RESULT;
2073 
2098  WARN_UNUSED_RESULT;
2099 
2121  Status SetMutationBufferFlushInterval(unsigned int millis) WARN_UNUSED_RESULT;
2122 
2147  Status SetMutationBufferMaxNum(unsigned int max_num) WARN_UNUSED_RESULT;
2148 
2154  void SetTimeoutMillis(int millis);
2155 
2159 
2183  Status Apply(KuduWriteOperation* write_op) WARN_UNUSED_RESULT;
2184 
2199  Status Flush() WARN_UNUSED_RESULT;
2200 
2241  void FlushAsync(KuduStatusCallback* cb);
2242 
2245  Status Close() WARN_UNUSED_RESULT;
2246 
2255  bool HasPendingOperations() const;
2256 
2278  int CountBufferedOperations() const
2279  ATTRIBUTE_DEPRECATED("this method is experimental and will disappear "
2280  "in a future release");
2281 
2306  Status SetErrorBufferSpace(size_t size_bytes);
2307 
2317  int CountPendingErrors() const;
2318 
2329  void GetPendingErrors(std::vector<KuduError*>* errors, bool* overflowed);
2330 
2332  KuduClient* client() const;
2333 
2334  private:
2335  class KUDU_NO_EXPORT Data;
2336 
2337  friend class ClientTest;
2338  friend class KuduClient;
2339  friend class KuduTransaction;
2340  friend class internal::Batcher;
2341  friend class tablet::FuzzTest;
2342  FRIEND_TEST(ClientTest, TestAutoFlushBackgroundAndErrorCollector);
2343  FRIEND_TEST(ClientTest, TestAutoFlushBackgroundApplyBlocks);
2344  FRIEND_TEST(ClientTest, TxnIdOfTransactionalSession);
2345 
2346  explicit KuduSession(const sp::shared_ptr<KuduClient>& client);
2347  KuduSession(const sp::shared_ptr<KuduClient>& client, const TxnId& txn_id);
2348 
2349  // Owned.
2350  Data* data_;
2351 
2352  DISALLOW_COPY_AND_ASSIGN(KuduSession);
2353 };
2354 
2355 
2360 class KUDU_EXPORT KuduScanner {
2361  public:
2363  enum ReadMode {
2372 
2393 
2404  READ_YOUR_WRITES
2405  };
2406 
2410  enum OrderMode {
2417 
2422  ORDERED
2423  };
2424 
2428  enum { kScanTimeoutMillis = 30000 };
2429 
2435  explicit KuduScanner(KuduTable* table);
2436  ~KuduScanner();
2437 
2447  Status SetProjectedColumnNames(const std::vector<std::string>& col_names)
2448  WARN_UNUSED_RESULT;
2449 
2459  Status SetProjectedColumnIndexes(const std::vector<int>& col_indexes)
2460  WARN_UNUSED_RESULT;
2461 
2467  Status SetProjectedColumns(const std::vector<std::string>& col_names)
2468  WARN_UNUSED_RESULT
2469  ATTRIBUTE_DEPRECATED("use SetProjectedColumnNames() instead");
2470 
2479  Status AddConjunctPredicate(KuduPredicate* pred) WARN_UNUSED_RESULT;
2480 
2490 
2499  ATTRIBUTE_DEPRECATED("use AddLowerBound() instead");
2500 
2510 
2519  ATTRIBUTE_DEPRECATED("use AddExclusiveUpperBound() instead");
2520 
2530 
2540 
2547  Status SetCacheBlocks(bool cache_blocks);
2548 
2551 
2571 
2580  void Close();
2581 
2590  bool HasMoreRows() const;
2591 
2603  Status NextBatch(std::vector<KuduRowResult>* rows)
2604  ATTRIBUTE_DEPRECATED("use NextBatch(KuduScanBatch*) instead");
2605 
2618 
2631 
2641 
2644 
2651  Status SetBatchSizeBytes(uint32_t batch_size);
2652 
2661  WARN_UNUSED_RESULT;
2662 
2668  Status SetReadMode(ReadMode read_mode) WARN_UNUSED_RESULT;
2669 
2675  Status SetOrderMode(OrderMode order_mode) WARN_UNUSED_RESULT
2676  ATTRIBUTE_DEPRECATED("use SetFaultTolerant() instead");
2677 
2690  Status SetFaultTolerant() WARN_UNUSED_RESULT;
2691 
2697  Status SetSnapshotMicros(uint64_t snapshot_timestamp_micros) WARN_UNUSED_RESULT;
2698 
2708  Status SetSnapshotRaw(uint64_t snapshot_timestamp) WARN_UNUSED_RESULT;
2709 
2711 
2726  Status SetDiffScan(uint64_t start_timestamp, uint64_t end_timestamp)
2727  WARN_UNUSED_RESULT KUDU_NO_EXPORT;
2728 
2730 
2736  Status SetTimeoutMillis(int millis);
2737 
2739  KuduSchema GetProjectionSchema() const;
2740 
2742  sp::shared_ptr<KuduTable> GetKuduTable();
2743 
2751 
2753  static const uint64_t NO_FLAGS = 0;
2760  static const uint64_t PAD_UNIXTIME_MICROS_TO_16_BYTES = 1 << 0;
2761 
2769  static const uint64_t COLUMNAR_LAYOUT = 1 << 1;
2770 
2798  Status SetRowFormatFlags(uint64_t flags);
2800 
2806  Status SetLimit(int64_t limit) WARN_UNUSED_RESULT;
2807 
2813  std::string ToString() const;
2814 
2815  private:
2816  class KUDU_NO_EXPORT Data;
2817 
2818  Status NextBatch(internal::ScanBatchDataInterface* batch);
2819 
2820  friend class KuduScanToken;
2821  FRIEND_TEST(ClientTest, TestBlockScannerHijackingAttempts);
2822  FRIEND_TEST(ClientTest, TestScanCloseProxy);
2823  FRIEND_TEST(ClientTest, TestScanFaultTolerance);
2824  FRIEND_TEST(ClientTest, TestScanNoBlockCaching);
2825  FRIEND_TEST(ClientTest, TestScanTimeout);
2826  FRIEND_TEST(ClientTest, TestReadAtSnapshotNoTimestampSet);
2827  FRIEND_TEST(ConsistencyITest, TestSnapshotScanTimestampReuse);
2828  FRIEND_TEST(ScanTokenTest, TestScanTokens);
2829 
2830  // Owned.
2831  Data* data_;
2832 
2833  DISALLOW_COPY_AND_ASSIGN(KuduScanner);
2834 };
2835 
2856 class KUDU_EXPORT KuduScanToken {
2857  public:
2858 
2859  ~KuduScanToken();
2860 
2871  Status IntoKuduScanner(KuduScanner** scanner) const WARN_UNUSED_RESULT;
2872 
2874  const KuduTablet& tablet() const;
2875 
2884  Status Serialize(std::string* buf) const WARN_UNUSED_RESULT;
2885 
2898  const std::string& serialized_token,
2899  KuduScanner** scanner) WARN_UNUSED_RESULT;
2900 
2901  private:
2902  class KUDU_NO_EXPORT Data;
2903 
2904  friend class KuduScanTokenBuilder;
2905 
2906  KuduScanToken();
2907 
2908  // Owned.
2909  Data* data_;
2910 
2911  DISALLOW_COPY_AND_ASSIGN(KuduScanToken);
2912 };
2913 
2917 class KUDU_EXPORT KuduScanTokenBuilder {
2918  public:
2919 
2927 
2937  Status SetProjectedColumnNames(const std::vector<std::string>& col_names)
2938  WARN_UNUSED_RESULT;
2939 
2941  Status SetProjectedColumnIndexes(const std::vector<int>& col_indexes)
2942  WARN_UNUSED_RESULT;
2943 
2945  Status AddConjunctPredicate(KuduPredicate* pred) WARN_UNUSED_RESULT;
2946 
2948  Status AddLowerBound(const KuduPartialRow& key) WARN_UNUSED_RESULT;
2949 
2958  Status AddUpperBound(const KuduPartialRow& key) WARN_UNUSED_RESULT;
2959 
2961  Status SetCacheBlocks(bool cache_blocks) WARN_UNUSED_RESULT;
2962 
2969  Status SetBatchSizeBytes(uint32_t batch_size) WARN_UNUSED_RESULT;
2970 
2979  WARN_UNUSED_RESULT;
2980 
2982  Status SetReadMode(KuduScanner::ReadMode read_mode) WARN_UNUSED_RESULT;
2983 
2985  Status SetFaultTolerant() WARN_UNUSED_RESULT;
2986 
2988  Status SetSnapshotMicros(uint64_t snapshot_timestamp_micros)
2989  WARN_UNUSED_RESULT;
2990 
2992  Status SetSnapshotRaw(uint64_t snapshot_timestamp) WARN_UNUSED_RESULT;
2993 
2995 
2997  Status SetDiffScan(uint64_t start_timestamp, uint64_t end_timestamp)
2998  WARN_UNUSED_RESULT KUDU_NO_EXPORT;
3000 
3002  Status SetTimeoutMillis(int millis) WARN_UNUSED_RESULT;
3003 
3011  Status IncludeTableMetadata(bool include_metadata) WARN_UNUSED_RESULT;
3012 
3020  Status IncludeTabletMetadata(bool include_metadata) WARN_UNUSED_RESULT;
3021 
3030  Status Build(std::vector<KuduScanToken*>* tokens) WARN_UNUSED_RESULT;
3031 
3032  private:
3033  class KUDU_NO_EXPORT Data;
3034 
3035  // Owned.
3036  Data* data_;
3037 
3038  DISALLOW_COPY_AND_ASSIGN(KuduScanTokenBuilder);
3039 };
3040 
3042 class KUDU_EXPORT KuduPartitionerBuilder {
3043  public:
3048  explicit KuduPartitionerBuilder(sp::shared_ptr<KuduTable> table);
3050 
3057 
3076  Status Build(KuduPartitioner** partitioner);
3077  private:
3078  class KUDU_NO_EXPORT Data;
3079 
3080  // Owned.
3081  Data* data_;
3082 
3083  DISALLOW_COPY_AND_ASSIGN(KuduPartitionerBuilder);
3084 };
3085 
3096 class KUDU_EXPORT KuduPartitioner {
3097  public:
3098  ~KuduPartitioner();
3099 
3103  int NumPartitions() const;
3104 
3116  Status PartitionRow(const KuduPartialRow& row, int* partition);
3117  private:
3118  class KUDU_NO_EXPORT Data;
3119 
3120  friend class KuduPartitionerBuilder;
3121 
3122  explicit KuduPartitioner(Data* data);
3123  Data* data_; // Owned.
3124 };
3125 
3126 
3127 } // namespace client
3128 } // namespace kudu
3129 #endif
A row which may only contain values for a subset of the columns.
Definition: partial_row.h:72
A representation of a time interval.
Definition: monotime.h:57
A wrapper around externally allocated data.
Definition: slice.h:51
A representation of an operation's outcome.
Definition: status.h:165
A "factory" for KuduClient objects.
Definition: client.h:227
KuduClientBuilder & clear_master_server_addrs()
KuduClientBuilder & master_server_addrs(const std::vector< std::string > &addrs)
Status Build(sp::shared_ptr< KuduClient > *client)
KuduClientBuilder & default_rpc_timeout(const MonoDelta &timeout)
KuduClientBuilder & import_authentication_credentials(std::string authn_creds)
KuduClientBuilder & default_admin_operation_timeout(const MonoDelta &timeout)
KuduClientBuilder & num_reactors(int num_reactors)
Set the number of reactors for the RPC messenger.
KuduClientBuilder & add_master_server_addr(const std::string &addr)
KuduClientBuilder & connection_negotiation_timeout(const MonoDelta &timeout)
A handle for a connection to a cluster.
Definition: client.h:583
KuduTableCreator * NewTableCreator()
const MonoDelta & default_admin_operation_timeout() const
void SetLatestObservedTimestamp(uint64_t ht_timestamp)
KuduTableAlterer * NewTableAlterer(const std::string &table_name)
static const uint64_t kNoTimestamp
Definition: client.h:799
bool IsMultiMaster() const
sp::shared_ptr< KuduSession > NewSession()
Status GetTableSchema(const std::string &table_name, KuduSchema *schema)
Status IsCreateTableInProgress(const std::string &table_name, bool *create_in_progress)
Status ListTables(std::vector< std::string > *tables, const std::string &filter="")
MonoDelta connection_negotiation_timeout() const
Status IsAlterTableInProgress(const std::string &table_name, bool *alter_in_progress)
Status TableExists(const std::string &table_name, bool *exists)
Status DeleteTable(const std::string &table_name)
uint64_t GetLatestObservedTimestamp() const
Status OpenTable(const std::string &table_name, sp::shared_ptr< KuduTable > *table)
const MonoDelta & default_rpc_timeout() const
Status NewTransaction(sp::shared_ptr< KuduTransaction > *txn) WARN_UNUSED_RESULT
Status ListTabletServers(std::vector< KuduTabletServer * > *tablet_servers)
Status ExportAuthenticationCredentials(std::string *authn_creds) const
ReplicaSelection
Policy with which to choose amongst multiple replicas.
Definition: client.h:772
@ LEADER_ONLY
Select the LEADER replica.
Definition: client.h:773
Builder API for specifying or altering a column within a table schema.
Definition: schema.h:341
A batch of columnar data returned from a scanner.
Definition: columnar_scan_batch.h:51
A single row delete ignore to be sent to the cluster.
Definition: write_op.h:297
A single row delete to be sent to the cluster.
Definition: write_op.h:271
This class represents an error which occurred in a write operation.
Definition: client.h:1838
const Status & status() const
const KuduWriteOperation & failed_op() const
bool was_possibly_successful() const
KuduWriteOperation * release_failed_op()
A single row insert ignore to be sent to the cluster, duplicate row errors are ignored.
Definition: write_op.h:166
A single row insert to be sent to the cluster.
Definition: write_op.h:139
The interface for all logging callbacks.
Definition: callbacks.h:44
Builder for Partitioner instances.
Definition: client.h:3042
KuduPartitionerBuilder * SetBuildTimeout(MonoDelta timeout)
KuduPartitionerBuilder(sp::shared_ptr< KuduTable > table)
Status Build(KuduPartitioner **partitioner)
Definition: client.h:3096
Status PartitionRow(const KuduPartialRow &row, int *partition)
A representation of comparison predicate for Kudu queries.
Definition: scan_predicate.h:43
ComparisonOp
Supported comparison operators.
Definition: scan_predicate.h:46
In-memory representation of a remote tablet's replica.
Definition: client.h:991
const KuduTabletServer & ts() const
A batch of zero or more rows returned by a scan operation.
Definition: scan_batch.h:84
Builds scan tokens for a table.
Definition: client.h:2917
Status SetProjectedColumnIndexes(const std::vector< int > &col_indexes) WARN_UNUSED_RESULT
Status SetProjectedColumnNames(const std::vector< std::string > &col_names) WARN_UNUSED_RESULT
Status SetSelection(KuduClient::ReplicaSelection selection) WARN_UNUSED_RESULT
Status SetBatchSizeBytes(uint32_t batch_size) WARN_UNUSED_RESULT
Status SetFaultTolerant() WARN_UNUSED_RESULT
Status SetCacheBlocks(bool cache_blocks) WARN_UNUSED_RESULT
KuduScanTokenBuilder(KuduTable *table)
Status AddConjunctPredicate(KuduPredicate *pred) WARN_UNUSED_RESULT
Status AddUpperBound(const KuduPartialRow &key) WARN_UNUSED_RESULT
Status SetReadMode(KuduScanner::ReadMode read_mode) WARN_UNUSED_RESULT
Status AddLowerBound(const KuduPartialRow &key) WARN_UNUSED_RESULT
A scan descriptor limited to a single physical contiguous location.
Definition: client.h:2856
const KuduTablet & tablet() const
Status Serialize(std::string *buf) const WARN_UNUSED_RESULT
Status IntoKuduScanner(KuduScanner **scanner) const WARN_UNUSED_RESULT
static Status DeserializeIntoScanner(KuduClient *client, const std::string &serialized_token, KuduScanner **scanner) WARN_UNUSED_RESULT
This class is a representation of a single scan.
Definition: client.h:2360
Status SetFaultTolerant() WARN_UNUSED_RESULT
Status SetReadMode(ReadMode read_mode) WARN_UNUSED_RESULT
KuduScanner(KuduTable *table)
ReadMode
The read modes for scanners.
Definition: client.h:2363
@ READ_AT_SNAPSHOT
Definition: client.h:2392
@ READ_LATEST
Definition: client.h:2371
OrderMode
Definition: client.h:2410
@ UNORDERED
Definition: client.h:2416
Status AddLowerBoundRaw(const Slice &key) ATTRIBUTE_DEPRECATED("use AddLowerBound() instead")
Status AddConjunctPredicate(KuduPredicate *pred) WARN_UNUSED_RESULT
Status SetCacheBlocks(bool cache_blocks)
Status AddExclusiveUpperBound(const KuduPartialRow &key)
Status NextBatch(KuduColumnarScanBatch *batch)
Status AddLowerBound(const KuduPartialRow &key)
Status SetProjectedColumns(const std::vector< std::string > &col_names) WARN_UNUSED_RESULT ATTRIBUTE_DEPRECATED("use SetProjectedColumnNames() instead")
Status SetProjectedColumnIndexes(const std::vector< int > &col_indexes) WARN_UNUSED_RESULT
Status SetOrderMode(OrderMode order_mode) WARN_UNUSED_RESULT ATTRIBUTE_DEPRECATED("use SetFaultTolerant() instead")
Status AddExclusiveUpperBoundPartitionKeyRaw(const Slice &partition_key)
Status AddLowerBoundPartitionKeyRaw(const Slice &partition_key)
Status SetProjectedColumnNames(const std::vector< std::string > &col_names) WARN_UNUSED_RESULT
Status GetCurrentServer(KuduTabletServer **server)
const ResourceMetrics & GetResourceMetrics() const
Status AddExclusiveUpperBoundRaw(const Slice &key) ATTRIBUTE_DEPRECATED("use AddExclusiveUpperBound() instead")
Status NextBatch(KuduScanBatch *batch)
Status SetSelection(KuduClient::ReplicaSelection selection) WARN_UNUSED_RESULT
Status NextBatch(std::vector< KuduRowResult > *rows) ATTRIBUTE_DEPRECATED("use NextBatch(KuduScanBatch*) instead")
Status SetBatchSizeBytes(uint32_t batch_size)
A representation of a table's schema.
Definition: schema.h:597
Representation of a Kudu client session.
Definition: client.h:1943
void SetTimeoutMillis(int millis)
Status SetExternalConsistencyMode(ExternalConsistencyMode m) WARN_UNUSED_RESULT
Status Flush() WARN_UNUSED_RESULT
Status SetMutationBufferFlushWatermark(double watermark_pct) WARN_UNUSED_RESULT
Status SetFlushMode(FlushMode m) WARN_UNUSED_RESULT
ExternalConsistencyMode
The possible external consistency modes on which Kudu operates.
Definition: client.h:2009
@ CLIENT_PROPAGATED
Definition: client.h:2028
Status SetMutationBufferFlushInterval(unsigned int millis) WARN_UNUSED_RESULT
FlushMode
Modes of flush operations.
Definition: client.h:1948
@ AUTO_FLUSH_BACKGROUND
Definition: client.h:1981
@ AUTO_FLUSH_SYNC
Definition: client.h:1953
Status SetMutationBufferMaxNum(unsigned int max_num) WARN_UNUSED_RESULT
Status Apply(KuduWriteOperation *write_op) WARN_UNUSED_RESULT
Status SetMutationBufferSpace(size_t size_bytes) WARN_UNUSED_RESULT
The interface for all status callbacks.
Definition: callbacks.h:161
Alters an existing table based on the provided steps.
Definition: client.h:1605
KuduTableAlterer * SetOwner(const std::string &new_owner)
KuduTableAlterer * AlterExtraConfig(const std::map< std::string, std::string > &extra_configs)
KuduTableAlterer * AddRangePartition(KuduPartialRow *lower_bound, KuduPartialRow *upper_bound, KuduTableCreator::RangePartitionBound lower_bound_type=KuduTableCreator::INCLUSIVE_BOUND, KuduTableCreator::RangePartitionBound upper_bound_type=KuduTableCreator::EXCLUSIVE_BOUND)
KuduColumnSpec * AlterColumn(const std::string &name)
KuduTableAlterer * wait(bool wait)
KuduTableAlterer * AddRangePartitionWithDimension(KuduPartialRow *lower_bound, KuduPartialRow *upper_bound, const std::string &dimension_label, KuduTableCreator::RangePartitionBound lower_bound_type=KuduTableCreator::INCLUSIVE_BOUND, KuduTableCreator::RangePartitionBound upper_bound_type=KuduTableCreator::EXCLUSIVE_BOUND)
KuduTableAlterer * DropRangePartition(KuduPartialRow *lower_bound, KuduPartialRow *upper_bound, KuduTableCreator::RangePartitionBound lower_bound_type=KuduTableCreator::INCLUSIVE_BOUND, KuduTableCreator::RangePartitionBound upper_bound_type=KuduTableCreator::EXCLUSIVE_BOUND)
KuduTableAlterer * DropColumn(const std::string &name)
KuduTableAlterer * RenameTo(const std::string &new_name)
KuduColumnSpec * AddColumn(const std::string &name)
KuduTableAlterer * timeout(const MonoDelta &timeout)
A helper class to create a new table with the desired options.
Definition: client.h:1050
RangePartitionBound
Range partition bound type.
Definition: client.h:1131
@ INCLUSIVE_BOUND
An inclusive bound.
Definition: client.h:1133
@ EXCLUSIVE_BOUND
An exclusive bound.
Definition: client.h:1132
KuduTableCreator & extra_configs(const std::map< std::string, std::string > &extra_configs)
KuduTableCreator & table_name(const std::string &name)
KuduTableCreator & schema(const KuduSchema *schema)
KuduTableCreator & set_range_partition_columns(const std::vector< std::string > &columns)
KuduTableCreator & wait(bool wait)
KuduTableCreator & timeout(const MonoDelta &timeout)
KuduTableCreator & add_hash_partitions(const std::vector< std::string > &columns, int32_t num_buckets)
KuduTableCreator & add_hash_partitions(const std::vector< std::string > &columns, int32_t num_buckets, int32_t seed)
KuduTableCreator & num_replicas(int n_replicas)
KuduTableCreator & add_range_partition(KuduPartialRow *lower_bound, KuduPartialRow *upper_bound, RangePartitionBound lower_bound_type=INCLUSIVE_BOUND, RangePartitionBound upper_bound_type=EXCLUSIVE_BOUND)
KuduTableCreator & set_owner(const std::string &owner)
KuduTableCreator & add_range_partition_split(KuduPartialRow *split_row)
KuduTableCreator & split_rows(const std::vector< const KuduPartialRow * > &split_rows) ATTRIBUTE_DEPRECATED("use add_range_partition_split() instead")
KuduTableCreator & dimension_label(const std::string &dimension_label)
In-memory statistics of table.
Definition: client.h:1279
A representation of a table on a particular cluster.
Definition: client.h:1332
KuduInsert * NewInsert()
const PartitionSchema & partition_schema() const
KuduUpsert * NewUpsert()
KuduClient * client() const
KuduInsertIgnore * NewInsertIgnore()
KuduPredicate * NewInBloomFilterPredicate(const Slice &col_name, std::vector< KuduBloomFilter * > *bloom_filters)
KuduPredicate * NewInListPredicate(const Slice &col_name, std::vector< KuduValue * > *values)
const std::string & owner() const
KuduPredicate * NewIsNullPredicate(const Slice &col_name)
const std::map< std::string, std::string > & extra_configs() const
KuduUpdate * NewUpdate()
KuduDeleteIgnore * NewDeleteIgnore()
KuduUpdateIgnore * NewUpdateIgnore()
const std::string & id() const
KuduDelete * NewDelete()
const std::string & name() const
KuduPredicate * NewComparisonPredicate(const Slice &col_name, KuduPredicate::ComparisonOp op, KuduValue *value)
const KuduSchema & schema() const
KuduPredicate * NewIsNotNullPredicate(const Slice &col_name)
KuduPredicate * NewInBloomFilterPredicate(const Slice &col_name, const std::vector< Slice > &bloom_filters)
In-memory representation of a remote tablet server.
Definition: client.h:950
const std::string & hostname() const
const std::string & uuid() const
In-memory representation of a remote tablet.
Definition: client.h:1020
const std::string & id() const
const std::vector< const KuduReplica * > & replicas() const
SerializationOptions & enable_keepalive(bool enable)
Definition: client.h:350
Status Commit(bool wait=true) WARN_UNUSED_RESULT
Status Serialize(std::string *serialized_txn, const SerializationOptions &options=SerializationOptions()) const WARN_UNUSED_RESULT
Status CreateSession(sp::shared_ptr< KuduSession > *session) WARN_UNUSED_RESULT
A single row update ignore to be sent to the cluster, missing row errors are ignored.
Definition: write_op.h:245
A single row update to be sent to the cluster.
Definition: write_op.h:219
A single row upsert to be sent to the cluster.
Definition: write_op.h:192
A constant cell value with a specific type.
Definition: value.h:35
A single-row write operation to be sent to a Kudu table.
Definition: write_op.h:64
A generic catalog of simple metrics.
Definition: resource_metrics.h:39
Smart pointer typedefs for externally-faced code.