Skip to content

Commit bbf140c

Browse files
joroKr21Dandandan
authored andcommitted
Add pool_size method to MemoryPool (#218) (#230)
* Add pool_size method to MemoryPool * Fix * Fmt Co-authored-by: Daniël Heres <[email protected]>
1 parent 8ea4673 commit bbf140c

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
@@ -106,6 +106,9 @@ pub trait MemoryPool: Send + Sync + std::fmt::Debug {
106106

107107
/// Return the total amount of memory reserved
108108
fn reserved(&self) -> usize;
109+
110+
/// Return the configured pool size (if any)
111+
fn pool_size(&self) -> Option<usize>;
109112
}
110113

111114
/// A memory consumer is a named allocation traced by a particular
@@ -321,7 +324,9 @@ mod tests {
321324

322325
#[test]
323326
fn test_memory_pool_underflow() {
324-
let pool = Arc::new(GreedyMemoryPool::new(50)) as _;
327+
let pool: Arc<dyn MemoryPool> = Arc::new(GreedyMemoryPool::new(50)) as _;
328+
assert_eq!(pool.pool_size(), Some(50));
329+
325330
let mut a1 = MemoryConsumer::new("a1").register(&pool);
326331
assert_eq!(pool.reserved(), 0);
327332

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)