Struct tikv::storage::txn::latch::Latch [−][src]
Latch which is used to serialize accesses to resources hashed to the same slot.
Latches are indexed by slot IDs. The keys of a command are hashed into unsigned numbers, then the command is added to the waiting queues of the latches.
If command A is ahead of command B in one latch, it must be ahead of command B in all the
overlapping latches. This is an invariant ensured by the gen_lock
, acquire
and release
.
Fields
waiting: VecDeque<Option<(u64, u64)>>
Implementations
impl Latch
[src][−]
pub fn new() -> Latch
[src][−]
Creates a latch with an empty waiting queue.
pub fn get_first_req_by_hash(&self, hash: u64) -> Option<u64>
[src][−]
Find the first command ID in the queue whose hash value is equal to hash.
pub fn pop_front(&mut self, key_hash: u64) -> Option<(u64, u64)>
[src][−]
Remove the first command ID in the queue whose hash value is equal to hash_key. If the element which would be removed does not appear at the front of the queue, it will leave a hole in the queue. So we must remove consecutive hole when remove the head of the queue to make the queue not too long.
pub fn wait_for_wake(&mut self, key_hash: u64, cid: u64)
[src]
fn maybe_shrink(&mut self)
[src][−]
For some hot keys, the waiting list maybe very long, so we should shrink the waiting VecDeque after pop.
Trait Implementations
Auto Trait Implementations
impl RefUnwindSafe for Latch
impl Send for Latch
impl Sync for Latch
impl Unpin for Latch
impl UnwindSafe for Latch
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src][+]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src][+]
T: ?Sized,
impl<V, W> ConvertFrom<W> for V where
W: ConvertTo<V>,
[src][+]
W: ConvertTo<V>,
impl<T> From<T> for T
[src][+]
impl<T> Instrument for T
[src][+]
impl<T, U> Into<U> for T where
U: From<T>,
[src][+]
U: From<T>,
impl<T> Pointable for T
[src][+]
impl<T> Pointable for T
[src][+]
impl<T> Same<T> for T
[src]
type Output = T
Should always be Self
impl<T> Sealed<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> SendSyncUnwindSafe for T where
T: Send + Sync + UnwindSafe + ?Sized,
[src]
T: Send + Sync + UnwindSafe + ?Sized,
impl<T> ToOwned for T where
T: Clone,
[src][+]
T: Clone,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src][+]
U: Into<T>,
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src][+]
U: TryFrom<T>,
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src][+]
V: MultiLane<T>,