>From Ritik Raj <[email protected]>:
Ritik Raj has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18388 )
Change subject: [ASTERIXDB-3439][STO] Exposing cloud read metrics
......................................................................
[ASTERIXDB-3439][STO] Exposing cloud read metrics
- user model changes: no
- storage format changes: no
- interface changes: no
Details:
This patch adds following three metrics related to cloud reads
1. cloudRequest - Gets the count of cloud request to object storage
2. cloudPageRead - The count of pages read from the cloud
3. cloudPagePersist - The count of fetched page is persisted in the disk.
Change-Id: I5d547e4267ec93c97f7b5398ce925fbb73262010
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
M
hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ThreadStats.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/SweepBufferCacheReadContext.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AbstractBufferedFileIOManager.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
M
hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/buffercache/context/DefaultCloudReadContext.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/NoOpOperatorStats.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
M
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/StatsCollector.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/BufferCache.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/OperatorStats.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/DefaultColumnReadContext.java
M
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
M
hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/IThreadStats.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/IOperatorStats.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/CompressedBufferedFileHandle.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/read/AbstractBufferCacheReadContext.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
M
hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
M
hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/IBufferCacheReadContext.java
27 files changed, 314 insertions(+), 33 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/88/18388/1
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
index b624c9b..a13b7ae 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
@@ -140,6 +140,9 @@
private long compileTime;
private double bufferCacheHitRatio;
private long bufferCachePageReadCount;
+ private long cloudRequestsCount;
+ private long cloudPagesReadCount;
+ private long cloudPagesPersistedCount;
public long getCount() {
return count;
@@ -222,6 +225,30 @@
public long getBufferCachePageReadCount() {
return bufferCachePageReadCount;
}
+
+ public void setCloudRequestsCount(long cloudRequestsCount) {
+ this.cloudRequestsCount = cloudRequestsCount;
+ }
+
+ public long getCloudRequestsCount() {
+ return cloudRequestsCount;
+ }
+
+ public void setCloudPagesReadCount(long cloudPagesReadCount) {
+ this.cloudPagesReadCount = cloudPagesReadCount;
+ }
+
+ public long getCloudPagesReadCount() {
+ return cloudPagesReadCount;
+ }
+
+ public void setCloudPagesPersistedCount(long cloudPagesPersistedCount)
{
+ this.cloudPagesPersistedCount = cloudPagesPersistedCount;
+ }
+
+ public long getCloudPagesPersistedCount() {
+ return cloudPagesPersistedCount;
+ }
}
class Profile implements Serializable {
diff --git
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
index af06817..159db9c 100644
---
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
+++
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ResultMetadata.java
@@ -40,6 +40,9 @@
private transient List<Object> outputTypes;
private long queueWaitTimeInNanos;
private long bufferCachePageReadCount;
+ private long cloudRequestsCount;
+ private long cloudPagesReadCount;
+ private long cloudPagesPersistedCount;
public ResultMetadata(SessionConfig.OutputFormat format) {
this.format = format;
@@ -77,6 +80,30 @@
return bufferCachePageReadCount;
}
+ public void setCloudRequestsCount(long cloudRequestsCount) {
+ this.cloudRequestsCount = cloudRequestsCount;
+ }
+
+ public long getCloudRequestsCount() {
+ return cloudRequestsCount;
+ }
+
+ public void setCloudPagesReadCount(long cloudPagesReadCount) {
+ this.cloudPagesReadCount = cloudPagesReadCount;
+ }
+
+ public long getCloudPagesReadCount() {
+ return cloudPagesReadCount;
+ }
+
+ public void setCloudPagesPersistedCount(long cloudPagesPersistedCount) {
+ this.cloudPagesPersistedCount = cloudPagesPersistedCount;
+ }
+
+ public long getCloudPagesPersistedCount() {
+ return cloudPagesPersistedCount;
+ }
+
public void setWarnings(Set<Warning> warnings) {
this.warnings = warnings;
}
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
index 65d4734..42b0ea7 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
@@ -209,6 +209,9 @@
stats.setQueueWaitTime(responseStats.getQueueWaitTime());
stats.setBufferCacheHitRatio(responseStats.getBufferCacheHitRatio());
stats.setBufferCachePageReadCount(responseStats.getBufferCachePageReadCount());
+ stats.setCloudRequestsCount(responseStats.getCloudRequestsCount());
+ stats.setCloudPagesReadCount(responseStats.getCloudPagesReadCount());
+
stats.setCloudPagesPersistedCount(responseStats.getCloudPagesPersistedCount());
}
private static void
updatePropertiesFromCC(IStatementExecutor.StatementProperties
statementProperties,
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
index c2e8dca..f1be007 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
@@ -103,7 +103,9 @@
ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime()
- elapsedStart,
metadata.getJobDuration(), stats.getCount(),
stats.getSize(), metadata.getProcessedObjects(), 0,
metadata.getTotalWarningsCount(),
stats.getCompileTime(), stats.getQueueWaitTime(),
- stats.getBufferCacheHitRatio(),
stats.getBufferCachePageReadCount());
+ stats.getBufferCacheHitRatio(),
stats.getBufferCachePageReadCount(),
+ stats.getCloudRequestsCount(),
stats.getCloudPagesReadCount(),
+ stats.getCloudPagesPersistedCount());
printer.addFooterPrinter(new MetricsPrinter(metrics,
HttpUtil.getPreferredCharset(request)));
if (metadata.getJobProfile() != null) {
printer.addFooterPrinter(new
ProfilePrinter(metadata.getJobProfile()));
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
index 4798f9e..77875c6 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceServlet.java
@@ -369,7 +369,8 @@
final ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime() -
elapsedStart, executionState.duration(),
stats.getCount(), stats.getSize(),
stats.getProcessedObjects(), errorCount,
stats.getTotalWarningsCount(), stats.getCompileTime(),
stats.getQueueWaitTime(),
- stats.getBufferCacheHitRatio(),
stats.getBufferCachePageReadCount());
+ stats.getBufferCacheHitRatio(),
stats.getBufferCachePageReadCount(), stats.getCloudRequestsCount(),
+ stats.getCloudPagesReadCount(),
stats.getCloudPagesPersistedCount());
responsePrinter.addFooterPrinter(new MetricsPrinter(metrics,
resultCharset));
if (isPrintingProfile(stats)) {
responsePrinter.addFooterPrinter(new
ProfilePrinter(stats.getJobProfile()));
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
index c419d0d..2018fd5 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.java
@@ -74,6 +74,9 @@
long aggregateTotalWarningsCount = 0;
long pagesRead = 0;
long nonPagedReads = 0;
+ long cloudRequestsCount = 0;
+ long cloudPagesRead = 0;
+ long cloudPagesPersisted = 0;
Set<Warning> AggregateWarnings = new HashSet<>();
IJobManager jobManager =
((ClusterControllerService)
appCtx.getServiceContext().getControllerService()).getJobManager();
@@ -88,6 +91,9 @@
processedObjects +=
tp.getStatsCollector().getAggregatedStats().getInputTupleCounter().get();
pagesRead +=
tp.getStatsCollector().getAggregatedStats().getPageReads().get();
nonPagedReads +=
tp.getStatsCollector().getAggregatedStats().coldReadCounter().get();
+ cloudRequestsCount +=
tp.getStatsCollector().getAggregatedStats().cloudRequestCounter().get();
+ cloudPagesRead +=
tp.getStatsCollector().getAggregatedStats().cloudReadPageCounter().get();
+ cloudPagesPersisted +=
tp.getStatsCollector().getAggregatedStats().cloudPersistPageCounter().get();
aggregateTotalWarningsCount += tp.getTotalWarningsCount();
Set<Warning> taskWarnings = tp.getWarnings();
if (AggregateWarnings.size() < maxWarnings &&
!taskWarnings.isEmpty()) {
@@ -103,6 +109,9 @@
metadata.setProcessedObjects(processedObjects);
metadata.setBufferCacheHitRatio(pagesRead > 0 ? (pagesRead -
nonPagedReads) / (double) pagesRead : Double.NaN);
metadata.setBufferCachePageReadCount(pagesRead);
+ metadata.setCloudRequestsCount(cloudRequestsCount);
+ metadata.setCloudPagesReadCount(cloudPagesRead);
+ metadata.setCloudPagesPersistedCount(cloudPagesPersisted);
metadata.setWarnings(AggregateWarnings);
metadata.setTotalWarningsCount(aggregateTotalWarningsCount);
if (run != null && run.getFlags() != null &&
run.getFlags().contains(JobFlag.PROFILE_RUNTIME)) {
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
index 8db483c..5681cd9 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
@@ -32,13 +32,17 @@
private long queueWaitTime;
private double bufferCacheHitRatio;
private long bufferCachePageReadCount;
+ private long cloudRequestsCount;
+ private long cloudPagesReadCount;
+ private long cloudPagesPersistedCount;
private ResponseMetrics() {
}
public static ResponseMetrics of(long elapsedTime, long executionTime,
long resultCount, long resultSize,
long processedObjects, long errorCount, long warnCount, long
compileTime, long queueWaitTime,
- double bufferCacheHitRatio, long bufferCachePageReadCount) {
+ double bufferCacheHitRatio, long bufferCachePageReadCount, long
cloudRequestsCount,
+ long cloudPagesReadCount, long cloudPagesPersistedCount) {
ResponseMetrics metrics = new ResponseMetrics();
metrics.elapsedTime = elapsedTime;
metrics.executionTime = executionTime;
@@ -51,6 +55,9 @@
metrics.queueWaitTime = queueWaitTime;
metrics.bufferCacheHitRatio = bufferCacheHitRatio;
metrics.bufferCachePageReadCount = bufferCachePageReadCount;
+ metrics.cloudRequestsCount = cloudRequestsCount;
+ metrics.cloudPagesReadCount = cloudPagesReadCount;
+ metrics.cloudPagesPersistedCount = cloudPagesPersistedCount;
return metrics;
}
@@ -97,4 +104,16 @@
public long getBufferCachePageReadCount() {
return bufferCachePageReadCount;
}
+
+ public long getCloudRequestsCount() {
+ return cloudRequestsCount;
+ }
+
+ public long getCloudPagesReadCount() {
+ return cloudPagesReadCount;
+ }
+
+ public long getCloudPagesPersistedCount() {
+ return cloudPagesPersistedCount;
+ }
}
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
index 76ad2a4..cfbe281 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/MetricsPrinter.java
@@ -40,7 +40,10 @@
PROCESSED_OBJECTS_COUNT("processedObjects"),
WARNING_COUNT("warningCount"),
BUFFERCACHE_HIT_RATIO("bufferCacheHitRatio"),
- BUFFERCACHE_PAGEREAD_COUNT("bufferCachePageReadCount");
+ BUFFERCACHE_PAGEREAD_COUNT("bufferCachePageReadCount"),
+ CLOUD_REQUESTS_COUNT("cloudRequestsCount"),
+ CLOUD_PAGES_READ_COUNT("cloudPagesReadCount"),
+ CLOUD_PAGES_PERSISTED_COUNT("cloudPagesPersistedCount");
private final String str;
@@ -87,6 +90,7 @@
final boolean hasErrors = metrics.getErrorCount() > 0;
final boolean hasWarnings = metrics.getWarnCount() > 0;
final boolean usedCache =
!(Double.isNaN(metrics.getBufferCacheHitRatio()));
+ final boolean madeCloudRequests = metrics.getCloudRequestsCount() > 0;
ResultUtil.printField(pw, Metrics.PROCESSED_OBJECTS_COUNT.str(),
metrics.getProcessedObjects(),
usedCache || hasWarnings || hasErrors);
pw.print("\n");
@@ -100,6 +104,18 @@
hasWarnings || hasErrors);
pw.print("\n");
}
+ if (madeCloudRequests) {
+ pw.print("\t");
+ ResultUtil.printField(pw, Metrics.CLOUD_REQUESTS_COUNT.str(),
metrics.getCloudRequestsCount(), true);
+ pw.print("\n");
+ pw.print("\t");
+ ResultUtil.printField(pw, Metrics.CLOUD_PAGES_READ_COUNT.str(),
metrics.getCloudPagesReadCount(), true);
+ pw.print("\n");
+ pw.print("\t");
+ ResultUtil.printField(pw,
Metrics.CLOUD_PAGES_PERSISTED_COUNT.str(),
metrics.getCloudPagesPersistedCount(),
+ true);
+ pw.print("\n");
+ }
if (hasWarnings) {
pw.print("\t");
ResultUtil.printField(pw, Metrics.WARNING_COUNT.str(),
metrics.getWarnCount(), hasErrors);
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 340cd57..ae718ac 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -5334,6 +5334,9 @@
stats.setQueueWaitTime(resultMetadata.getQueueWaitTimeInNanos());
stats.setBufferCacheHitRatio(resultMetadata.getBufferCacheHitRatio());
stats.setBufferCachePageReadCount(resultMetadata.getBufferCachePageReadCount());
+ stats.setCloudRequestsCount(resultMetadata.getCloudRequestsCount());
+ stats.setCloudPagesReadCount(resultMetadata.getCloudPagesReadCount());
+
stats.setCloudPagesPersistedCount(resultMetadata.getCloudPagesPersistedCount());
if (jobFlags.contains(JobFlag.PROFILE_RUNTIME)) {
stats.setJobProfile(resultMetadata.getJobProfile());
apiFramework.generateOptimizedLogicalPlanWithProfile(resultMetadata.getJobProfile());
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/IOperatorStats.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/IOperatorStats.java
index 7770c4f..38eb667 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/IOperatorStats.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/IOperatorStats.java
@@ -57,6 +57,21 @@
ICounter coldReadCounter();
/**
+ * @return A counter used to track the number of request to fetch pages
from object store
+ */
+ ICounter cloudRequestCounter();
+
+ /**
+ * @return A counter used to track the number of pages read from the cloud.
+ */
+ ICounter cloudReadPageCounter();
+
+ /**
+ * @return A counter used to track the number of pages, fetched form cloud
gets persisted to disk
+ */
+ ICounter cloudPersistPageCounter();
+
+ /**
* @return A counter used to set the average tuple size outputted by an
operator
*/
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/NoOpOperatorStats.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/NoOpOperatorStats.java
index d427d14..cd44130 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/NoOpOperatorStats.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/NoOpOperatorStats.java
@@ -95,6 +95,21 @@
}
@Override
+ public ICounter cloudRequestCounter() {
+ return NOOP_COUNTER;
+ }
+
+ @Override
+ public ICounter cloudReadPageCounter() {
+ return NOOP_COUNTER;
+ }
+
+ @Override
+ public ICounter cloudPersistPageCounter() {
+ return NOOP_COUNTER;
+ }
+
+ @Override
public ICounter getAverageTupleSz() {
return NOOP_COUNTER;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/OperatorStats.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/OperatorStats.java
index 412b788..48c14d3 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/OperatorStats.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/job/profiling/OperatorStats.java
@@ -36,6 +36,9 @@
public final ICounter timeCounter;
public final ICounter pageReads;
public final ICounter coldReadCounter;
+ public final ICounter cloudRequestCounter;
+ public final ICounter cloudReadPageCounter;
+ public final ICounter cloudPersistPageCounter;
public final ICounter avgTupleSz;
public final ICounter minTupleSz;
public final ICounter maxTupleSz;
@@ -57,6 +60,9 @@
timeCounter = new Counter("timeCounter");
pageReads = new Counter("diskIoCounter");
coldReadCounter = new Counter("coldReadCounter");
+ cloudRequestCounter = new Counter("cloudRequestCounter");
+ cloudReadPageCounter = new Counter("cloudReadPageCounter");
+ cloudPersistPageCounter = new Counter("cloudPersistPageCounter");
avgTupleSz = new Counter("avgTupleSz");
minTupleSz = new Counter("minTupleSz");
maxTupleSz = new Counter("maxTupleSz");
@@ -94,6 +100,21 @@
}
@Override
+ public ICounter cloudRequestCounter() {
+ return cloudRequestCounter;
+ }
+
+ @Override
+ public ICounter cloudReadPageCounter() {
+ return cloudReadPageCounter;
+ }
+
+ @Override
+ public ICounter cloudPersistPageCounter() {
+ return cloudPersistPageCounter;
+ }
+
+ @Override
public ICounter getAverageTupleSz() {
return avgTupleSz;
}
@@ -171,6 +192,9 @@
output.writeLong(timeCounter.get());
output.writeLong(pageReads.get());
output.writeLong(coldReadCounter.get());
+ output.writeLong(cloudRequestCounter.get());
+ output.writeLong(cloudReadPageCounter.get());
+ output.writeLong(cloudPersistPageCounter.get());
output.writeLong(avgTupleSz.get());
output.writeLong(minTupleSz.get());
output.writeLong(maxTupleSz.get());
@@ -187,6 +211,9 @@
timeCounter.set(input.readLong());
pageReads.set(input.readLong());
coldReadCounter.set(input.readLong());
+ cloudRequestCounter.set(input.readLong());
+ cloudReadPageCounter.set(input.readLong());
+ cloudPersistPageCounter.set(input.readLong());
avgTupleSz.set(input.readLong());
minTupleSz.set(input.readLong());
maxTupleSz.set(input.readLong());
@@ -218,11 +245,14 @@
public String toString() {
return "{ " + "\"operatorName\": \"" + operatorName + "\", " +
"\"id\": \"" + operatorId + "\", " + "\""
+ tupleCounter.getName() + "\": " + tupleCounter.get() + ",
\"" + timeCounter.getName() + "\": "
- + timeCounter.get() + ", \"" + coldReadCounter.getName() +
"\": " + coldReadCounter.get()
- + avgTupleSz.getName() + "\": " + avgTupleSz.get() + ", \"" +
minTupleSz.getName() + "\": "
- + minTupleSz.get() + ", \"" + minTupleSz.getName() + "\": " +
timeCounter.get() + ", \""
- + inputTupleCounter.getName() + "\": " + bytesRead.get() + ",
\"" + bytesRead.getName() + "\": "
- + bytesWritten.get() + ", \"" + bytesWritten.getName() + "\":
" + inputTupleCounter.get() + ", \""
- + level.getName() + "\": " + level.get() + ", \"indexStats\":
\"" + indexesStats + "\" }";
+ + timeCounter.get() + ", \"" + coldReadCounter.getName() +
"\": " + coldReadCounter.get() + ", \""
+ + cloudRequestCounter.getName() + "\": " +
cloudRequestCounter.get() + ", \""
+ + cloudReadPageCounter.getName() + "\": " +
cloudReadPageCounter.get() + ", \""
+ + cloudPersistPageCounter.getName() + "\": " +
cloudPersistPageCounter.get() + avgTupleSz.getName()
+ + "\": " + avgTupleSz.get() + ", \"" + minTupleSz.getName() +
"\": " + minTupleSz.get() + ", \""
+ + minTupleSz.getName() + "\": " + timeCounter.get() + ", \"" +
inputTupleCounter.getName() + "\": "
+ + bytesRead.get() + ", \"" + bytesRead.getName() + "\": " +
bytesWritten.get() + ", \""
+ + bytesWritten.getName() + "\": " + inputTupleCounter.get() +
", \"" + level.getName() + "\": "
+ + level.get() + ", \"indexStats\": \"" + indexesStats + "\" }";
}
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/buffercache/context/DefaultCloudReadContext.java
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/buffercache/context/DefaultCloudReadContext.java
index 9c24ce1..4ec2d6f 100644
---
a/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/buffercache/context/DefaultCloudReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-cloud/src/main/java/org/apache/hyracks/cloud/buffercache/context/DefaultCloudReadContext.java
@@ -34,6 +34,7 @@
import
org.apache.hyracks.storage.common.buffercache.context.IBufferCacheReadContext;
import org.apache.hyracks.storage.common.disk.IPhysicalDrive;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
import org.apache.hyracks.util.annotations.ThreadSafe;
/**
@@ -73,7 +74,7 @@
@Override
public ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException {
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException {
return readAndPersistPage(ioManager, fileHandle, header, cPage,
drive.hasSpace());
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/StatsCollector.java
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/StatsCollector.java
index 7cfbda0..89cf8f0 100644
---
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/StatsCollector.java
+++
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/StatsCollector.java
@@ -69,6 +69,9 @@
aggregatedStats.getTimeCounter().update(stats.getTimeCounter().get());
aggregatedStats.getPageReads().update(stats.getPageReads().get());
aggregatedStats.coldReadCounter().update(stats.coldReadCounter().get());
+
aggregatedStats.cloudRequestCounter().update(stats.cloudRequestCounter().get());
+
aggregatedStats.cloudReadPageCounter().update(stats.cloudReadPageCounter().get());
+
aggregatedStats.cloudPersistPageCounter().update(stats.cloudPersistPageCounter().get());
}
return aggregatedStats;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
index 63ff2ed..bad399e 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/dataflow/IndexSearchOperatorNodePushable.java
@@ -344,6 +344,9 @@
}
stats.getPageReads().update(ctx.getThreadStats().getPinnedPagesCount());
stats.coldReadCounter().update(ctx.getThreadStats().getColdReadCount());
+
stats.cloudRequestCounter().update(ctx.getThreadStats().getCloudRequestCount());
+
stats.cloudReadPageCounter().update(ctx.getThreadStats().getCloudPageReadCount());
+
stats.cloudPersistPageCounter().update(ctx.getThreadStats().getCloudPagePersistCount());
} catch (Throwable th) { // NOSONAR Must ensure writer.fail is
called.
// subsequently, the failure will be thrown
failure = th;
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
index fef150a..7919f74 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudColumnReadContext.java
@@ -42,6 +42,7 @@
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import org.apache.hyracks.storage.common.disk.IPhysicalDrive;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
import org.apache.hyracks.util.annotations.NotThreadSafe;
@NotThreadSafe
@@ -104,7 +105,7 @@
@Override
public ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException {
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException {
// Page zero will be persisted (always) if free space permits
return readAndPersistPage(ioManager, fileHandle, header, cPage,
drive.hasSpace());
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
index ed6e83f..b606a91 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/CloudMegaPageReadContext.java
@@ -42,6 +42,7 @@
import
org.apache.hyracks.storage.common.buffercache.context.IBufferCacheReadContext;
import org.apache.hyracks.storage.common.disk.IPhysicalDrive;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
import org.apache.hyracks.util.annotations.NotThreadSafe;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@@ -112,7 +113,7 @@
@Override
public ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException {
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException {
boolean empty = BufferCacheCloudReadContextUtil.isEmpty(header);
int pageId = BufferedFileHandle.getPageId(cPage.getDiskPageId());
boolean cloudOnly = columnRanges.isCloudOnly(pageId);
@@ -131,7 +132,7 @@
* 'cloudOnly' is true.
*/
boolean persist = empty && !cloudOnly && !evictable && operation
!= MERGE && drive.isUnpressured();
- readFromStream(ioManager, fileHandle, header, cPage, persist);
+ readFromStream(ioManager, fileHandle, header, cPage, threadStats,
persist);
} else {
/*
* Here we can find a page that is planned for eviction, but it
has not being evicted yet
@@ -142,7 +143,7 @@
}
// Finally process the header
- return DEFAULT.processHeader(ioManager, fileHandle, header, cPage);
+ return DEFAULT.processHeader(ioManager, fileHandle, header, cPage,
threadStats);
}
void unpinAll(IBufferCache bufferCache) throws HyracksDataException {
@@ -168,8 +169,8 @@
}
private void readFromStream(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage, boolean persist) throws HyracksDataException {
- InputStream stream = getOrCreateStream(ioManager, fileHandle, cPage);
+ CachedPage cPage, IThreadStats threadStats, boolean persist)
throws HyracksDataException {
+ InputStream stream = getOrCreateStream(ioManager, fileHandle, cPage,
threadStats);
ByteBuffer buffer = header.getBuffer();
buffer.position(0);
@@ -203,14 +204,20 @@
long offset = cPage.getCompressedPageOffset();
ICloudIOManager cloudIOManager = (ICloudIOManager) ioManager;
BufferCacheCloudReadContextUtil.persist(cloudIOManager,
fileHandle.getFileHandle(), buffer, offset);
+ if (threadStats != null) {
+ threadStats.cloudPagePersist();
+ }
}
streamOffset += cPage.getCompressedPageSize();
remainingStreamBytes -= cPage.getCompressedPageSize();
+ if (threadStats != null) {
+ threadStats.cloudPageRead();
+ }
}
- private InputStream getOrCreateStream(IOManager ioManager,
BufferedFileHandle fileHandle, CachedPage cPage)
- throws HyracksDataException {
+ private InputStream getOrCreateStream(IOManager ioManager,
BufferedFileHandle fileHandle, CachedPage cPage,
+ IThreadStats threadStats) throws HyracksDataException {
if (gapStream != null) {
return gapStream;
}
@@ -229,6 +236,9 @@
ICloudIOManager cloudIOManager = (ICloudIOManager) ioManager;
gapStream = cloudIOManager.cloudRead(fileHandle.getFileHandle(),
offset, length);
+ if (threadStats != null) {
+ threadStats.cloudRequest();
+ }
return gapStream;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/DefaultColumnReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/DefaultColumnReadContext.java
index 0e6f858..11275a4 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/DefaultColumnReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/buffercache/read/DefaultColumnReadContext.java
@@ -31,6 +31,7 @@
import org.apache.hyracks.storage.common.buffercache.IBufferCache;
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
public final class DefaultColumnReadContext implements IColumnReadContext {
public static final IColumnReadContext INSTANCE = new
DefaultColumnReadContext();
@@ -60,8 +61,8 @@
@Override
public ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException {
- return DEFAULT.processHeader(ioManager, fileHandle, header, cPage);
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException {
+ return DEFAULT.processHeader(ioManager, fileHandle, header, cPage,
threadStats);
}
@Override
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/SweepBufferCacheReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/SweepBufferCacheReadContext.java
index 7b51d55..ef61d76 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/SweepBufferCacheReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-btree-column/src/main/java/org/apache/hyracks/storage/am/lsm/btree/column/cloud/sweep/SweepBufferCacheReadContext.java
@@ -29,6 +29,7 @@
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import
org.apache.hyracks.storage.common.buffercache.context.IBufferCacheReadContext;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
import org.apache.hyracks.util.annotations.ThreadSafe;
@ThreadSafe
@@ -61,7 +62,7 @@
@Override
public ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException {
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException {
// Will not persist as the disk is pressured
return readAndPersistPage(ioManager, fileHandle, header, cPage, false);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AbstractBufferedFileIOManager.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AbstractBufferedFileIOManager.java
index a0ad045..c211573 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AbstractBufferedFileIOManager.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/AbstractBufferedFileIOManager.java
@@ -31,6 +31,7 @@
import
org.apache.hyracks.storage.common.buffercache.context.IBufferCacheWriteContext;
import
org.apache.hyracks.storage.common.compression.file.CompressedFileReference;
import
org.apache.hyracks.storage.common.compression.file.ICompressedPageWriter;
+import org.apache.hyracks.util.IThreadStats;
import org.apache.hyracks.util.annotations.NotThreadSafe;
/**
@@ -70,7 +71,8 @@
* @param cPage CachedPage in {@link BufferCache}
* @param context read context
*/
- public abstract void read(CachedPage cPage, IBufferCacheReadContext
context) throws HyracksDataException;
+ public abstract void read(CachedPage cPage, IBufferCacheReadContext
context, IThreadStats threadStats)
+ throws HyracksDataException;
/**
* Write the CachedPage into disk
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 d2a6fc0..7f0cac3 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
@@ -567,14 +567,14 @@
private void read(CachedPage cPage, IBufferCacheReadContext context)
throws HyracksDataException {
BufferedFileHandle fInfo = getFileHandle(cPage);
cPage.buffer.clear();
+ final IThreadStats threadStats =
statsSubscribers.get(Thread.currentThread());
try {
- fInfo.read(cPage, context);
+ fInfo.read(cPage, context, threadStats);
} catch (Throwable e) {
LOGGER.error("Error while reading a page {} in file {}", cPage,
fInfo);
throw e;
}
- final IThreadStats threadStats =
statsSubscribers.get(Thread.currentThread());
if (threadStats != null && context.incrementStats()) {
threadStats.coldRead();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/IBufferCacheReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/IBufferCacheReadContext.java
index 3c2bbcd..c2f4921 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/IBufferCacheReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/IBufferCacheReadContext.java
@@ -27,6 +27,7 @@
import org.apache.hyracks.storage.common.buffercache.IBufferCache;
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
/**
* Provide a context to {@link IBufferCache} pin/unpin operations as well as
processing the header of the first
@@ -68,5 +69,5 @@
* @return the byte buffer of the header after processing it
*/
ByteBuffer processHeader(IOManager ioManager, BufferedFileHandle
fileHandle, BufferCacheHeaderHelper header,
- CachedPage cPage) throws HyracksDataException;
+ CachedPage cPage, IThreadStats threadStats) throws
HyracksDataException;
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/read/AbstractBufferCacheReadContext.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/read/AbstractBufferCacheReadContext.java
index 42abd2e..927b437 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/read/AbstractBufferCacheReadContext.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/buffercache/context/read/AbstractBufferCacheReadContext.java
@@ -30,6 +30,7 @@
import org.apache.hyracks.storage.common.buffercache.ICachedPage;
import
org.apache.hyracks.storage.common.buffercache.context.IBufferCacheReadContext;
import org.apache.hyracks.storage.common.file.BufferedFileHandle;
+import org.apache.hyracks.util.IThreadStats;
abstract class AbstractBufferCacheReadContext implements
IBufferCacheReadContext {
@Override
@@ -44,7 +45,7 @@
@Override
public final ByteBuffer processHeader(IOManager ioManager,
BufferedFileHandle fileHandle,
- BufferCacheHeaderHelper header, CachedPage cPage) {
+ BufferCacheHeaderHelper header, CachedPage cPage, IThreadStats
threadStats) {
ByteBuffer buf = header.getBuffer();
cPage.setFrameSizeMultiplier(buf.getInt(FRAME_MULTIPLIER_OFF));
cPage.setExtraBlockPageId(buf.getInt(EXTRA_BLOCK_PAGE_ID_OFF));
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java
index ff2bd83..9704cdb 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/BufferedFileHandle.java
@@ -38,6 +38,7 @@
import
org.apache.hyracks.storage.common.compression.file.CompressedFileReference;
import
org.apache.hyracks.storage.common.compression.file.ICompressedPageWriter;
import org.apache.hyracks.storage.common.compression.file.NoOpLAFWriter;
+import org.apache.hyracks.util.IThreadStats;
public class BufferedFileHandle extends AbstractBufferedFileIOManager {
private final int fileId;
@@ -71,7 +72,8 @@
}
@Override
- public void read(CachedPage cPage, IBufferCacheReadContext context) throws
HyracksDataException {
+ public void read(CachedPage cPage, IBufferCacheReadContext context,
IThreadStats threadStats)
+ throws HyracksDataException {
final BufferCacheHeaderHelper header = checkoutHeaderHelper();
try {
setPageInfo(cPage);
@@ -83,7 +85,7 @@
return;
}
- final ByteBuffer buf = context.processHeader(ioManager, this,
header, cPage);
+ final ByteBuffer buf = context.processHeader(ioManager, this,
header, cPage, threadStats);
cPage.getBuffer().put(buf);
} finally {
returnHeaderHelper(header);
diff --git
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/CompressedBufferedFileHandle.java
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/CompressedBufferedFileHandle.java
index cd882b5..6ad4d27 100644
---
a/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/CompressedBufferedFileHandle.java
+++
b/hyracks-fullstack/hyracks/hyracks-storage-common/src/main/java/org/apache/hyracks/storage/common/file/CompressedBufferedFileHandle.java
@@ -35,6 +35,7 @@
import
org.apache.hyracks.storage.common.compression.file.CompressedFileManager;
import
org.apache.hyracks.storage.common.compression.file.CompressedFileReference;
import
org.apache.hyracks.storage.common.compression.file.ICompressedPageWriter;
+import org.apache.hyracks.util.IThreadStats;
public class CompressedBufferedFileHandle extends BufferedFileHandle {
private final FileReference lafFileRef;
@@ -48,7 +49,8 @@
}
@Override
- public void read(CachedPage cPage, IBufferCacheReadContext context) throws
HyracksDataException {
+ public void read(CachedPage cPage, IBufferCacheReadContext context,
IThreadStats threadStats)
+ throws HyracksDataException {
final BufferCacheHeaderHelper header = checkoutHeaderHelper();
try {
compressedFileManager.setCompressedPageInfo(cPage);
@@ -59,7 +61,7 @@
return;
}
- final ByteBuffer cBuffer = context.processHeader(ioManager, this,
header, cPage);
+ final ByteBuffer cBuffer = context.processHeader(ioManager, this,
header, cPage, threadStats);
final ByteBuffer uBuffer = cPage.getBuffer();
fixBufferPointers(uBuffer, 0);
if (cPage.getCompressedPageSize() <
bufferCache.getPageSizeWithHeader()) {
diff --git
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/IThreadStats.java
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/IThreadStats.java
index e782a69..58ec724 100644
---
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/IThreadStats.java
+++
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/IThreadStats.java
@@ -43,4 +43,37 @@
* @return the cold read count
*/
long getColdReadCount();
+
+ /**
+ * Indicates that this thread made a cloud request to object storage
+ */
+ void cloudRequest();
+
+ /**
+ * Gets the count of cloud request to object storage
+ *
+ * @return the cloud request count
+ */
+ long getCloudRequestCount();
+
+ /**
+ * Indicates a page is read from the cloud
+ */
+ void cloudPageRead();
+
+ /**
+ * @return the count of pages read from the cloud
+ */
+ long getCloudPageReadCount();
+
+ /**
+ * Indicates the page is persistent in the disk,
+ * after fetching from cloud.
+ */
+ void cloudPagePersist();
+
+ /**
+ * @return the count of fetched page is persisted in the disk.
+ */
+ long getCloudPagePersistCount();
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ThreadStats.java
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ThreadStats.java
index 9af3fb1..ada90cc 100644
---
a/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ThreadStats.java
+++
b/hyracks-fullstack/hyracks/hyracks-util/src/main/java/org/apache/hyracks/util/ThreadStats.java
@@ -25,8 +25,11 @@
@ThreadSafe
public class ThreadStats implements IThreadStats {
- private AtomicLong pinnedPagesCount = new AtomicLong();
- private AtomicLong coldReadCount = new AtomicLong();
+ private final AtomicLong pinnedPagesCount = new AtomicLong();
+ private final AtomicLong coldReadCount = new AtomicLong();
+ private final AtomicLong cloudRequestCount = new AtomicLong();
+ private final AtomicLong cloudReadPageCount = new AtomicLong();
+ private final AtomicLong cloudPersistPageCount = new AtomicLong();
@Override
public void pagePinned() {
@@ -47,4 +50,34 @@
public void coldRead() {
coldReadCount.incrementAndGet();
}
+
+ @Override
+ public void cloudRequest() {
+ cloudRequestCount.incrementAndGet();
+ }
+
+ @Override
+ public long getCloudRequestCount() {
+ return cloudRequestCount.get();
+ }
+
+ @Override
+ public void cloudPageRead() {
+ cloudReadPageCount.incrementAndGet();
+ }
+
+ @Override
+ public long getCloudPageReadCount() {
+ return cloudReadPageCount.get();
+ }
+
+ @Override
+ public void cloudPagePersist() {
+ cloudPersistPageCount.incrementAndGet();
+ }
+
+ @Override
+ public long getCloudPagePersistCount() {
+ return cloudPersistPageCount.get();
+ }
}
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18388
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I5d547e4267ec93c97f7b5398ce925fbb73262010
Gerrit-Change-Number: 18388
Gerrit-PatchSet: 1
Gerrit-Owner: Ritik Raj <[email protected]>
Gerrit-MessageType: newchange