Skip to content

Commit

Permalink
[CORE] Minor: OverTarget is required only with sufficient memory and …
Browse files Browse the repository at this point in the history
…doesn't spill due to zero used bytes post-borrow (apache#8247)

* fix overacquire spill

* fix format
  • Loading branch information
kecookier authored Dec 17, 2024
1 parent 82b48b3 commit f63c29a
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 19 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,7 @@ private static ReservationListener create0(
tmm, name, Spillers.withMinSpillSize(spiller, reservationBlockSize), mutableStats);
final MemoryTarget overConsumer =
MemoryTargets.newConsumer(
tmm,
consumer.name() + ".OverAcquire",
new Spiller() {
@Override
public long spill(MemoryTarget self, Phase phase, long size) {
if (!Spillers.PHASE_SET_ALL.contains(phase)) {
return 0L;
}
return self.repay(size);
}
},
Collections.emptyMap());
tmm, consumer.name() + ".OverAcquire", Spillers.NOOP, Collections.emptyMap());
final MemoryTarget target =
MemoryTargets.throwOnOom(
MemoryTargets.overAcquire(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,13 +57,15 @@ public long borrow(long size) {
}
Preconditions.checkState(overTarget.usedBytes() == 0);
long granted = target.borrow(size);
long majorSize = target.usedBytes();
long overSize = (long) (ratio * majorSize);
long overAcquired = overTarget.borrow(overSize);
Preconditions.checkState(overAcquired == overTarget.usedBytes());
long releasedOverSize = overTarget.repay(overAcquired);
Preconditions.checkState(releasedOverSize == overAcquired);
Preconditions.checkState(overTarget.usedBytes() == 0);
if (granted >= size) {
long majorSize = target.usedBytes();
long overSize = (long) (ratio * majorSize);
long overAcquired = overTarget.borrow(overSize);
Preconditions.checkState(overAcquired == overTarget.usedBytes());
long releasedOverSize = overTarget.repay(overAcquired);
Preconditions.checkState(releasedOverSize == overAcquired);
Preconditions.checkState(overTarget.usedBytes() == 0);
}
return granted;
}

Expand Down

0 comments on commit f63c29a

Please sign in to comment.