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,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<V, W> ConvertFrom<W> for V where
W: ConvertTo<V>,
[src]
W: ConvertTo<V>,
pub fn convert_from(ctx: &mut EvalContext, from: W) -> Result<V, Error>
[src]
impl<T> From<T> for T
[src]
impl<T> Instrument for T
[src]
pub fn instrument(self, span: Span) -> Instrumented<Self>
[src]
pub fn in_current_span(self) -> Instrumented<Self>
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> Pointable for T
[src]
pub const ALIGN: usize
[src]
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
[src]
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
[src]
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
[src]
pub unsafe fn drop(ptr: usize)
[src]
impl<T> Pointable for T
[src]
pub const ALIGN: usize
[src]
type Init = T
The type for initializers.
pub unsafe fn init(init: <T as Pointable>::Init) -> usize
[src]
pub unsafe fn deref<'a>(ptr: usize) -> &'a T
[src]
pub unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T
[src]
pub unsafe fn drop(ptr: usize)
[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,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
[src]
V: MultiLane<T>,