Skip to content

Commit

Permalink
IGNITE-21637 Fix integer overflow in page eviction trackers (#11261)
Browse files Browse the repository at this point in the history
  • Loading branch information
shishkovilja committed Mar 7, 2024
1 parent 062d293 commit e35f91f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -69,9 +69,9 @@ public Random2LruPageEvictionTracker(

/** {@inheritDoc} */
@Override public void start() throws IgniteException {
trackingArrPtr = GridUnsafe.allocateMemory(trackingSize * 8l);
trackingArrPtr = GridUnsafe.allocateMemory(trackingSize * 8L);

GridUnsafe.zeroMemory(trackingArrPtr, trackingSize * 8l);
GridUnsafe.zeroMemory(trackingArrPtr, trackingSize * 8L);
}

/** {@inheritDoc} */
Expand All @@ -92,15 +92,15 @@ public Random2LruPageEvictionTracker(
do {
int trackingIdx = trackingIdx(pageIdx);

int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8);
int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8L);

int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8 + 4);
int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8L + 4);

if (firstTs <= secondTs)
success = GridUnsafe.compareAndSwapInt(null, trackingArrPtr + trackingIdx * 8, firstTs, (int)latestTs);
success = GridUnsafe.compareAndSwapInt(null, trackingArrPtr + trackingIdx * 8L, firstTs, (int)latestTs);
else {
success = GridUnsafe.compareAndSwapInt(
null, trackingArrPtr + trackingIdx * 8 + 4, secondTs, (int)latestTs);
null, trackingArrPtr + trackingIdx * 8L + 4, secondTs, (int)latestTs);
}
} while (!success);
}
Expand All @@ -123,9 +123,9 @@ public Random2LruPageEvictionTracker(
while (dataPagesCnt < SAMPLE_SIZE) {
int trackingIdx = rnd.nextInt(trackingSize);

int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8);
int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8L);

int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8 + 4);
int secondTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8L + 4);

int minTs = Math.min(firstTs, secondTs);

Expand Down Expand Up @@ -164,7 +164,7 @@ public Random2LruPageEvictionTracker(
@Override protected boolean checkTouch(long pageId) {
int trackingIdx = trackingIdx(PageIdUtils.pageIndex(pageId));

int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8);
int firstTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 8L);

return firstTs != 0;
}
Expand All @@ -175,6 +175,6 @@ public Random2LruPageEvictionTracker(

int trackingIdx = trackingIdx(pageIdx);

GridUnsafe.putLongVolatile(null, trackingArrPtr + trackingIdx * 8, 0L);
GridUnsafe.putLongVolatile(null, trackingArrPtr + trackingIdx * 8L, 0L);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@ public RandomLruPageEvictionTracker(

/** {@inheritDoc} */
@Override public void start() throws IgniteException {
trackingArrPtr = GridUnsafe.allocateMemory(trackingSize * 4l);
trackingArrPtr = GridUnsafe.allocateMemory(trackingSize * 4L);

GridUnsafe.zeroMemory(trackingArrPtr, trackingSize * 4l);
GridUnsafe.zeroMemory(trackingArrPtr, trackingSize * 4L);
}

/** {@inheritDoc} */
Expand All @@ -89,7 +89,7 @@ public RandomLruPageEvictionTracker(

assert res >= 0 && res < Integer.MAX_VALUE;

GridUnsafe.putIntVolatile(null, trackingArrPtr + trackingIdx(pageIdx) * 4, (int)res);
GridUnsafe.putIntVolatile(null, trackingArrPtr + trackingIdx(pageIdx) * 4L, (int)res);
}

/** {@inheritDoc} */
Expand All @@ -110,7 +110,7 @@ public RandomLruPageEvictionTracker(
while (dataPagesCnt < SAMPLE_SIZE) {
int sampleTrackingIdx = rnd.nextInt(trackingSize);

int compactTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + sampleTrackingIdx * 4);
int compactTs = GridUnsafe.getIntVolatile(null, trackingArrPtr + sampleTrackingIdx * 4L);

if (compactTs != 0) {
// We chose data page with at least one touch.
Expand Down Expand Up @@ -145,7 +145,7 @@ public RandomLruPageEvictionTracker(
@Override protected boolean checkTouch(long pageId) {
int trackingIdx = trackingIdx(PageIdUtils.pageIndex(pageId));

int ts = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 4);
int ts = GridUnsafe.getIntVolatile(null, trackingArrPtr + trackingIdx * 4L);

return ts != 0;
}
Expand All @@ -154,6 +154,6 @@ public RandomLruPageEvictionTracker(
@Override public void forgetPage(long pageId) {
int pageIdx = PageIdUtils.pageIndex(pageId);

GridUnsafe.putIntVolatile(null, trackingArrPtr + trackingIdx(pageIdx) * 4, 0);
GridUnsafe.putIntVolatile(null, trackingArrPtr + trackingIdx(pageIdx) * 4L, 0);
}
}

0 comments on commit e35f91f

Please sign in to comment.