You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by to...@apache.org on 2016/10/05 17:07:24 UTC

[3/4] kudu git commit: [c++ client] notes for timestamp-related methods

[c++ client] notes for timestamp-related methods

Added notes on anticipated changes on methods related to getting
and setting hybrid timestamps while performing READ_AT_SNAPSHOT
scan operations:
  * KuduClient::GetLatestObservedTimestamp()
  * KuduClient::SetLatestObservedTimestamp()
  * KuduScanner::SetSnapshotRaw()

Some changes are anticipated there in the context of KUDU-611.
In short, the timestamp might be replaced with some opaque type
(e.g., a sequence of bytes).

Also, added code sample to provide an idea how to use value returned
by KuduClient::GetLatestObservedTimestamp() to set appropriate snapshot
timestamp via KuduScanner::SetSnapshotRaw().

This addresses the following JIRA issues:
  KUDU-1661 Mark KuduClient::GetLatestObservedTimestamp()
      as experimental
  KUDU-1663 Clean-up in-code documentation for KuduScanner::ReadMode
      and KuduClient::GetLatestObservedTimestamp

Change-Id: I6c45b797fa459ac9d214bb2612fd797f7a1eea45
Reviewed-on: http://gerrit.cloudera.org:8080/4569
Tested-by: Kudu Jenkins
Reviewed-by: David Ribeiro Alves <dr...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/kudu/repo
Commit: http://git-wip-us.apache.org/repos/asf/kudu/commit/b70d3625
Tree: http://git-wip-us.apache.org/repos/asf/kudu/tree/b70d3625
Diff: http://git-wip-us.apache.org/repos/asf/kudu/diff/b70d3625

Branch: refs/heads/master
Commit: b70d3625b88ef4ad5d15ef68865e933a73c9069c
Parents: 2528edf
Author: Alexey Serbin <as...@cloudera.com>
Authored: Thu Sep 29 17:37:39 2016 -0700
Committer: David Ribeiro Alves <dr...@apache.org>
Committed: Wed Oct 5 07:06:11 2016 +0000

----------------------------------------------------------------------
 src/kudu/client/client.h | 44 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 43 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/kudu/blob/b70d3625/src/kudu/client/client.h
----------------------------------------------------------------------
diff --git a/src/kudu/client/client.h b/src/kudu/client/client.h
index 74b84a5..1a113e8 100644
--- a/src/kudu/client/client.h
+++ b/src/kudu/client/client.h
@@ -387,6 +387,38 @@ class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> {
   /// 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():
+  /// @code
+  ///   shared_ptr<KuduClient> client;
+  ///   ... // open/initialize the client
+  ///   shared_ptr<KuduSession> session(client->NewSession());
+  ///   ... // set Kudu session properties
+  ///   shared_ptr<KuduTable> table;
+  ///   ... // open the table
+  ///   unique_ptr<KuduInsert> insert_op(table->NewInsert());
+  ///   ... // populate new insert operation with data
+  ///   RETURN_NOT_OK(session->Apply(insert_op.release()));
+  ///   RETURN_NOT_OK(session->Flush());
+  ///   uint64_t snapshot_timestamp = client->GetLatestObservedTimestamp() + 1;
+  ///   KuduScanner scanner(table.get());
+  ///   RETURN_NOT_OK(scanner.SetSnapshotRaw(snapshot_timestamp));
+  ///   RETURN_NOT_OK(scanner.SetSelection(KuduClient::LEADER_ONLY));
+  ///   RETURN_NOT_OK(scanner.SetReadMode(KuduScanner::READ_AT_SNAPSHOT));
+  ///   RETURN_NOT_OK(scanner.Open());
+  ///   ... // retrieve scanned rows
+  /// @endcode
+  /// 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
+  /// <a href="https://issues.apache.org/jira/browse/KUDU-430">KUDU-430</a>
+  ///
+  /// @note This method is experimental and will either disappear or
+  ///   change in a future release.
+  ///
   /// @return Highest HybridTime timestamp observed by the client.
   uint64_t GetLatestObservedTimestamp() const;
 
@@ -399,6 +431,9 @@ class KUDU_EXPORT KuduClient : public sp::enable_shared_from_this<KuduClient> {
   /// The HybridTime encoded timestamp should be obtained from another client's
   /// KuduClient::GetLatestObservedTimestamp() method.
   ///
+  /// @note This method is experimental and will either disappear or
+  ///   change in a future release.
+  ///
   /// @param [in] ht_timestamp
   ///   Timestamp encoded in HybridTime format.
   void SetLatestObservedTimestamp(uint64_t ht_timestamp);
@@ -1517,7 +1552,8 @@ class KUDU_EXPORT KuduScanner {
     /// timestamp will yield the same data. This is performed at the expense
     /// of waiting for in-flight transactions whose timestamp is lower than
     /// the snapshot's timestamp to complete, so it might incur
-    /// a latency penalty.
+    /// a latency penalty. See KuduScanner::SetSnapshotMicros() and
+    /// KuduScanner::SetSnapshotRaw() for details.
     ///
     /// In ACID terms this, by itself, corresponds to Isolation mode "Repeatable
     /// Read". If all writes to the scanned tablet are made externally
@@ -1806,6 +1842,12 @@ class KUDU_EXPORT KuduScanner {
 
   /// Set snapshot timestamp for scans in @c READ_AT_SNAPSHOT mode (raw).
   ///
+  /// See KuduClient::GetLatestObservedTimestamp() for details on how to
+  /// use this method to achieve Read-Your-Writes behavior.
+  ///
+  /// @note This method is experimental and will either disappear or
+  ///   change in a future release.
+  ///
   /// @param [in] snapshot_timestamp
   ///   Timestamp to set in raw encoded form
   ///   (i.e. as returned by a previous call to a server).