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

alsuliman 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 18d4d80a16 [ASTERIXDB-3277][API] Adding query queue time to stats data.
     new dfd49d580e Merge branch 'gerrit/trinity' into 'master'
18d4d80a16 is described below

commit 18d4d80a167eee8072033a47b4cbfe36ea13bdf5
Author: Ayush Tripathi <[email protected]>
AuthorDate: Mon Oct 9 12:03:57 2023 +0530

    [ASTERIXDB-3277][API] Adding query queue time to stats data.
    
    - user model changes: yes
    - storage format changes: no
    - interface changes: no
    
    Details:
    Adding query waiting time inside job queue as a part of returned metric.
    
    -added queueWaitTime inside stats.
    -adding queueWaitTime inside metric and reading it from stats.
    
    Change-Id: I1ff41693e7080abe5535c402d0dbb6b8bc387a37
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17854
    Integration-Tests: Jenkins <[email protected]>
    Tested-by: Jenkins <[email protected]>
    Reviewed-by: Peeyush Gupta <[email protected]>
---
 .../java/org/apache/asterix/translator/IStatementExecutor.java   | 9 +++++++++
 .../apache/asterix/api/http/server/NCQueryServiceServlet.java    | 1 +
 .../apache/asterix/api/http/server/QueryResultApiServlet.java    | 2 +-
 .../org/apache/asterix/api/http/server/QueryServiceServlet.java  | 2 +-
 .../main/java/org/apache/asterix/app/result/ResponseMetrics.java | 8 +++++++-
 .../org/apache/asterix/app/result/fields/MetricsPrinter.java     | 4 ++++
 .../java/org/apache/asterix/app/translator/QueryTranslator.java  | 4 ++++
 .../request-param-validation-400-BAD.01.regexjson                | 1 +
 .../results/warnings/warnings-limit/warnings-limit.03.regexadm   | 1 +
 .../results/warnings/warnings-limit/warnings-limit.04.regexadm   | 1 +
 .../results/warnings/warnings-limit/warnings-limit.05.regexadm   | 1 +
 .../results/warnings/warnings-limit/warnings-limit.06.regexadm   | 1 +
 .../results/warnings/warnings-limit/warnings-limit.07.regexadm   | 1 +
 .../results/warnings/warnings-limit/warnings-limit.08.regexadm   | 1 +
 .../hyracks/control/common/job/profiling/om/JobProfile.java      | 5 +++++
 15 files changed, 39 insertions(+), 3 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 b47d45d027..e10046e55f 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
@@ -133,6 +133,7 @@ public interface IStatementExecutor {
         private long count;
         private long size;
         private long processedObjects;
+        private long queueWaitTime;
         private Profile profile;
         private ProfileType profileType;
         private long totalWarningsCount;
@@ -154,6 +155,10 @@ public interface IStatementExecutor {
             this.size = size;
         }
 
+        public long getQueueWaitTime() {
+            return queueWaitTime;
+        }
+
         public long getProcessedObjects() {
             return processedObjects;
         }
@@ -172,6 +177,10 @@ public interface IStatementExecutor {
             }
         }
 
+        public void setQueueWaitTime(long queueWaitTime) {
+            this.queueWaitTime = queueWaitTime;
+        }
+
         public void setJobProfile(ObjectNode profile) {
             this.profile = new Profile(profile);
         }
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 695956c6ff..cb5a3a5fae 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
@@ -206,6 +206,7 @@ public class NCQueryServiceServlet extends 
QueryServiceServlet {
         stats.setProcessedObjects(responseStats.getProcessedObjects());
         stats.updateTotalWarningsCount(responseStats.getTotalWarningsCount());
         stats.setCompileTime(responseStats.getCompileTime());
+        stats.setQueueWaitTime(responseStats.getQueueWaitTime());
     }
 
     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 d9df051ff4..680feeb178 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
@@ -102,7 +102,7 @@ public class QueryResultApiServlet extends 
AbstractQueryApiServlet {
                 printer.printResults();
                 ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime() 
- elapsedStart,
                         metadata.getJobDuration(), stats.getCount(), 
stats.getSize(), metadata.getProcessedObjects(), 0,
-                        metadata.getTotalWarningsCount(), 
stats.getCompileTime());
+                        metadata.getTotalWarningsCount(), 
stats.getCompileTime(), stats.getQueueWaitTime());
                 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 e14c185d38..6678c52851 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
@@ -359,7 +359,7 @@ public class QueryServiceServlet extends 
AbstractQueryApiServlet {
         }
         final ResponseMetrics metrics = ResponseMetrics.of(System.nanoTime() - 
elapsedStart, executionState.duration(),
                 stats.getCount(), stats.getSize(), 
stats.getProcessedObjects(), errorCount,
-                stats.getTotalWarningsCount(), stats.getCompileTime());
+                stats.getTotalWarningsCount(), stats.getCompileTime(), 
stats.getQueueWaitTime());
         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/ResponseMetrics.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ResponseMetrics.java
