Skip to content

Commit d0cd674

Browse files
authored
refactor: extract shared retire queue crate
1 parent d65af3f commit d0cd674

File tree

16 files changed

+50
-294
lines changed

16 files changed

+50
-294
lines changed

Cargo.lock

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
[workspace]
22
members = [
3+
"crates/allocdb-retire-queue",
34
"crates/allocdb-bench",
45
"crates/allocdb-core",
56
"crates/allocdb-node",

crates/allocdb-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ edition.workspace = true
55
rust-version.workspace = true
66

77
[dependencies]
8+
allocdb-retire-queue = { path = "../allocdb-retire-queue" }
89
crc32c = "0.6.8"
910
log = "0.4.28"
1011

crates/allocdb-core/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ mod fixed_map;
55
pub mod ids;
66
pub mod recovery;
77
pub mod result;
8-
mod retire_queue;
98
pub mod snapshot;
109
pub mod snapshot_file;
1110
pub mod state_machine;

crates/allocdb-core/src/state_machine.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::config::{Config, ConfigError};
33
use crate::fixed_map::{FixedMap, FixedMapError};
44
use crate::ids::{HolderId, Lsn, OperationId, ReservationId, ResourceId, Slot};
55
use crate::result::{CommandOutcome, ResultCode};
6-
use crate::retire_queue::{RetireEntry, RetireQueue, RetireQueueError};
6+
use allocdb_retire_queue::{RetireEntry, RetireQueue, RetireQueueError};
77

88
#[path = "state_machine_apply.rs"]
99
mod apply;
@@ -140,8 +140,8 @@ pub struct AllocDb {
140140
pub(crate) reservation_members: FixedMap<ReservationMemberKey, ReservationMemberRecord>,
141141
pub(crate) operations: FixedMap<OperationId, OperationRecord>,
142142
pub(crate) max_retired_reservation_id: Option<ReservationId>,
143-
pub(crate) reservation_retire_queue: RetireQueue<ReservationId>,
144-
pub(crate) operation_retire_queue: RetireQueue<OperationId>,
143+
pub(crate) reservation_retire_queue: RetireQueue<ReservationId, Slot>,
144+
pub(crate) operation_retire_queue: RetireQueue<OperationId, Slot>,
145145
pub(crate) wheel: Vec<Vec<ReservationId>>,
146146
pub(crate) last_applied_lsn: Option<Lsn>,
147147
pub(crate) last_request_slot: Option<Slot>,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
[package]
2+
name = "allocdb-retire-queue"
3+
version.workspace = true
4+
edition.workspace = true
5+
rust-version.workspace = true
6+
7+
[lints]
8+
workspace = true
Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
use crate::ids::Slot;
1+
#![allow(clippy::missing_panics_doc)]
22

33
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
4-
pub(crate) struct RetireEntry<K> {
4+
pub struct RetireEntry<K, S> {
55
pub key: K,
6-
pub retire_after_slot: Slot,
6+
pub retire_after_slot: S,
77
}
88

99
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
10-
pub(crate) enum RetireQueueError {
10+
pub enum RetireQueueError {
1111
Full,
1212
}
1313

1414
#[derive(Debug)]
15-
pub(crate) struct RetireQueue<K> {
16-
entries: Vec<Option<RetireEntry<K>>>,
15+
pub struct RetireQueue<K, S> {
16+
entries: Vec<Option<RetireEntry<K, S>>>,
1717
head: usize,
1818
len: usize,
1919
}
2020

21-
impl<K: Copy> RetireQueue<K> {
21+
impl<K: Copy, S: Copy> RetireQueue<K, S> {
2222
#[must_use]
23-
pub(crate) fn with_capacity(capacity: usize) -> Self {
23+
pub fn with_capacity(capacity: usize) -> Self {
2424
let mut entries = Vec::with_capacity(capacity.max(1));
2525
entries.resize_with(capacity.max(1), || None);
2626
Self {
@@ -30,7 +30,10 @@ impl<K: Copy> RetireQueue<K> {
3030
}
3131
}
3232

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

44-
pub(crate) fn front(&self) -> Option<RetireEntry<K>> {
47+
#[must_use]
48+
pub fn front(&self) -> Option<RetireEntry<K, S>> {
4549
if self.len == 0 {
4650
None
4751
} else {
4852
self.entries[self.head]
4953
}
5054
}
5155

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

6468
#[cfg(test)]
6569
mod tests {
66-
use crate::ids::Slot;
67-
6870
use super::{RetireEntry, RetireQueue, RetireQueueError};
6971

7072
#[test]
@@ -73,22 +75,22 @@ mod tests {
7375
queue
7476
.push(RetireEntry {
7577
key: 1_u64,
76-
retire_after_slot: Slot(7),
78+
retire_after_slot: 7_u64,
7779
})
7880
.unwrap();
7981

8082
assert_eq!(
8183
queue.front(),
8284
Some(RetireEntry {
8385
key: 1,
84-
retire_after_slot: Slot(7)
86+
retire_after_slot: 7,
8587
})
8688
);
8789
assert_eq!(
8890
queue.pop_front(),
8991
Some(RetireEntry {
9092
key: 1,
91-
retire_after_slot: Slot(7)
93+
retire_after_slot: 7,
9294
})
9395
);
9496
assert_eq!(queue.pop_front(), None);
@@ -100,19 +102,19 @@ mod tests {
100102
queue
101103
.push(RetireEntry {
102104
key: 1_u64,
103-
retire_after_slot: Slot(1),
105+
retire_after_slot: 1_u64,
104106
})
105107
.unwrap();
106108
queue
107109
.push(RetireEntry {
108110
key: 2_u64,
109-
retire_after_slot: Slot(2),
111+
retire_after_slot: 2_u64,
110112
})
111113
.unwrap();
112114
assert_eq!(
113115
queue.push(RetireEntry {
114116
key: 3_u64,
115-
retire_after_slot: Slot(3),
117+
retire_after_slot: 3_u64,
116118
}),
117119
Err(RetireQueueError::Full)
118120
);
@@ -121,7 +123,7 @@ mod tests {
121123
queue
122124
.push(RetireEntry {
123125
key: 3_u64,
124-
retire_after_slot: Slot(3),
126+
retire_after_slot: 3_u64,
125127
})
126128
.unwrap();
127129

crates/quota-core/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ edition.workspace = true
55
rust-version.workspace = true
66

77
[dependencies]
8+
allocdb-retire-queue = { path = "../allocdb-retire-queue" }
89
crc32c = "0.6.8"
910
log = "0.4.28"
1011

crates/quota-core/src/lib.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ mod fixed_map;
88
pub mod ids;
99
pub mod recovery;
1010
pub mod result;
11-
mod retire_queue;
1211
pub mod snapshot;
1312
pub mod snapshot_file;
1413
pub mod state_machine;

crates/quota-core/src/retire_queue.rs

Lines changed: 0 additions & 131 deletions
This file was deleted.

0 commit comments

Comments
 (0)