From 5619b79bdafab76587100df4e730dffda095608e Mon Sep 17 00:00:00 2001 From: yongman Date: Mon, 22 Aug 2022 15:06:24 +0800 Subject: [PATCH] Add timestamp support u64::MAX Signed-off-by: yongman --- src/timestamp.rs | 14 +++++++++++++- src/transaction/client.rs | 6 +++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/timestamp.rs b/src/timestamp.rs index 5bd21a28..9cbbc1f5 100644 --- a/src/timestamp.rs +++ b/src/timestamp.rs @@ -25,12 +25,24 @@ pub trait TimestampExt: Sized { impl TimestampExt for Timestamp { fn version(&self) -> u64 { + if self.physical == i64::MAX && self.logical == i64::MAX { + return u64::MAX; + } + ((self.physical << PHYSICAL_SHIFT_BITS) + self.logical) .try_into() .expect("Overflow converting timestamp to version") } fn from_version(version: u64) -> Self { + if version == u64::MAX { + return Self { + physical: i64::MAX, + logical: i64::MAX, + suffix_bits: 0, + }; + } + let version = version as i64; Self { physical: version >> PHYSICAL_SHIFT_BITS, @@ -41,7 +53,7 @@ impl TimestampExt for Timestamp { } fn try_from_version(version: u64) -> Option { - if version == 0 { + if version == 0 || (version >= i64::MAX as u64 && version != u64::MAX) { None } else { Some(Self::from_version(version)) diff --git a/src/transaction/client.rs b/src/transaction/client.rs index 69f11bce..500a38d8 100644 --- a/src/transaction/client.rs +++ b/src/transaction/client.rs @@ -276,7 +276,11 @@ impl Client { Ok(res) } - fn new_transaction(&self, timestamp: Timestamp, options: TransactionOptions) -> Transaction { + pub fn new_transaction( + &self, + timestamp: Timestamp, + options: TransactionOptions, + ) -> Transaction { let logger = self.logger.new(o!("child" => 1)); Transaction::new(timestamp, self.pd.clone(), options, logger) }