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 DisableWriteWhenExceedingQuotaTest;
59 class KuduPartialRow;
60 class MonoDelta;
61 class Partition;
62 class PartitionSchema;
63 class SecurityUnknownTskTest;
64 class TxnId;
65 
66 namespace client {
67 class KuduClient;
68 class KuduTable;
69 } // namespace client
70 
71 namespace tablet {
72 class FuzzTest;
73 } // namespace tablet
74 
75 namespace transactions {
76 class CoordinatorRpc;
77 class ParticipantRpc;
78 class TxnSystemClient;
79 } // namespace transactions
80 
81 namespace tools {
82 class LeaderMasterProxy;
83 class RemoteKsckCluster;
84 } // namespace tools
85 
86 namespace client {
87 
88 class KuduColumnarScanBatch;
89 class KuduDelete;
90 class KuduDeleteIgnore;
91 class KuduInsert;
92 class KuduInsertIgnore;
93 class KuduLoggingCallback;
94 class KuduPartitioner;
95 class KuduScanBatch;
96 class KuduSession;
97 class KuduStatusCallback;
98 class KuduTableAlterer;
99 class KuduTableCreator;
100 class KuduTableStatistics;
101 class KuduTablet;
102 class KuduTabletServer;
103 class KuduUpdate;
104 class KuduUpdateIgnore;
105 class KuduUpsert;
106 class KuduValue;
107 class KuduWriteOperation;
108 class ResourceMetrics;
109 
110 namespace internal {
111 class Batcher;
112 class ErrorCollector;
113 class GetTableSchemaRpc;
114 class LookupRpc;
115 class MetaCache;
116 class RemoteTablet;
117 class RemoteTabletServer;
118 class ReplicaController;
119 class RetrieveAuthzTokenRpc;
120 class ScanBatchDataInterface;
121 class WriteRpc;
122 template <class ReqClass, class RespClass>
123 class AsyncLeaderMasterRpc; // IWYU pragma: keep
124 template <class ReqClass, class RespClass>
125 class AsyncRandomTxnManagerRpc; // IWYU pragma: keep
126 } // namespace internal
127 
140 void KUDU_EXPORT InstallLoggingCallback(KuduLoggingCallback* cb);
141 
148 void KUDU_EXPORT UninstallLoggingCallback();
149 
165 void KUDU_EXPORT SetVerboseLogLevel(int level);
166 
176 Status KUDU_EXPORT SetInternalSignalNumber(int signum) WARN_UNUSED_RESULT;
177 
189 Status KUDU_EXPORT DisableSaslInitialization() WARN_UNUSED_RESULT;
190 
191 
214 Status KUDU_EXPORT DisableOpenSSLInitialization() WARN_UNUSED_RESULT;
215 
218 std::string KUDU_EXPORT GetShortVersionString();
219 
222 std::string KUDU_EXPORT GetAllVersionInfo();
223 
228 class KUDU_EXPORT KuduClientBuilder {
229  public:
232 
237 
243  KuduClientBuilder& master_server_addrs(const std::vector<std::string>& addrs);
244 
252  KuduClientBuilder& add_master_server_addr(const std::string& addr);
253 
264 
273 
288 
289 
298 
308  KuduClientBuilder& num_reactors(int num_reactors);
309 
320  KuduClientBuilder& sasl_protocol_name(const std::string& sasl_protocol_name);
321 
332  Status Build(sp::shared_ptr<KuduClient>* client);
333 
334  private:
335  class KUDU_NO_EXPORT Data;
336 
337  friend class internal::ReplicaController;
338 
339  // Owned.
340  Data* data_;
341 
342  DISALLOW_COPY_AND_ASSIGN(KuduClientBuilder);
343 };
344 
362 class KUDU_EXPORT KuduTransaction :
363  public sp::enable_shared_from_this<KuduTransaction> {
364  public:
365  ~KuduTransaction();
366 
379  Status CreateSession(sp::shared_ptr<KuduSession>* session) WARN_UNUSED_RESULT;
380 
397  Status Commit() WARN_UNUSED_RESULT;
398 
413  Status StartCommit() WARN_UNUSED_RESULT;
414 
442  Status IsCommitComplete(bool* is_complete,
443  Status* completion_status) WARN_UNUSED_RESULT;
444 
448  Status Rollback() WARN_UNUSED_RESULT;
449 
459  class KUDU_EXPORT SerializationOptions {
460  public:
463 
505  bool keepalive() const;
506 
519 
520  private:
521  friend class KuduTransaction;
522  class KUDU_NO_EXPORT Data;
523  Data* data_; // Owned.
524 
525  DISALLOW_COPY_AND_ASSIGN(SerializationOptions);
526  };
527 
554  std::string* serialized_txn,
555  const SerializationOptions& options = SerializationOptions()) const WARN_UNUSED_RESULT;
556 
572  static Status Deserialize(const sp::shared_ptr<KuduClient>& client,
573  const std::string& serialized_txn,
574  sp::shared_ptr<KuduTransaction>* txn) WARN_UNUSED_RESULT;
575  private:
576  DISALLOW_COPY_AND_ASSIGN(KuduTransaction);
577 
578  friend class KuduClient;
579  friend class KuduSession;
580  FRIEND_TEST(ClientTest, TxnIdOfTransactionalSession);
581  FRIEND_TEST(ClientTest, TxnToken);
582 
583  class KUDU_NO_EXPORT Data;
584 
585  explicit KuduTransaction(const sp::shared_ptr<KuduClient>& client);
586  Data* data_; // Owned.
587 };
588 
615 class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> {
616  public:
617  ~KuduClient();
618 
624 
633  Status IsCreateTableInProgress(const std::string& table_name,
634  bool* create_in_progress);
635 
641  Status DeleteTable(const std::string& table_name);
642 
644 
655  Status DeleteTableInCatalogs(const std::string& table_name,
656  bool modify_external_catalogs) KUDU_NO_EXPORT;
658 
665  KuduTableAlterer* NewTableAlterer(const std::string& table_name);
666 
675  Status IsAlterTableInProgress(const std::string& table_name,
676  bool* alter_in_progress);
684  Status GetTableSchema(const std::string& table_name,
685  KuduSchema* schema);
686 
693  Status ListTabletServers(std::vector<KuduTabletServer*>* tablet_servers);
694 
702  Status ListTables(std::vector<std::string>* tables,
703  const std::string& filter = "");
704 
712  Status TableExists(const std::string& table_name, bool* exists);
713 
730  Status OpenTable(const std::string& table_name,
731  sp::shared_ptr<KuduTable>* table);
732 
738  sp::shared_ptr<KuduSession> NewSession();
739 
763  Status NewTransaction(sp::shared_ptr<KuduTransaction>* txn) WARN_UNUSED_RESULT;
764 
766 
779  Status GetTablet(const std::string& tablet_id,
780  KuduTablet** tablet) KUDU_NO_EXPORT;
781 
789  Status GetTableStatistics(const std::string& table_name,
790  KuduTableStatistics** statistics);
791 
799  std::string GetMasterAddresses() const KUDU_NO_EXPORT;
800 
802 
806 
807  CLOSEST_REPLICA,
812 
813  FIRST_REPLICA
814  };
815 
818  bool IsMultiMaster() const;
819 
822 
825 
828 
831  static const uint64_t kNoTimestamp;
832 
843  uint64_t GetLatestObservedTimestamp() const;
844 
859  void SetLatestObservedTimestamp(uint64_t ht_timestamp);
860 
872  Status ExportAuthenticationCredentials(std::string* authn_creds) const;
873 
875 
881  std::string GetHiveMetastoreUris() const KUDU_NO_EXPORT;
882 
888  bool GetHiveMetastoreSaslEnabled() const KUDU_NO_EXPORT;
889 
899  std::string GetHiveMetastoreUuid() const KUDU_NO_EXPORT;
900 
907  std::string location() const KUDU_NO_EXPORT;
908 
912  std::string cluster_id() const KUDU_NO_EXPORT;
914 
915  private:
916  class KUDU_NO_EXPORT Data;
917 
918  template <class ReqClass, class RespClass>
919  friend class internal::AsyncLeaderMasterRpc;
920  template <class ReqClass, class RespClass>
921  friend class internal::AsyncRandomTxnManagerRpc;
922 
923  friend class ClientTest;
924  friend class ConnectToClusterBaseTest;
925  friend class KuduClientBuilder;
926  friend class KuduPartitionerBuilder;
927  friend class KuduTransaction;
928  friend class KuduScanToken;
929  friend class KuduScanTokenBuilder;
930  friend class KuduScanner;
931  friend class KuduSession;
932  friend class KuduTable;
933  friend class KuduTableAlterer;
934  friend class KuduTableCreator;
935  friend class internal::Batcher;
936  friend class internal::GetTableSchemaRpc;
937  friend class internal::LookupRpc;
938  friend class internal::MetaCache;
939  friend class internal::RemoteTablet;
940  friend class internal::RemoteTabletServer;
941  friend class internal::RetrieveAuthzTokenRpc;
942  friend class internal::WriteRpc;
943  friend class kudu::AuthzTokenTest;
944  friend class kudu::DisableWriteWhenExceedingQuotaTest;
945  friend class kudu::SecurityUnknownTskTest;
946  friend class transactions::CoordinatorRpc;
947  friend class transactions::ParticipantRpc;
948  friend class transactions::TxnSystemClient;
949  friend class tools::LeaderMasterProxy;
950  friend class tools::RemoteKsckCluster;
951 
952  FRIEND_TEST(kudu::ClientStressTest, TestUniqueClientIds);
953  FRIEND_TEST(ClientTest, ClearCacheAndConcurrentWorkload);
954  FRIEND_TEST(ClientTest, ConnectionNegotiationTimeout);
955  FRIEND_TEST(ClientTest, TestBasicIdBasedLookup);
956  FRIEND_TEST(ClientTest, TestCacheAuthzTokens);
957  FRIEND_TEST(ClientTest, TestGetSecurityInfoFromMaster);
958  FRIEND_TEST(ClientTest, TestGetTabletServerBlacklist);
959  FRIEND_TEST(ClientTest, TestGetTabletServerDeterministic);
960  FRIEND_TEST(ClientTest, TestMasterDown);
961  FRIEND_TEST(ClientTest, TestMasterLookupPermits);
962  FRIEND_TEST(ClientTest, TestMetaCacheExpiry);
963  FRIEND_TEST(ClientTest, TestMetaCacheExpiryById);
964  FRIEND_TEST(ClientTest, TestMetaCacheExpiryWithKeysAndIds);
965  FRIEND_TEST(ClientTest, TestMetaCacheLookupNoLeaders);
966  FRIEND_TEST(ClientTest, TestMetaCacheWithKeysAndIds);
967  FRIEND_TEST(ClientTest, TestNonCoveringRangePartitions);
968  FRIEND_TEST(ClientTest, TestRetrieveAuthzTokenInParallel);
969  FRIEND_TEST(ClientTest, TestReplicatedTabletWritesWithLeaderElection);
970  FRIEND_TEST(ClientTest, TestScanFaultTolerance);
971  FRIEND_TEST(ClientTest, TestScanTimeout);
972  FRIEND_TEST(ClientTest, TestWriteWithDeadMaster);
973  FRIEND_TEST(MasterFailoverTest, TestPauseAfterCreateTableIssued);
974 
975  KuduClient();
976 
977  // Owned.
978  Data* data_;
979 
980  DISALLOW_COPY_AND_ASSIGN(KuduClient);
981 };
982 
984 class KUDU_EXPORT KuduTabletServer {
985  public:
986  ~KuduTabletServer();
987 
990  const std::string& uuid() const;
991 
994  const std::string& hostname() const;
995 
998  uint16_t port() const;
999 
1001 
1006  const std::string& location() const KUDU_NO_EXPORT;
1008 
1009  private:
1010  class KUDU_NO_EXPORT Data;
1011 
1012  friend class KuduClient;
1013  friend class KuduScanner;
1014  friend class KuduScanTokenBuilder;
1015 
1016  KuduTabletServer();
1017 
1018  // Owned.
1019  Data* data_;
1020 
1021  DISALLOW_COPY_AND_ASSIGN(KuduTabletServer);
1022 };
1023 
1025 class KUDU_EXPORT KuduReplica {
1026  public:
1027  ~KuduReplica();
1028 
1033  bool is_leader() const;
1034 
1036  const KuduTabletServer& ts() const;
1037 
1038  private:
1039  friend class KuduClient;
1040  friend class KuduScanTokenBuilder;
1041  friend class internal::ReplicaController;
1042 
1043  class KUDU_NO_EXPORT Data;
1044 
1045  KuduReplica();
1046 
1047  // Owned.
1048  Data* data_;
1049 
1050  DISALLOW_COPY_AND_ASSIGN(KuduReplica);
1051 };
1052 
1054 class KUDU_EXPORT KuduTablet {
1055  public:
1056  ~KuduTablet();
1057 
1060  const std::string& id() const;
1061 
1067  const std::vector<const KuduReplica*>& replicas() const;
1068 
1069  private:
1070  friend class KuduClient;
1071  friend class KuduScanTokenBuilder;
1072 
1073  class KUDU_NO_EXPORT Data;
1074 
1075  KuduTablet();
1076 
1077  // Owned.
1078  Data* data_;
1079 
1080  DISALLOW_COPY_AND_ASSIGN(KuduTablet);
1081 };
1082 
1084 class KUDU_EXPORT KuduTableCreator {
1085  public:
1086  ~KuduTableCreator();
1087 
1099  KuduTableCreator& table_name(const std::string& name);
1100 
1112 
1129  KuduTableCreator& add_hash_partitions(const std::vector<std::string>& columns,
1130  int32_t num_buckets);
1131 
1147  KuduTableCreator& add_hash_partitions(const std::vector<std::string>& columns,
1148  int32_t num_buckets, int32_t seed);
1149 
1162  KuduTableCreator& set_range_partition_columns(const std::vector<std::string>& columns);
1163 
1168  };
1169 
1199  KuduPartialRow* upper_bound,
1200  RangePartitionBound lower_bound_type = INCLUSIVE_BOUND,
1201  RangePartitionBound upper_bound_type = EXCLUSIVE_BOUND);
1202 
1212 
1220  KuduTableCreator& set_owner(const std::string& owner);
1221 
1227  KuduTableCreator& set_comment(const std::string& comment);
1228 
1234  KuduTableCreator& split_rows(const std::vector<const KuduPartialRow*>& split_rows)
1235  ATTRIBUTE_DEPRECATED("use add_range_partition_split() instead");
1236 
1246  KuduTableCreator& num_replicas(int n_replicas);
1247 
1259  KuduTableCreator& dimension_label(const std::string& dimension_label);
1260 
1268  KuduTableCreator& extra_configs(const std::map<std::string, std::string>& extra_configs);
1269 
1280 
1288  KuduTableCreator& wait(bool wait);
1289 
1304 
1305  private:
1306  class KUDU_NO_EXPORT Data;
1307 
1308  friend class KuduClient;
1309  friend class transactions::TxnSystemClient;
1310 
1311  explicit KuduTableCreator(KuduClient* client);
1312 
1313  // Owned.
1314  Data* data_;
1315 
1316  DISALLOW_COPY_AND_ASSIGN(KuduTableCreator);
1317 };
1318 
1320 class KUDU_EXPORT KuduTableStatistics {
1321  public:
1324 
1329  int64_t on_disk_size() const;
1330 
1335  int64_t live_row_count() const;
1336 
1343  int64_t on_disk_size_limit() const;
1344 
1351  int64_t live_row_count_limit() const;
1352 
1356  std::string ToString() const;
1357 
1358  private:
1359  class KUDU_NO_EXPORT Data;
1360 
1361  friend class KuduClient;
1362 
1363  // Owned.
1364  Data* data_;
1365 
1366  DISALLOW_COPY_AND_ASSIGN(KuduTableStatistics);
1367 };
1368 
1389 class KUDU_EXPORT KuduTable : public sp::enable_shared_from_this<KuduTable> {
1390  public:
1391  ~KuduTable();
1392 
1394  const std::string& name() const;
1395 
1403  const std::string& id() const;
1404 
1406  const KuduSchema& schema() const;
1407 
1409  const std::string& comment() const;
1410 
1412  int num_replicas() const;
1413 
1415  const std::string& owner() const;
1416 
1421 
1426 
1431 
1436 
1441 
1446 
1451 
1477  KuduValue* value);
1478 
1511  std::vector<KuduBloomFilter*>* bloom_filters);
1512 
1517 
1554  const std::vector<Slice>& bloom_filters);
1556 
1581  std::vector<KuduValue*>* values);
1582 
1594 
1606 
1609  KuduClient* client() const;
1610 
1612  const PartitionSchema& partition_schema() const;
1613 
1615  const std::map<std::string, std::string>& extra_configs() const;
1616 
1618 
1628  Status ListPartitions(std::vector<Partition>* partitions) KUDU_NO_EXPORT;
1629 
1631 
1632  private:
1633  class KUDU_NO_EXPORT Data;
1634 
1635  friend class KuduClient;
1636  friend class KuduPartitioner;
1637  friend class KuduScanToken;
1638 
1639  KuduTable(const sp::shared_ptr<KuduClient>& client,
1640  const std::string& name,
1641  const std::string& id,
1642  int num_replicas,
1643  const std::string& owner,
1644  const std::string& comment,
1645  const KuduSchema& schema,
1646  const PartitionSchema& partition_schema,
1647  const std::map<std::string, std::string>& extra_configs);
1648 
1649  // Owned.
1650  Data* data_;
1651 
1652  DISALLOW_COPY_AND_ASSIGN(KuduTable);
1653 };
1654 
1666 class KUDU_EXPORT KuduTableAlterer {
1667  public:
1668  ~KuduTableAlterer();
1669 
1675  KuduTableAlterer* RenameTo(const std::string& new_name);
1676 
1682  KuduTableAlterer* SetOwner(const std::string& new_owner);
1683 
1689  KuduTableAlterer* SetComment(const std::string& new_comment);
1690 
1700  KuduColumnSpec* AddColumn(const std::string& name);
1701 
1710  KuduColumnSpec* AlterColumn(const std::string& name);
1711 
1719  KuduTableAlterer* DropColumn(const std::string& name);
1720 
1753  KuduPartialRow* lower_bound,
1754  KuduPartialRow* upper_bound,
1757 
1793  KuduPartialRow* lower_bound,
1794  KuduPartialRow* upper_bound,
1795  const std::string& dimension_label,
1798 
1827  KuduPartialRow* lower_bound,
1828  KuduPartialRow* upper_bound,
1831 
1841  KuduTableAlterer* AlterExtraConfig(const std::map<std::string, std::string>& extra_configs);
1842 
1855  KuduTableAlterer* SetTableDiskSizeLimit(int64_t disk_size_limit);
1856 
1869  KuduTableAlterer* SetTableRowCountLimit(int64_t row_count_limit);
1870 
1881 
1893  KuduTableAlterer* wait(bool wait);
1894 
1896 
1905  KuduTableAlterer* modify_external_catalogs(bool modify_external_catalogs) KUDU_NO_EXPORT;
1906 
1908 
1914 
1915  private:
1916  class KUDU_NO_EXPORT Data;
1917 
1918  friend class KuduClient;
1919 
1920  KuduTableAlterer(KuduClient* client,
1921  const std::string& name);
1922 
1923  // Owned.
1924  Data* data_;
1925 
1926  DISALLOW_COPY_AND_ASSIGN(KuduTableAlterer);
1927 };
1928 
1934 class KUDU_EXPORT KuduError {
1935  public:
1936  ~KuduError();
1937 
1939  const Status& status() const;
1940 
1943 
1952 
1964 
1965  private:
1966  class KUDU_NO_EXPORT Data;
1967 
1968  friend class internal::Batcher;
1969  friend class internal::ErrorCollector;
1970  friend class KuduSession;
1971 
1972  KuduError(KuduWriteOperation* failed_op, const Status& error);
1973 
1974  // Owned.
1975  Data* data_;
1976 
1977  DISALLOW_COPY_AND_ASSIGN(KuduError);
1978 };
1979 
1980 
2039 class KUDU_EXPORT KuduSession : public sp::enable_shared_from_this<KuduSession> {
2040  public:
2041  ~KuduSession();
2042 
2044  enum FlushMode {
2050 
2078 
2091  MANUAL_FLUSH
2092  };
2093 
2102  Status SetFlushMode(FlushMode m) WARN_UNUSED_RESULT;
2103 
2125 
2140  COMMIT_WAIT
2141  };
2142 
2149  WARN_UNUSED_RESULT;
2150 
2168  Status SetMutationBufferSpace(size_t size_bytes) WARN_UNUSED_RESULT;
2169 
2194  WARN_UNUSED_RESULT;
2195 
2217  Status SetMutationBufferFlushInterval(unsigned int millis) WARN_UNUSED_RESULT;
2218 
2243  Status SetMutationBufferMaxNum(unsigned int max_num) WARN_UNUSED_RESULT;
2244 
2250  void SetTimeoutMillis(int millis);
2251 
2255 
2279  Status Apply(KuduWriteOperation* write_op) WARN_UNUSED_RESULT;
2280 
2295  Status Flush() WARN_UNUSED_RESULT;
2296 
2337  void FlushAsync(KuduStatusCallback* cb);
2338 
2341  Status Close() WARN_UNUSED_RESULT;
2342 
2351  bool HasPendingOperations() const;
2352 
2374  int CountBufferedOperations() const
2375  ATTRIBUTE_DEPRECATED("this method is experimental and will disappear "
2376  "in a future release");
2377 
2402  Status SetErrorBufferSpace(size_t size_bytes);
2403 
2413  int CountPendingErrors() const;
2414 
2425  void GetPendingErrors(std::vector<KuduError*>* errors, bool* overflowed);
2426 
2428  KuduClient* client() const;
2429 
2430  private:
2431  class KUDU_NO_EXPORT Data;
2432 
2433  friend class ClientTest;
2434  friend class KuduClient;
2435  friend class KuduTransaction;
2436  friend class internal::Batcher;
2437  friend class tablet::FuzzTest;
2438  FRIEND_TEST(ClientTest, TestAutoFlushBackgroundAndErrorCollector);
2439  FRIEND_TEST(ClientTest, TestAutoFlushBackgroundApplyBlocks);
2440  FRIEND_TEST(ClientTest, TxnIdOfTransactionalSession);
2441 
2442  explicit KuduSession(const sp::shared_ptr<KuduClient>& client);
2443  KuduSession(const sp::shared_ptr<KuduClient>& client, const TxnId& txn_id);
2444 
2445  // Owned.
2446  Data* data_;
2447 
2448  DISALLOW_COPY_AND_ASSIGN(KuduSession);
2449 };
2450 
2451 
2456 class KUDU_EXPORT KuduScanner {
2457  public:
2459  enum ReadMode {
2468 
2489 
2500  READ_YOUR_WRITES
2501  };
2502 
2506  enum OrderMode {
2513 
2518  ORDERED
2519  };
2520 
2524  enum { kScanTimeoutMillis = 30000 };
2525 
2531  explicit KuduScanner(KuduTable* table);
2532  ~KuduScanner();
2533 
2543  Status SetProjectedColumnNames(const std::vector<std::string>& col_names)
2544  WARN_UNUSED_RESULT;
2545 
2555  Status SetProjectedColumnIndexes(const std::vector<int>& col_indexes)
2556  WARN_UNUSED_RESULT;
2557 
2563  Status SetProjectedColumns(const std::vector<std::string>& col_names)
2564  WARN_UNUSED_RESULT
2565  ATTRIBUTE_DEPRECATED("use SetProjectedColumnNames() instead");
2566 
2575  Status AddConjunctPredicate(KuduPredicate* pred) WARN_UNUSED_RESULT;
2576 
2586 
2595  ATTRIBUTE_DEPRECATED("use AddLowerBound() instead");
2596 
2606 
2615  ATTRIBUTE_DEPRECATED("use AddExclusiveUpperBound() instead");
2616 
2626 
2636 
2643  Status SetCacheBlocks(bool cache_blocks);
2644 
2647 
2667 
2676  void Close();
2677 
2686  bool HasMoreRows() const;
2687 
2699  Status NextBatch(std::vector<KuduRowResult>* rows)
2700  ATTRIBUTE_DEPRECATED("use NextBatch(KuduScanBatch*) instead");
2701 
2714 
2727 
2737 
2740 
2747  Status SetBatchSizeBytes(uint32_t batch_size);
2748 
2757  WARN_UNUSED_RESULT;
2758 
2764  Status SetReadMode(ReadMode read_mode) WARN_UNUSED_RESULT;
2765 
2771  Status SetOrderMode(OrderMode order_mode) WARN_UNUSED_RESULT
2772  ATTRIBUTE_DEPRECATED("use SetFaultTolerant() instead");
2773 
2786  Status SetFaultTolerant() WARN_UNUSED_RESULT;
2787 
2793  Status SetSnapshotMicros(uint64_t snapshot_timestamp_micros) WARN_UNUSED_RESULT;
2794 
2804  Status SetSnapshotRaw(uint64_t snapshot_timestamp) WARN_UNUSED_RESULT;
2805 
2807 
2822  Status SetDiffScan(uint64_t start_timestamp, uint64_t end_timestamp)
2823  WARN_UNUSED_RESULT KUDU_NO_EXPORT;
2824 
2826 
2832  Status SetTimeoutMillis(int millis);
2833 
2835  KuduSchema GetProjectionSchema() const;
2836 
2838  sp::shared_ptr<KuduTable> GetKuduTable();
2839 
2847 
2849  static const uint64_t NO_FLAGS = 0;
2856  static const uint64_t PAD_UNIXTIME_MICROS_TO_16_BYTES = 1 << 0;
2857 
2865  static const uint64_t COLUMNAR_LAYOUT = 1 << 1;
2866 
2894  Status SetRowFormatFlags(uint64_t flags);
2896 
2902  Status SetLimit(int64_t limit) WARN_UNUSED_RESULT;
2903 
2909  std::string ToString() const;
2910 
2911  private:
2912  class KUDU_NO_EXPORT Data;
2913 
2914  Status NextBatch(internal::ScanBatchDataInterface* batch);
2915 
2916  friend class KuduScanToken;
2917  FRIEND_TEST(ClientTest, TestBlockScannerHijackingAttempts);
2918  FRIEND_TEST(ClientTest, TestScanCloseProxy);
2919  FRIEND_TEST(ClientTest, TestScanFaultTolerance);
2920  FRIEND_TEST(ClientTest, TestScanNoBlockCaching);
2921  FRIEND_TEST(ClientTest, TestScanTimeout);
2922  FRIEND_TEST(ClientTest, TestReadAtSnapshotNoTimestampSet);
2923  FRIEND_TEST(ConsistencyITest, TestSnapshotScanTimestampReuse);
2924  FRIEND_TEST(ScanTokenTest, TestScanTokens);
2925 
2926  // Owned.
2927  Data* data_;
2928 
2929  DISALLOW_COPY_AND_ASSIGN(KuduScanner);
2930 };
2931 
2952 class KUDU_EXPORT KuduScanToken {
2953  public:
2954 
2955  ~KuduScanToken();
2956 
2967  Status IntoKuduScanner(KuduScanner** scanner) const WARN_UNUSED_RESULT;
2968 
2970  const KuduTablet& tablet() const;
2971 
2980  Status Serialize(std::string* buf) const WARN_UNUSED_RESULT;
2981 
2994  const std::string& serialized_token,
2995  KuduScanner** scanner) WARN_UNUSED_RESULT;
2996 
2997  private:
2998  class KUDU_NO_EXPORT Data;
2999 
3000  friend class KuduScanTokenBuilder;
3001 
3002  KuduScanToken();
3003 
3004  // Owned.
3005  Data* data_;
3006 
3007  DISALLOW_COPY_AND_ASSIGN(KuduScanToken);
3008 };
3009 
3013 class KUDU_EXPORT KuduScanTokenBuilder {
3014  public:
3015 
3023 
3033  Status SetProjectedColumnNames(const std::vector<std::string>& col_names)
3034  WARN_UNUSED_RESULT;
3035 
3037  Status SetProjectedColumnIndexes(const std::vector<int>& col_indexes)
3038  WARN_UNUSED_RESULT;
3039 
3041  Status AddConjunctPredicate(KuduPredicate* pred) WARN_UNUSED_RESULT;
3042 
3044  Status AddLowerBound(const KuduPartialRow& key) WARN_UNUSED_RESULT;
3045 
3054  Status AddUpperBound(const KuduPartialRow& key) WARN_UNUSED_RESULT;
3055 
3057  Status SetCacheBlocks(bool cache_blocks) WARN_UNUSED_RESULT;
3058 
3065  Status SetBatchSizeBytes(uint32_t batch_size) WARN_UNUSED_RESULT;
3066 
3075  WARN_UNUSED_RESULT;
3076 
3078  Status SetReadMode(KuduScanner::ReadMode read_mode) WARN_UNUSED_RESULT;
3079 
3081  Status SetFaultTolerant() WARN_UNUSED_RESULT;
3082 
3084  Status SetSnapshotMicros(uint64_t snapshot_timestamp_micros)
3085  WARN_UNUSED_RESULT;
3086 
3088  Status SetSnapshotRaw(uint64_t snapshot_timestamp) WARN_UNUSED_RESULT;
3089 
3091 
3093  Status SetDiffScan(uint64_t start_timestamp, uint64_t end_timestamp)
3094  WARN_UNUSED_RESULT KUDU_NO_EXPORT;
3096 
3098  Status SetTimeoutMillis(int millis) WARN_UNUSED_RESULT;
3099 
3107  Status IncludeTableMetadata(bool include_metadata) WARN_UNUSED_RESULT;
3108 
3116  Status IncludeTabletMetadata(bool include_metadata) WARN_UNUSED_RESULT;
3117 
3126  Status Build(std::vector<KuduScanToken*>* tokens) WARN_UNUSED_RESULT;
3127 
3128  private:
3129  class KUDU_NO_EXPORT Data;
3130 
3131  // Owned.
3132  Data* data_;
3133 
3134  DISALLOW_COPY_AND_ASSIGN(KuduScanTokenBuilder);
3135 };
3136 
3138 class KUDU_EXPORT KuduPartitionerBuilder {
3139  public:
3144  explicit KuduPartitionerBuilder(sp::shared_ptr<KuduTable> table);
3146 
3153 
3172  Status Build(KuduPartitioner** partitioner);
3173  private:
3174  class KUDU_NO_EXPORT Data;
3175 
3176  // Owned.
3177  Data* data_;
3178 
3179  DISALLOW_COPY_AND_ASSIGN(KuduPartitionerBuilder);
3180 };
3181 
3192 class KUDU_EXPORT KuduPartitioner {
3193  public:
3194  ~KuduPartitioner();
3195 
3199  int NumPartitions() const;
3200 
3212  Status PartitionRow(const KuduPartialRow& row, int* partition);
3213  private:
3214  class KUDU_NO_EXPORT Data;
3215 
3216  friend class KuduPartitionerBuilder;
3217 
3218  explicit KuduPartitioner(Data* data);
3219  Data* data_; // Owned.
3220 };
3221 
3222 
3223 } // namespace client
3224 } // namespace kudu
3225 #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:228
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 & sasl_protocol_name(const std::string &sasl_protocol_name)
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:615
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:831
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:804
@ LEADER_ONLY
Select the LEADER replica.
Definition: client.h:805
Builder API for specifying or altering a column within a table schema.
Definition: schema.h:360
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:1934
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:3138
KuduPartitionerBuilder * SetBuildTimeout(MonoDelta timeout)
KuduPartitionerBuilder(sp::shared_ptr< KuduTable > table)
Status Build(KuduPartitioner **partitioner)
Definition: client.h:3192
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:1025
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:3013
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:2952
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:2456
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:2459
@ READ_AT_SNAPSHOT
Definition: client.h:2488
@ READ_LATEST
Definition: client.h:2467
OrderMode
Definition: client.h:2506
@ UNORDERED
Definition: client.h:2512
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:616
Representation of a Kudu client session.
Definition: client.h:2039
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:2105
@ CLIENT_PROPAGATED
Definition: client.h:2124
Status SetMutationBufferFlushInterval(unsigned int millis) WARN_UNUSED_RESULT
FlushMode
Modes of flush operations.
Definition: client.h:2044
@ AUTO_FLUSH_BACKGROUND
Definition: client.h:2077
@ AUTO_FLUSH_SYNC
Definition: client.h:2049
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:1666
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 * SetComment(const std::string &new_comment)
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)
KuduTableAlterer * SetTableRowCountLimit(int64_t row_count_limit)
KuduTableAlterer * SetTableDiskSizeLimit(int64_t disk_size_limit)
A helper class to create a new table with the desired options.
Definition: client.h:1084
RangePartitionBound
Range partition bound type.
Definition: client.h:1165
@ INCLUSIVE_BOUND
An inclusive bound.
Definition: client.h:1167
@ EXCLUSIVE_BOUND
An exclusive bound.
Definition: client.h:1166
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)
KuduTableCreator & set_comment(const std::string &comment)
In-memory statistics of table.
Definition: client.h:1320
A representation of a table on a particular cluster.
Definition: client.h:1389
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 & comment() const
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:984
const std::string & hostname() const
const std::string & uuid() const
In-memory representation of a remote tablet.
Definition: client.h:1054
const std::string & id() const
const std::vector< const KuduReplica * > & replicas() const
SerializationOptions & enable_keepalive(bool enable)
Definition: client.h:363
Status Commit() 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.