Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
[workspace]
members = [
"crates/allocdb-retire-queue",
"crates/allocdb-bench",
"crates/allocdb-core",
"crates/allocdb-node",
Expand Down
1 change: 1 addition & 0 deletions crates/allocdb-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ edition.workspace = true
rust-version.workspace = true

[dependencies]
allocdb-retire-queue = { path = "../allocdb-retire-queue" }
crc32c = "0.6.8"
log = "0.4.28"

Expand Down
1 change: 0 additions & 1 deletion crates/allocdb-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ mod fixed_map;
pub mod ids;
pub mod recovery;
pub mod result;
mod retire_queue;
pub mod snapshot;
pub mod snapshot_file;
pub mod state_machine;
Expand Down
6 changes: 3 additions & 3 deletions crates/allocdb-core/src/state_machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use crate::config::{Config, ConfigError};
use crate::fixed_map::{FixedMap, FixedMapError};
use crate::ids::{HolderId, Lsn, OperationId, ReservationId, ResourceId, Slot};
use crate::result::{CommandOutcome, ResultCode};
use crate::retire_queue::{RetireEntry, RetireQueue, RetireQueueError};
use allocdb_retire_queue::{RetireEntry, RetireQueue, RetireQueueError};

#[path = "state_machine_apply.rs"]
mod apply;
Expand Down Expand Up @@ -140,8 +140,8 @@ pub struct AllocDb {
pub(crate) reservation_members: FixedMap<ReservationMemberKey, ReservationMemberRecord>,
pub(crate) operations: FixedMap<OperationId, OperationRecord>,
pub(crate) max_retired_reservation_id: Option<ReservationId>,
pub(crate) reservation_retire_queue: RetireQueue<ReservationId>,
pub(crate) operation_retire_queue: RetireQueue<OperationId>,
pub(crate) reservation_retire_queue: RetireQueue<ReservationId, Slot>,
pub(crate) operation_retire_queue: RetireQueue<OperationId, Slot>,
pub(crate) wheel: Vec<Vec<ReservationId>>,
pub(crate) last_applied_lsn: Option<Lsn>,
pub(crate) last_request_slot: Option<Slot>,
Expand Down
8 changes: 8 additions & 0 deletions crates/allocdb-retire-queue/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[package]
name = "allocdb-retire-queue"
version.workspace = true
edition.workspace = true
rust-version.workspace = true

[lints]
workspace = true
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
use crate::ids::Slot;
#![allow(clippy::missing_panics_doc)]

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) struct RetireEntry<K> {
pub struct RetireEntry<K, S> {
pub key: K,
pub retire_after_slot: Slot,
pub retire_after_slot: S,
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub(crate) enum RetireQueueError {
pub enum RetireQueueError {
Full,
}

#[derive(Debug)]
pub(crate) struct RetireQueue<K> {
entries: Vec<Option<RetireEntry<K>>>,
pub struct RetireQueue<K, S> {
entries: Vec<Option<RetireEntry<K, S>>>,
head: usize,
len: usize,
}

impl<K: Copy> RetireQueue<K> {
impl<K: Copy, S: Copy> RetireQueue<K, S> {
#[must_use]
pub(crate) fn with_capacity(capacity: usize) -> Self {
pub fn with_capacity(capacity: usize) -> Self {
let mut entries = Vec::with_capacity(capacity.max(1));
entries.resize_with(capacity.max(1), || None);
Self {
Expand All @@ -30,7 +30,10 @@ impl<K: Copy> RetireQueue<K> {
}
}

pub(crate) fn push(&mut self, entry: RetireEntry<K>) -> Result<(), RetireQueueError> {
/// # Errors
///
/// Returns [`RetireQueueError::Full`] when the queue has no free slot for another entry.
pub fn push(&mut self, entry: RetireEntry<K, S>) -> Result<(), RetireQueueError> {
if self.len == self.entries.len() {
return Err(RetireQueueError::Full);
}
Expand All @@ -41,15 +44,16 @@ impl<K: Copy> RetireQueue<K> {
Ok(())
}

pub(crate) fn front(&self) -> Option<RetireEntry<K>> {
#[must_use]
pub fn front(&self) -> Option<RetireEntry<K, S>> {
if self.len == 0 {
None
} else {
self.entries[self.head]
}
}

pub(crate) fn pop_front(&mut self) -> Option<RetireEntry<K>> {
pub fn pop_front(&mut self) -> Option<RetireEntry<K, S>> {
if self.len == 0 {
return None;
}
Expand All @@ -63,8 +67,6 @@ impl<K: Copy> RetireQueue<K> {

#[cfg(test)]
mod tests {
use crate::ids::Slot;

use super::{RetireEntry, RetireQueue, RetireQueueError};

#[test]
Expand All @@ -73,22 +75,22 @@ mod tests {
queue
.push(RetireEntry {
key: 1_u64,
retire_after_slot: Slot(7),
retire_after_slot: 7_u64,
})
.unwrap();

assert_eq!(
queue.front(),
Some(RetireEntry {
key: 1,
retire_after_slot: Slot(7)
retire_after_slot: 7,
})
);
assert_eq!(
queue.pop_front(),
Some(RetireEntry {
key: 1,
retire_after_slot: Slot(7)
retire_after_slot: 7,
})
);
assert_eq!(queue.pop_front(), None);
Expand All @@ -100,19 +102,19 @@ mod tests {
queue
.push(RetireEntry {
key: 1_u64,
retire_after_slot: Slot(1),
retire_after_slot: 1_u64,
})
.unwrap();
queue
.push(RetireEntry {
key: 2_u64,
retire_after_slot: Slot(2),
retire_after_slot: 2_u64,
})
.unwrap();
assert_eq!(
queue.push(RetireEntry {
key: 3_u64,
retire_after_slot: Slot(3),
retire_after_slot: 3_u64,
}),
Err(RetireQueueError::Full)
);
Expand All @@ -121,7 +123,7 @@ mod tests {
queue
.push(RetireEntry {
key: 3_u64,
retire_after_slot: Slot(3),
retire_after_slot: 3_u64,
})
.unwrap();

Expand Down
1 change: 1 addition & 0 deletions crates/quota-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ edition.workspace = true
rust-version.workspace = true

[dependencies]
allocdb-retire-queue = { path = "../allocdb-retire-queue" }
crc32c = "0.6.8"
log = "0.4.28"

Expand Down
1 change: 0 additions & 1 deletion crates/quota-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ mod fixed_map;
pub mod ids;
pub mod recovery;
pub mod result;
mod retire_queue;
pub mod snapshot;
pub mod snapshot_file;
pub mod state_machine;
Expand Down
131 changes: 0 additions & 131 deletions crates/quota-core/src/retire_queue.rs

This file was deleted.

4 changes: 2 additions & 2 deletions crates/quota-core/src/state_machine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ use crate::config::{Config, ConfigError};
use crate::fixed_map::{FixedMap, FixedMapError};
use crate::ids::{BucketId, Lsn, OperationId, Slot};
use crate::result::{CommandOutcome, ResultCode};
use crate::retire_queue::{RetireEntry, RetireQueue, RetireQueueError};
use allocdb_retire_queue::{RetireEntry, RetireQueue, RetireQueueError};

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub struct BucketRecord {
Expand Down Expand Up @@ -52,7 +52,7 @@ pub struct QuotaDb {
pub(crate) config: Config,
pub(crate) buckets: FixedMap<BucketId, BucketRecord>,
pub(crate) operations: FixedMap<OperationId, OperationRecord>,
pub(crate) operation_retire_queue: RetireQueue<OperationId>,
pub(crate) operation_retire_queue: RetireQueue<OperationId, Slot>,
pub(crate) last_applied_lsn: Option<Lsn>,
pub(crate) last_request_slot: Option<Slot>,
}
Expand Down
1 change: 1 addition & 0 deletions crates/reservation-core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ edition.workspace = true
rust-version.workspace = true

[dependencies]
allocdb-retire-queue = { path = "../allocdb-retire-queue" }
crc32c = "0.6.8"
log = "0.4.28"

Expand Down
Loading