>From Ian Maxon <[email protected]>:
Ian Maxon has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17969 )
Change subject: [ASTERIXDB-3315][RT] Fix buffercache hit ratio calculation
......................................................................
[ASTERIXDB-3315][RT] Fix buffercache hit ratio calculation
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
Add a new signature of pin() to allow a caller to skip
counts used in metrics from being collected. This is to
stop compression from inflating the bufferCacheHitRatio
metric.
Change-Id: I568a2df4594bdde19932ba72362c9c61291b9183
---
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/IBufferCache.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/DebugBufferCache.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/compression/file/CompressedFileManager.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
M
hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/impl/TestVirtualBufferCache.java
8 files changed, 61 insertions(+), 11 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/69/17969/1
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
index 0bb9bd5..a7210bc 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/GlobalVirtualBufferCache.java
@@ -273,6 +273,11 @@
return page;
}
+ @Override
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
+ return pin(dpid, newPage);
+ }
+
private void incrementFilteredMemoryComponentUsage(long dpid, int pages) {
if (filteredMemoryComponentMaxNumPages > 0) {
// update memory usage of filtered index
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
index e77acea..959bb50 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/MultitenantVirtualBufferCache.java
@@ -70,6 +70,11 @@
}
@Override
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
+ return vbc.pin(dpid, newPage);
+ }
+
+ @Override
public void unpin(ICachedPage page) throws HyracksDataException {
vbc.unpin(page);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
index 5871b31..e222461 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/impls/VirtualBufferCache.java
@@ -260,6 +260,11 @@
return page;
}
+ @Override
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
+ return pin(dpid, newPage);
+ }
+
private int hash(long dpid) {
int hashValue = (int) dpid ^ (Integer.reverse((int) (dpid >>> 32)) >>>
1);
return hashValue % buckets.length;
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
index 70500e5..dbe8427 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
@@ -164,15 +164,19 @@
}
}
- @Override
public ICachedPage pin(long dpid, boolean newPage) throws
HyracksDataException {
+ return pin(dpid, newPage, true);
+ }
+
+ @Override
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
// Calling the pinSanityCheck should be used only for debugging, since
// the synchronized block over the fileInfoMap is a hot spot.
if (DEBUG) {
pinSanityCheck(dpid);
}
final IThreadStats threadStats =
statsSubscribers.get(Thread.currentThread());
- if (threadStats != null) {
+ if (threadStats != null && incrementStats) {
threadStats.pagePinned();
}
CachedPage cPage = findPage(dpid);
@@ -194,7 +198,7 @@
synchronized (cPage) {
if (!cPage.valid) {
try {
- tryRead(cPage);
+ tryRead(cPage, incrementStats);
cPage.valid = true;
} catch (Exception e) {
LOGGER.log(ExceptionUtils.causedByInterrupt(e) ?
Level.DEBUG : Level.WARN,
@@ -521,10 +525,10 @@
return false;
}
- private void tryRead(CachedPage cPage) throws HyracksDataException {
+ private void tryRead(CachedPage cPage, boolean incrementStats) throws
HyracksDataException {
for (int i = 1; i <= MAX_PAGE_READ_ATTEMPTS; i++) {
try {
- read(cPage);
+ read(cPage, incrementStats);
return;
} catch (HyracksDataException readException) {
if (readException.matches(ErrorCode.CANNOT_READ_CLOSED_FILE)
&& i != MAX_PAGE_READ_ATTEMPTS) {
@@ -548,12 +552,12 @@
}
}
- private void read(CachedPage cPage) throws HyracksDataException {
+ private void read(CachedPage cPage, boolean incrementStats) throws
HyracksDataException {
BufferedFileHandle fInfo = getFileHandle(cPage);
cPage.buffer.clear();
fInfo.read(cPage);
final IThreadStats threadStats =
statsSubscribers.get(Thread.currentThread());
- if (threadStats != null) {
+ if (threadStats != null && incrementStats) {
threadStats.coldRead();
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/DebugBufferCache.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/DebugBufferCache.java
index 8c3d492..c76c781 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/DebugBufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/DebugBufferCache.java
@@ -77,13 +77,18 @@
}
@Override
- public ICachedPage pin(long dpid, boolean newPage) throws
HyracksDataException {
- ICachedPage page = bufferCache.pin(dpid, newPage);
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
+ ICachedPage page = bufferCache.pin(dpid, newPage, incrementStats);
pinCount.addAndGet(1);
return page;
}
@Override
+ public ICachedPage pin(long dpid, boolean newPage) throws
HyracksDataException {
+ return pin(dpid, newPage, true);
+ }
+
+ @Override
public void unpin(ICachedPage page) throws HyracksDataException {
bufferCache.unpin(page);
unpinCount.addAndGet(1);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/IBufferCache.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/IBufferCache.java
index df0bea8..5ebc768 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/IBufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/IBufferCache.java
@@ -104,6 +104,8 @@
*/
ICachedPage pin(long dpid, boolean newPage) throws HyracksDataException;
+ ICachedPage pin(long dpid, boolean newPage, boolean incrementStats) throws
HyracksDataException;
+
/**
* Unpin a pinned page so its buffer can be recycled
*
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/compression/file/CompressedFileManager.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/compression/file/CompressedFileManager.java
index 7d0cc62..a3e43b0 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/compression/file/CompressedFileManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/compression/file/CompressedFileManager.java
@@ -311,7 +311,7 @@
final int numOfEntriesPerPage = bufferCache.getPageSize() /
ENTRY_LENGTH;
//get the last page which may contain less entries than maxNumOfEntries
final long dpid = getDiskPageId(numOfPages - 1);
- final ICachedPage page = bufferCache.pin(dpid, false);
+ final ICachedPage page = bufferCache.pin(dpid, false, false);
try {
final ByteBuffer buf = page.getBuffer();
@@ -330,7 +330,7 @@
private ICachedPage pinAndGetPage(int compressedPageId) throws
HyracksDataException {
final int pageId = compressedPageId * ENTRY_LENGTH /
bufferCache.getPageSize();
- return bufferCache.pin(getDiskPageId(pageId), false);
+ return bufferCache.pin(getDiskPageId(pageId), false, false);
}
private long getDiskPageId(int pageId) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/impl/TestVirtualBufferCache.java
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/impl/TestVirtualBufferCache.java
index 8cad497..e697b54 100644
---
a/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/impl/TestVirtualBufferCache.java
+++
b/hyracks-fullstack/hyracks/hyracks-tests/hyracks-storage-am-lsm-btree-test/src/test/java/org/apache/hyracks/storage/am/lsm/btree/impl/TestVirtualBufferCache.java
@@ -101,6 +101,11 @@
}
@Override
+ public ICachedPage pin(long dpid, boolean newPage, boolean incrementStats)
throws HyracksDataException {
+ return pin(dpid, newPage);
+ }
+
+ @Override
public void unpin(ICachedPage page) throws HyracksDataException {
vbc.unpin(page);
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17969
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: trinity
Gerrit-Change-Id: I568a2df4594bdde19932ba72362c9c61291b9183
Gerrit-Change-Number: 17969
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Maxon <[email protected]>
Gerrit-MessageType: newchange