This is an automated email from the ASF dual-hosted git repository.

mblow pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 6643eecca9 [ASTERIXDB-3278][API] Add buffercache page read count to 
metrics
6643eecca9 is described below

commit 6643eecca95bedfcaa83e02781af74635f55477f
Author: Ian Maxon <[email protected]>
AuthorDate: Fri Jan 5 14:35:59 2024 -0800

    [ASTERIXDB-3278][API] Add buffercache page read count to metrics
    
    - user model changes: yes
    - storage format changes: no
    - interface changes: no
    
    Details:
    Push this up from the ratio calculation to the metrics as well
    
    Change-Id: I568a2df4594bdde19932ba72362c9c61a96a9183
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17959
    Reviewed-by: Ian Maxon <[email protected]>
    Reviewed-by: Wail Alkowaileet <[email protected]>
    Tested-by: Ian Maxon <[email protected]>
    Contrib: Ian Maxon <[email protected]>
    Integration-Tests: Jenkins <[email protected]>
---
 .../org/apache/asterix/translator/IStatementExecutor.java     |  9 +++++++++
 .../java/org/apache/asterix/translator/ResultMetadata.java    | 11 ++++++++++-
 .../apache/asterix/api/http/server/NCQueryServiceServlet.java |  1 +
 .../apache/asterix/api/http/server/QueryResultApiServlet.java |  2 +-
 .../apache/asterix/api/http/server/QueryServiceServlet.java   |  8 ++++----
 .../java/org/apache/asterix/app/result/JobResultCallback.java |  1 +
 .../java/org/apache/asterix/app/result/ResponseMetrics.java   |  8 +++++++-
 .../org/apache/asterix/app/result/fields/MetricsPrinter.java  |  9 +++++++--
 .../org/apache/asterix/app/translator/QueryTranslator.java    |  1 +
 .../results/api/cache-residency/cache-residency.002.regexjson |  3 ++-
 .../request-param-validation-400-BAD.01.regexjson             |  1 +
 .../warnings/warnings-limit/warnings-limit.06.regexadm        |  1 +
 .../warnings/warnings-limit/warnings-limit.03.regexadm        |  1 +
 .../warnings/warnings-limit/warnings-limit.04.regexadm        |  1 +
 .../warnings/warnings-limit/warnings-limit.05.regexadm        |  1 +
 .../warnings/warnings-limit/warnings-limit.07.regexadm        |  1 +
 .../warnings/warnings-limit/warnings-limit.08.regexadm        |  1 +
 17 files changed, 50 insertions(+), 10 deletions(-)

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 34d0c80725..b624c9b62f 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
@@ -139,6 +139,7 @@ public interface IStatementExecutor {
         private long totalWarningsCount;
         private long compileTime;
         private double bufferCacheHitRatio;
+        private long bufferCachePageReadCount;
 
         public long getCount() {
             return count;
@@ -213,6 +214,14 @@ public interface IStatementExecutor {
         public double getBufferCacheHitRatio() {
             return bufferCacheHitRatio;
         }
+
+        public void setBufferCachePageReadCount(long bufferCachePageReadCount) 
{
+            this.bufferCachePageReadCount = bufferCachePageReadCount;
+        }
+
+        public long getBufferCachePageReadCount() {
+            return bufferCachePageReadCount;
+        }
     }
 
     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 f47fce12f5..af068172d4 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
@@ -27,7 +27,7 @@ import org.apache.hyracks.api.result.IResultMetadata;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 
 public class ResultMetadata implements IResultMetadata {
-    private static final long serialVersionUID = 1905367559307369035L;
+    private static final long serialVersionUID = 1905367559307369036L;
 
     private final SessionConfig.OutputFormat format;
     private long jobDuration;
@@ -39,6 +39,7 @@ public class ResultMetadata implements IResultMetadata {
     private long totalWarningsCount;
     private transient List<Object> outputTypes;
     private long queueWaitTimeInNanos;
+    private long bufferCachePageReadCount;
 
     public ResultMetadata(SessionConfig.OutputFormat format) {
         this.format = format;
@@ -68,6 +69,14 @@ public class ResultMetadata implements IResultMetadata {
         return bufferCacheHitRatio;
     }
 
+    public void setBufferCachePageReadCount(long bufferCachePageReadCount) {
+        this.bufferCachePageReadCount = bufferCachePageReadCount;
+    }
+
+    public long getBufferCachePageReadCount() {
+        return bufferCachePageReadCount;
+    }
+
     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 a5e13c1f2e..1809166b5b 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
@@ -208,6 +208,7 @@ public class NCQueryServiceServlet extends 
QueryServiceServlet {
         stats.setCompileTime(responseStats.getCompileTime());
         stats.setQueueWaitTime(responseStats.getQueueWaitTime());
         stats.setBufferCacheHitRatio(responseStats.getBufferCacheHitRatio());
+        
stats.setBufferCachePageReadCount(responseStats.getBufferCachePageReadCount());
     }
 
     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 ad2a5b5fd5..c2e8dcaf64 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,7 @@ public class QueryResultApiServlet extends 
AbstractQueryApiServlet {
                 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.getBufferCacheHitRatio(), 
stats.getBufferCachePageReadCount());
                 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 3c013e7b16..61591f45ce 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
@@ -363,10 +363,10 @@ public class QueryServiceServlet extends 
AbstractQueryApiServlet {
             // in case of ASYNC delivery, the status is printed by query 
translator
             responsePrinter.addFooterPrinter(new 
StatusPrinter(executionState.getResultStatus()));
         }
-        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());
+        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());
         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 7ac1431e47..a9a3aac427 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
@@ -101,6 +101,7 @@ public class JobResultCallback implements 
IJobResultCallback {
         }
         metadata.setProcessedObjects(processedObjects);
         metadata.setBufferCacheHitRatio(pagesRead > 0 ? (pagesRead - 
nonPagedReads) / (double) pagesRead : Double.NaN);
+        metadata.setBufferCachePageReadCount(pagesRead);
         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 5f709375fd..8db483c393 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
@@ -31,13 +31,14 @@ public class ResponseMetrics {
     private long compileTime;
     private long queueWaitTime;
     private double bufferCacheHitRatio;
+    private long bufferCachePageReadCount;
 
     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) {
+            double bufferCacheHitRatio, long bufferCachePageReadCount) {
         ResponseMetrics metrics = new ResponseMetrics();
         metrics.elapsedTime = elapsedTime;
         metrics.executionTime = executionTime;
@@ -49,6 +50,7 @@ public class ResponseMetrics {
         metrics.compileTime = compileTime;
         metrics.queueWaitTime = queueWaitTime;
         metrics.bufferCacheHitRatio = bufferCacheHitRatio;
+        metrics.bufferCachePageReadCount = bufferCachePageReadCount;
         return metrics;
     }
 
@@ -91,4 +93,8 @@ public class ResponseMetrics {
     public double getBufferCacheHitRatio() {
         return bufferCacheHitRatio;
     }
+
+    public long getBufferCachePageReadCount() {
+        return bufferCachePageReadCount;
+    }
 }
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 93fb6d4b86..76ad2a4aa6 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
@@ -39,7 +39,8 @@ public class MetricsPrinter implements IResponseFieldPrinter {
         ERROR_COUNT("errorCount"),
         PROCESSED_OBJECTS_COUNT("processedObjects"),
         WARNING_COUNT("warningCount"),
-        BUFFERCACHE_HIT_RATIO("bufferCacheHitRatio");
+        BUFFERCACHE_HIT_RATIO("bufferCacheHitRatio"),
+        BUFFERCACHE_PAGEREAD_COUNT("bufferCachePageReadCount");
 
         private final String str;
 
@@ -92,7 +93,11 @@ public class MetricsPrinter implements IResponseFieldPrinter 
{
         if (usedCache) {
             pw.print("\t");
             String pctValue = String.format("%.2f%%", 
metrics.getBufferCacheHitRatio() * 100);
-            ResultUtil.printField(pw, Metrics.BUFFERCACHE_HIT_RATIO.str(), 
pctValue, hasWarnings || hasErrors);
+            ResultUtil.printField(pw, Metrics.BUFFERCACHE_HIT_RATIO.str(), 
pctValue, true);
+            pw.print("\n");
+            pw.print("\t");
+            ResultUtil.printField(pw, 
Metrics.BUFFERCACHE_PAGEREAD_COUNT.str(), metrics.getBufferCachePageReadCount(),
+                    hasWarnings || hasErrors);
             pw.print("\n");
         }
         if (hasWarnings) {
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 f058c41282..30c7127e34 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
@@ -5304,6 +5304,7 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
         stats.setProcessedObjects(resultMetadata.getProcessedObjects());
         stats.setQueueWaitTime(resultMetadata.getQueueWaitTimeInNanos());
         stats.setBufferCacheHitRatio(resultMetadata.getBufferCacheHitRatio());
+        
stats.setBufferCachePageReadCount(resultMetadata.getBufferCachePageReadCount());
         if (jobFlags.contains(JobFlag.PROFILE_RUNTIME)) {
             stats.setJobProfile(resultMetadata.getJobProfile());
             
apiFramework.generateOptimizedLogicalPlanWithProfile(resultMetadata.getJobProfile());
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
index 8f5cf761e1..9dcdbb69b0 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/cache-residency/cache-residency.002.regexjson
@@ -15,6 +15,7 @@
                "resultCount": 1,
                "resultSize": 18,
                "processedObjects": 17,
-               "bufferCacheHitRatio": "100.00%"
+               "bufferCacheHitRatio": "100.00%",
+               "bufferCachePageReadCount": 1
        }
 }
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
index 823515ba08..ba3c97068c 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
@@ -12,6 +12,7 @@
                "resultSize": 0,
                "processedObjects": 0,
                "bufferCacheHitRatio": "0.00%",
+               "bufferCachePageReadCount": 0,
                "errorCount": 1
        }
 }
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
index 39fdb09f4e..f168154c1a 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.06.regexadm
@@ -18,6 +18,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 2\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
index fae945388b..0717e21b1b 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.03.regexadm
@@ -37,6 +37,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 12\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
index f378c3c859..7c0d2e7727 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.04.regexadm
@@ -30,6 +30,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 10\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
index 932753c5eb..49d65fff11 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.05.regexadm
@@ -30,6 +30,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 11\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
index 932753c5eb..49d65fff11 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.07.regexadm
@@ -30,6 +30,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 11\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
index fae945388b..0717e21b1b 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results_cbo/warnings/warnings-limit/warnings-limit.08.regexadm
@@ -37,6 +37,7 @@
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
 \s*\Q"bufferCacheHitRatio": "\E[^"]+\Q",\E
+\s*\Q"bufferCachePageReadCount": \E[0-9]+\Q,\E
 \s*\Q"warningCount": 12\E
 \s*\Q}\E
 \s*\Q}\E\s*
\ No newline at end of file

Reply via email to