index d55bb07650..08e7702429 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
@@ -29,12 +29,13 @@ public class ResponseMetrics {
     private long warnCount;
     private long diskIoCount;
     private long compileTime;
+    private long queueWaitTime;
 
     private ResponseMetrics() {
     }
 
     public static ResponseMetrics of(long elapsedTime, long executionTime, 
long resultCount, long resultSize,
-            long processedObjects, long errorCount, long warnCount, long 
compileTime) {
+            long processedObjects, long errorCount, long warnCount, long 
compileTime, long queueWaitTime) {
         ResponseMetrics metrics = new ResponseMetrics();
         metrics.elapsedTime = elapsedTime;
         metrics.executionTime = executionTime;
@@ -44,6 +45,7 @@ public class ResponseMetrics {
         metrics.errorCount = errorCount;
         metrics.warnCount = warnCount;
         metrics.compileTime = compileTime;
+        metrics.queueWaitTime = queueWaitTime;
         return metrics;
     }
 
@@ -78,4 +80,8 @@ public class ResponseMetrics {
     public long getCompileTime() {
         return compileTime;
     }
+
+    public long getQueueWaitTime() {
+        return queueWaitTime;
+    }
 }
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 6b1d670b22..e001d296ba 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
@@ -33,6 +33,7 @@ public class MetricsPrinter implements IResponseFieldPrinter {
         ELAPSED_TIME("elapsedTime"),
         EXECUTION_TIME("executionTime"),
         COMPILE_TIME("compileTime"),
+        QUEUE_WAIT_TIME("queueWaitTime"),
         RESULT_COUNT("resultCount"),
         RESULT_SIZE("resultSize"),
         ERROR_COUNT("errorCount"),
@@ -74,6 +75,9 @@ public class MetricsPrinter implements IResponseFieldPrinter {
         pw.print("\n\t");
         ResultUtil.printField(pw, Metrics.COMPILE_TIME.str(), 
Duration.formatNanos(metrics.getCompileTime(), useAscii));
         pw.print("\n\t");
+        ResultUtil.printField(pw, Metrics.QUEUE_WAIT_TIME.str(),
+                Duration.formatNanos(metrics.getQueueWaitTime(), useAscii));
+        pw.print("\n\t");
         ResultUtil.printField(pw, Metrics.RESULT_COUNT.str(), 
metrics.getResultCount(), true);
         pw.print("\n\t");
         ResultUtil.printField(pw, Metrics.RESULT_SIZE.str(), 
metrics.getResultSize(), true);
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 cb64c017d8..fc539ef3a0 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
@@ -4778,6 +4778,10 @@ public class QueryTranslator extends 
AbstractLangTranslator implements IStatemen
                 (org.apache.asterix.translator.ResultMetadata) 
controllerService.getResultDirectoryService()
                         .getResultMetadata(jobId, rsId);
         stats.setProcessedObjects(resultMetadata.getProcessedObjects());
+        if (controllerService.getJobManager().get(jobId) != null) {
+            stats.setQueueWaitTime(
+                    
controllerService.getJobManager().get(jobId).getJobProfile().getQueueWaitTimeInNanos());
+        }
         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/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 6fa99e2c2c..bd58b527ca 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
@@ -7,6 +7,7 @@
                "elapsedTime": "R{.*}",
                "executionTime": "R{.*}",
                "compileTime": "R{.*}",
+               "queueWaitTime": "R{.*}",
                "resultCount": 0,
                "resultSize": 0,
                "processedObjects": 0,
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
index 7029ce25b8..bd85d0e46d 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.03.regexadm
@@ -32,6 +32,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.04.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.04.regexadm
index 8478d17bcd..dce84fe75a 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.04.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.04.regexadm
@@ -25,6 +25,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.05.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.05.regexadm
index 5399ed8c83..6b1931a742 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.05.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.05.regexadm
@@ -25,6 +25,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
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 aa58fb456c..7b689f64bd 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
@@ -13,6 +13,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.07.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.07.regexadm
index 5399ed8c83..6b1931a742 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.07.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.07.regexadm
@@ -25,6 +25,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
index 7029ce25b8..bd85d0e46d 100644
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/warnings/warnings-limit/warnings-limit.08.regexadm
@@ -32,6 +32,7 @@
 \s*\Q"elapsedTime": "\E[^"]+\Q",\E
 \s*\Q"executionTime": "\E[^"]+\Q",\E
 \s*\Q"compileTime": "\E[^"]+\Q",\E
+\s*\Q"queueWaitTime": "\E[^"]+\Q",\E
 \s*\Q"resultCount": \E[0-9]+\Q,\E
 \s*\Q"resultSize": \E[0-9]+\Q,\E
 \s*\Q"processedObjects": \E[0-9]+\Q,\E
diff --git 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/om/JobProfile.java
 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/om/JobProfile.java
index f4cd4d6222..871d2bc77b 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/om/JobProfile.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-common/src/main/java/org/apache/hyracks/control/common/job/profiling/om/JobProfile.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.hyracks.api.dataflow.TaskAttemptId;
 import org.apache.hyracks.api.dataflow.TaskId;
@@ -89,6 +90,10 @@ public class JobProfile extends AbstractProfile {
         this.endTime = endTime;
     }
 
+    public long getQueueWaitTimeInNanos() {
+        return TimeUnit.MILLISECONDS.toNanos(startTime - createTime);
+    }
+
     @Override
     public ObjectNode toJSON() {
         ObjectMapper om = new ObjectMapper();

Reply via email to