Skip to content

Commit cb3341f

Browse files
committed
Add pool_size method to MemoryPool (#218)
* Add pool_size method to MemoryPool * Fix * Fmt
1 parent 98fbec6 commit cb3341f

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

datafusion/execution/src/memory_pool/mod.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,9 @@ pub trait MemoryPool: Send + Sync + std::fmt::Debug {
7575

7676
/// Return the total amount of memory reserved
7777
fn reserved(&self) -> usize;
78+
79+
/// Return the configured pool size (if any)
80+
fn pool_size(&self) -> Option<usize>;
7881
}
7982

8083
/// A memory consumer that can be tracked by [`MemoryReservation`] in
@@ -286,7 +289,9 @@ mod tests {
286289

287290
#[test]
288291
fn test_memory_pool_underflow() {
289-
let pool = Arc::new(GreedyMemoryPool::new(50)) as _;
292+
let pool: Arc<dyn MemoryPool> = Arc::new(GreedyMemoryPool::new(50)) as _;
293+
assert_eq!(pool.pool_size(), Some(50));
294+
290295
let mut a1 = MemoryConsumer::new("a1").register(&pool);
291296
assert_eq!(pool.reserved(), 0);
292297

datafusion/execution/src/memory_pool/pool.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ impl MemoryPool for UnboundedMemoryPool {
4444
fn reserved(&self) -> usize {
4545
self.used.load(Ordering::Relaxed)
4646
}
47+
48+
fn pool_size(&self) -> Option<usize> {
49+
None
50+
}
4751
}
4852

4953
/// A [`MemoryPool`] that implements a greedy first-come first-serve limit.
@@ -96,6 +100,10 @@ impl MemoryPool for GreedyMemoryPool {
96100
fn reserved(&self) -> usize {
97101
self.used.load(Ordering::Relaxed)
98102
}
103+
104+
fn pool_size(&self) -> Option<usize> {
105+
Some(self.pool_size)
106+
}
99107
}
100108

101109
/// A [`MemoryPool`] that prevents spillable reservations from using more than
@@ -229,6 +237,10 @@ impl MemoryPool for FairSpillPool {
229237
let state = self.state.lock();
230238
state.spillable + state.unspillable
231239
}
240+
241+
fn pool_size(&self) -> Option<usize> {
242+
Some(self.pool_size)
243+
}
232244
}
233245

234246
fn insufficient_capacity_err(
@@ -246,7 +258,8 @@ mod tests {
246258

247259
#[test]
248260
fn test_fair() {
249-
let pool = Arc::new(FairSpillPool::new(100)) as _;
261+
let pool: Arc<dyn MemoryPool> = Arc::new(FairSpillPool::new(100)) as _;
262+
assert_eq!(pool.pool_size(), Some(100));
250263

251264
let mut r1 = MemoryConsumer::new("unspillable").register(&pool);
252265
// Can grow beyond capacity of pool

0 commit comments

Comments
 (0)