Skip to content

Commit e8f53f6

Browse files
committed
Fix reservetion panic
1 parent 6dcaf46 commit e8f53f6

1 file changed

Lines changed: 15 additions & 1 deletion

File tree

  • datafusion/physical-plan/src/joins/grace_hash_join

datafusion/physical-plan/src/joins/grace_hash_join/stream.rs

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -990,7 +990,21 @@ impl GraceHashJoinStream {
990990
};
991991
if bytes_to_free > 0 {
992992
let mut res = reservation.lock();
993-
res.shrink(bytes_to_free);
993+
let available = res.size();
994+
if bytes_to_free > available {
995+
// Don't panic on accounting drift; free what we can and log.
996+
let shrink = available;
997+
if shrink > 0 {
998+
res.shrink(shrink);
999+
}
1000+
debug!(
1001+
"Grace hash join reservation underflow: attempted to free {}, but reservation size is {}",
1002+
human_readable_size(bytes_to_free),
1003+
human_readable_size(available)
1004+
);
1005+
} else {
1006+
res.shrink(bytes_to_free);
1007+
}
9941008
}
9951009
*left_fut = None;
9961010
*right_fut = None;

0 commit comments

Comments
 (0)