>From Peeyush Gupta <[email protected]>:

Peeyush Gupta has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20771?usp=email )

 (

7 is the latest approved patch-set.
No files were changed between the latest approved patch-set and the submitted 
one.
 )Change subject: [ASTERIXDB-3687][API] Incorrect metrics and missing fields in 
status API
......................................................................

[ASTERIXDB-3687][API] Incorrect metrics and missing fields in status API

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
In case the async request is still queued or running the metrics were 
incorrect. This was because the metrics were set when the job is completed. 
Also, fields except the status field are missing altogether when the request is 
queued or its running but no frame is pushed yet.

Ext-ref: MB-69805, MB-69759, MB-69806

Change-Id: Id5fd38b4273d1a3c98936cea63b8c879e474d619
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20771
Integration-Tests: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
Reviewed-by: Ian Maxon <[email protected]>
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ClientRequest.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryStatusApiServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryResultApiServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoRequestMessage.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoResponseMessage.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/JobResultCallback.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/utils/AsyncRequestsAPIUtil.java
D 
asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.json
A 
asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.regexjson
11 files changed, 167 insertions(+), 43 deletions(-)

Approvals:
  Jenkins: Verified; Verified
  Ian Maxon: Looks good to me, approved

Objections:
  Anon. E. Moose #1000171: Violations found




diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ClientRequest.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ClientRequest.java
index f7ddcf5..bd67c50 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ClientRequest.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/ClientRequest.java
@@ -43,6 +43,7 @@
     protected static final int MAX_STATEMENT_LENGTH =
             StorageUtil.getIntSizeInBytes(64, 
StorageUtil.StorageUnit.KILOBYTE);
     protected final long creationTime = System.nanoTime();
+    protected final long creationSystemTime = System.currentTimeMillis();
     protected final Thread executor;
     protected final String statement;
     protected final String clientContextId;
@@ -103,6 +104,10 @@
         return creationTime;
     }

+    public long getCreationSystemTime() {
+        return creationSystemTime;
+    }
+
     @Override
     public ObjectNode asJson() {
         ObjectNode json = super.asJson();
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryStatusApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryStatusApiServlet.java
index 4c0ce1d..8244f92 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryStatusApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryStatusApiServlet.java
@@ -18,10 +18,19 @@
  */
 package org.apache.asterix.api.http.server;

-import java.util.concurrent.ConcurrentMap;
+import static org.apache.asterix.utils.AsyncRequestsAPIUtil.NC_TIMEOUT_MILLIS;

+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
+
+import org.apache.asterix.app.message.ClientInfoRequestMessage;
+import org.apache.asterix.app.message.ClientInfoResponseMessage;
+import org.apache.asterix.app.result.ResponsePrinter;
 import org.apache.asterix.common.api.IApplicationContext;
+import org.apache.asterix.common.messaging.api.INCMessageBroker;
+import org.apache.asterix.common.messaging.api.MessageFuture;
 import org.apache.asterix.utils.AsyncRequestsAPIUtil;
+import org.apache.hyracks.api.application.INCServiceContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.http.api.IServletRequest;
@@ -37,4 +46,27 @@
             throws HyracksDataException {
         return AsyncRequestsAPIUtil.isValidRequest(appCtx, requestId, jobId, 
response);
     }
+
+    public void printMetricsWithoutResultMetadata(ResponsePrinter printer, 
IServletRequest request, String requestId,
+            JobId jobId, ResultStatus status) throws HyracksDataException {
+        INCServiceContext serviceCtx = (INCServiceContext) 
appCtx.getServiceContext();
+        INCMessageBroker messageBroker = (INCMessageBroker) 
serviceCtx.getMessageBroker();
+        MessageFuture messageFuture = messageBroker.registerMessageFuture();
+        long futureId = messageFuture.getFutureId();
+        ClientInfoRequestMessage clientInfoRequestMessage =
+                new ClientInfoRequestMessage(serviceCtx.getNodeId(), futureId, 
jobId, requestId, true);
+        try {
+            messageBroker.sendMessageToPrimaryCC(clientInfoRequestMessage);
+            ClientInfoResponseMessage responseMessage =
+                    (ClientInfoResponseMessage) 
messageFuture.get(NC_TIMEOUT_MILLIS, TimeUnit.MILLISECONDS);
+            if (responseMessage == null || 
!responseMessage.isValidRequestId()) {
+                return;
+            }
+            printMetrics(printer, request, status, 
responseMessage.getRequestCreateTime(),
+                    responseMessage.getJobCreateTime(), 
responseMessage.getJobStartTime(),
+                    responseMessage.getJobQueueWaitTime());
+        } catch (Exception e) {
+            throw HyracksDataException.create(e);
+        }
+    }
 }
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 21f2267..ad3a9de 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
@@ -20,6 +20,7 @@

 import java.io.IOException;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;

 import org.apache.asterix.app.result.ResponseMetrics;
 import org.apache.asterix.app.result.ResponsePrinter;
@@ -165,7 +166,7 @@
     }

     private ResponseMetrics buildMetrics(Stats stats, ResultMetadata metadata) 
{
-        long endTime = System.currentTimeMillis();
+        long endTime = System.nanoTime();
         stats.setProcessedObjects(metadata.getProcessedObjects());
         stats.setQueueWaitTime(metadata.getQueueWaitTimeInNanos());
         stats.setBufferCacheHitRatio(metadata.getBufferCacheHitRatio());
@@ -174,11 +175,11 @@
         stats.setCloudPagesReadCount(metadata.getCloudPagesReadCount());
         
stats.setCloudPagesPersistedCount(metadata.getCloudPagesPersistedCount());
         stats.updateTotalWarningsCount(metadata.getTotalWarningsCount());
-        return ResponseMetrics.of(endTime - metadata.getCreateTime(), 
metadata.getJobDuration(), stats.getCount(),
-                stats.getSize(), metadata.getProcessedObjects(), 0, 
metadata.getTotalWarningsCount(),
-                metadata.getCompileTime(), stats.getQueueWaitTime(), 
stats.getBufferCacheHitRatio(),
-                stats.getBufferCachePageReadCount(), 
stats.getCloudReadRequestsCount(), stats.getCloudPagesReadCount(),
-                stats.getCloudPagesPersistedCount());
+        return ResponseMetrics.of(TimeUnit.MILLISECONDS.toNanos(endTime - 
metadata.getCreateTime()),
+                metadata.getJobDuration(), stats.getCount(), stats.getSize(), 
metadata.getProcessedObjects(), 0,
+                metadata.getTotalWarningsCount(), metadata.getCompileTime(), 
stats.getQueueWaitTime(),
+                stats.getBufferCacheHitRatio(), 
stats.getBufferCachePageReadCount(), stats.getCloudReadRequestsCount(),
+                stats.getCloudPagesReadCount(), 
stats.getCloudPagesPersistedCount());
     }

     /**
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java
index 9052f8f..cf70ef4 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryStatusApiServlet.java
@@ -20,8 +20,10 @@

 import java.io.PrintWriter;
 import java.util.List;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;

 import org.apache.asterix.app.result.ResponseMetrics;
@@ -35,13 +37,18 @@
 import org.apache.asterix.app.result.fields.ResultHandlePrinter;
 import org.apache.asterix.app.result.fields.StatusPrinter;
 import org.apache.asterix.common.api.IApplicationContext;
+import org.apache.asterix.common.api.IClientRequest;
+import org.apache.asterix.common.dataflow.ICcApplicationContext;
 import org.apache.asterix.common.exceptions.ErrorCode;
 import org.apache.asterix.common.exceptions.RuntimeDataException;
-import org.apache.asterix.translator.IStatementExecutor;
+import org.apache.asterix.translator.ClientRequest;
 import org.apache.asterix.translator.ResultMetadata;
 import org.apache.asterix.translator.SessionOutput;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.result.ResultJobRecord;
+import org.apache.hyracks.control.cc.ClusterControllerService;
+import org.apache.hyracks.control.cc.job.JobRun;
 import org.apache.hyracks.http.api.IServletRequest;
 import org.apache.hyracks.http.api.IServletResponse;
 import org.apache.hyracks.http.server.utils.HttpUtil;
@@ -91,7 +98,7 @@
         }
         printer.printResults();
         if (uriMode) {
-            printMetricsAndFooters(printer, resultReader, request);
+            printMetricsAndFooters(printer, resultReader, request, 
handle.getRequestId(), handle.getJobId(), resultStatus);
         }
         printer.end();
         if (response.writer().checkError()) {
@@ -165,33 +172,61 @@
         }
     }

-    private void printMetricsAndFooters(ResponsePrinter printer, ResultReader 
resultReader, IServletRequest request)
-            throws HyracksDataException {
+    private void printMetricsAndFooters(ResponsePrinter printer, ResultReader 
resultReader, IServletRequest request,
+            String requestId, JobId jobId, ResultStatus status) throws 
HyracksDataException {
         ResultMetadata metadata = (ResultMetadata) resultReader.getMetadata();
-        if (metadata != null) {
-            final IStatementExecutor.Stats stats = new 
IStatementExecutor.Stats();
-            stats.setProcessedObjects(metadata.getProcessedObjects());
-            stats.setQueueWaitTime(metadata.getQueueWaitTimeInNanos());
-            stats.setBufferCacheHitRatio(metadata.getBufferCacheHitRatio());
-            
stats.setBufferCachePageReadCount(metadata.getBufferCachePageReadCount());
-            
stats.setCloudReadRequestsCount(metadata.getCloudReadRequestsCount());
-            stats.setCloudPagesReadCount(metadata.getCloudPagesReadCount());
-            
stats.setCloudPagesPersistedCount(metadata.getCloudPagesPersistedCount());
-            stats.updateTotalWarningsCount(metadata.getTotalWarningsCount());
-            long endTime = System.currentTimeMillis();
-            ResponseMetrics metrics =
-                    ResponseMetrics.of(endTime - metadata.getCreateTime(), 
metadata.getJobDuration(), stats.getCount(),
-                            stats.getSize(), metadata.getProcessedObjects(), 
0, metadata.getTotalWarningsCount(),
-                            metadata.getCompileTime(), 
stats.getQueueWaitTime(), stats.getBufferCacheHitRatio(),
-                            stats.getBufferCachePageReadCount(), 
stats.getCloudReadRequestsCount(),
-                            stats.getCloudPagesReadCount(), 
stats.getCloudPagesPersistedCount());
-            printer.addFooterPrinter(new MetricsPrinter(metrics, 
HttpUtil.getPreferredCharset(request),
-                    Set.of(MetricsPrinter.Metrics.ELAPSED_TIME, 
MetricsPrinter.Metrics.EXECUTION_TIME,
-                            MetricsPrinter.Metrics.QUEUE_WAIT_TIME, 
MetricsPrinter.Metrics.COMPILE_TIME,
-                            MetricsPrinter.Metrics.WARNING_COUNT, 
MetricsPrinter.Metrics.ERROR_COUNT,
-                            MetricsPrinter.Metrics.PROCESSED_OBJECTS_COUNT)));
-            printer.addFooterPrinter(new 
CreatedAtPrinter(metadata.getCreateTime()));
+        if (metadata != null && status != ResultStatus.QUEUED && status != 
ResultStatus.RUNNING) {
+            printMetricsWithResultMetadata(printer, request, metadata);
+        } else {
+            printMetricsWithoutResultMetadata(printer, request, requestId, 
jobId, status);
         }
         printer.printFooters();
     }
+
+    public void printMetricsWithResultMetadata(ResponsePrinter printer, 
IServletRequest request,
+            ResultMetadata metadata) {
+        long endTime = System.currentTimeMillis();
+        ResponseMetrics metrics = 
ResponseMetrics.of(TimeUnit.MILLISECONDS.toNanos(endTime - 
metadata.getCreateTime()),
+                metadata.getJobDuration(), 0, 0, 
metadata.getProcessedObjects(), 0, metadata.getTotalWarningsCount(),
+                metadata.getCompileTime(), metadata.getQueueWaitTimeInNanos(), 
0, 0, 0, 0, 0);
+        printer.addFooterPrinter(new MetricsPrinter(metrics, 
HttpUtil.getPreferredCharset(request),
+                Set.of(MetricsPrinter.Metrics.ELAPSED_TIME, 
MetricsPrinter.Metrics.EXECUTION_TIME,
+                        MetricsPrinter.Metrics.QUEUE_WAIT_TIME, 
MetricsPrinter.Metrics.COMPILE_TIME,
+                        MetricsPrinter.Metrics.WARNING_COUNT, 
MetricsPrinter.Metrics.ERROR_COUNT,
+                        MetricsPrinter.Metrics.PROCESSED_OBJECTS_COUNT)));
+        printer.addFooterPrinter(new 
CreatedAtPrinter(metadata.getCreateTime()));
+    }
+
+    public void printMetricsWithoutResultMetadata(ResponsePrinter printer, 
IServletRequest request, String requestId,
+            JobId jobId, ResultStatus status) throws HyracksDataException {
+        try {
+            ClusterControllerService ccs = (ClusterControllerService) 
appCtx.getServiceContext().getControllerService();
+            JobRun run = ccs.getJobManager().get(jobId);
+            Optional<IClientRequest> clientRequest =
+                    ((ICcApplicationContext) 
appCtx).getRequestTracker().getAsyncOrDeferredRequest(requestId);
+
+            long requestCreateTime = ((ClientRequest) 
clientRequest.get()).getCreationSystemTime();
+            printMetrics(printer, request, status, requestCreateTime, 
run.getCreateTime(), run.getStartTime(),
+                    run.getQueueWaitTimeInMillis());
+        } catch (Exception e) {
+            throw HyracksDataException.create(e);
+        }
+    }
+
+    protected void printMetrics(ResponsePrinter printer, IServletRequest 
request, ResultStatus status,
+            long requestCreateTime, long jobCreateTime, long jobStartTime, 
long queueWaitTime) {
+        long currentTime = System.currentTimeMillis();
+        long elapsedTime = TimeUnit.MILLISECONDS.toNanos(currentTime - 
requestCreateTime);
+        long compileTime = TimeUnit.MILLISECONDS.toNanos(jobCreateTime - 
requestCreateTime);
+        long executionTime =
+                status == ResultStatus.RUNNING ? 
TimeUnit.MILLISECONDS.toNanos(currentTime - jobStartTime) : 0;
+
+        ResponseMetrics metrics = ResponseMetrics.of(elapsedTime, 
executionTime, 0, 0, 0, 0, 0, compileTime,
+                queueWaitTime, 0, 0, 0, 0, 0);
+
+        printer.addFooterPrinter(new MetricsPrinter(metrics, 
HttpUtil.getPreferredCharset(request),
+                Set.of(MetricsPrinter.Metrics.ELAPSED_TIME, 
MetricsPrinter.Metrics.EXECUTION_TIME,
+                        MetricsPrinter.Metrics.QUEUE_WAIT_TIME, 
MetricsPrinter.Metrics.COMPILE_TIME)));
+        printer.addFooterPrinter(new CreatedAtPrinter(requestCreateTime));
+    }
 }
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoRequestMessage.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoRequestMessage.java
index c244aa0..0e71719 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoRequestMessage.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoRequestMessage.java
@@ -27,6 +27,8 @@
 import org.apache.asterix.translator.ClientRequest;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.api.job.JobId;
+import org.apache.hyracks.control.cc.ClusterControllerService;
+import org.apache.hyracks.control.cc.job.JobRun;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;

@@ -38,12 +40,15 @@
     private final JobId jobId;
     private final String requestId;
     private final long ncReqId;
+    private final boolean metricsRequired;

-    public ClientInfoRequestMessage(String nodeId, long ncReqId, JobId jobId, 
String requestId) {
+    public ClientInfoRequestMessage(String nodeId, long ncReqId, JobId jobId, 
String requestId,
+            boolean metricsRequired) {
         this.nodeId = nodeId;
         this.ncReqId = ncReqId;
         this.jobId = jobId;
         this.requestId = requestId;
+        this.metricsRequired = metricsRequired;
     }

     @Override
@@ -51,11 +56,19 @@
         CCMessageBroker messageBroker = (CCMessageBroker) 
appCtx.getServiceContext().getMessageBroker();
         Optional<IClientRequest> clientRequest = 
appCtx.getRequestTracker().getAsyncOrDeferredRequest(requestId);
         ClientInfoResponseMessage response;
-        if (clientRequest.isEmpty()) {
+        if (clientRequest.isEmpty() || !jobId.equals(((ClientRequest) 
clientRequest.get()).getJobId())) {
             response = new ClientInfoResponseMessage(ncReqId, false);
         } else {
-            response = new ClientInfoResponseMessage(ncReqId,
-                    jobId.equals(((ClientRequest) 
clientRequest.get()).getJobId()));
+            if (metricsRequired) {
+                ClusterControllerService ccs =
+                        (ClusterControllerService) 
appCtx.getServiceContext().getControllerService();
+                JobRun run = ccs.getJobManager().get(jobId);
+                response = new ClientInfoResponseMessage(ncReqId, true,
+                        ((ClientRequest) 
clientRequest.get()).getCreationSystemTime(), run.getCreateTime(),
+                        run.getStartTime(), run.getEndTime(), 
run.getQueueWaitTimeInMillis());
+            } else {
+                response = new ClientInfoResponseMessage(ncReqId, true);
+            }
         }
         try {
             messageBroker.sendApplicationMessageToNC(response, nodeId);
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoResponseMessage.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoResponseMessage.java
index 9952a9a..29200c5 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoResponseMessage.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/message/ClientInfoResponseMessage.java
@@ -29,10 +29,26 @@
     private static final long serialVersionUID = 1L;
     private final long reqId;
     private final boolean validRequestId;
+    // All time are in millis
+    private final long requestCreateTime;
+    private final long jobCreateTime;
+    private final long jobStartTime;
+    private final long jobEndTime;
+    private final long jobQueueWaitTime;

     public ClientInfoResponseMessage(long reqId, boolean validRequestId) {
+        this(reqId, validRequestId, 0, 0, 0, 0, 0);
+    }
+
+    public ClientInfoResponseMessage(long reqId, boolean validRequestId, long 
requestCreateTime, long jobCreateTime,
+            long jobStartTime, long jobEndTime, long jobQueueWaitTime) {
         this.reqId = reqId;
         this.validRequestId = validRequestId;
+        this.requestCreateTime = requestCreateTime;
+        this.jobStartTime = jobStartTime;
+        this.jobCreateTime = jobCreateTime;
+        this.jobEndTime = jobEndTime;
+        this.jobQueueWaitTime = jobQueueWaitTime;
     }

     @Override
@@ -47,4 +63,24 @@
     public boolean isValidRequestId() {
         return validRequestId;
     }
+
+    public long getRequestCreateTime() {
+        return requestCreateTime;
+    }
+
+    public long getJobCreateTime() {
+        return jobCreateTime;
+    }
+
+    public long getJobStartTime() {
+        return jobStartTime;
+    }
+
+    public long getJobEndTime() {
+        return jobEndTime;
+    }
+
+    public long getJobQueueWaitTime() {
+        return jobQueueWaitTime;
+    }
 }
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 08c459d..ef36bc8 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
@@ -108,7 +108,6 @@
                 }
             }
             metadata.setEndTime(System.currentTimeMillis());
-            metadata.setCreateTime(run.getCreateTime());
             
metadata.setQueueWaitTimeInNanos(TimeUnit.MILLISECONDS.toNanos(run.getQueueWaitTimeInMillis()));
         }
         metadata.setProcessedObjects(processedObjects);
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 9d01995..0c5cd98 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
@@ -5570,6 +5570,7 @@
             try {
                 org.apache.asterix.translator.ResultMetadata resultMetadata =
                         new 
org.apache.asterix.translator.ResultMetadata(sessionConfig.fmt());
+                resultMetadata.setCreateTime(System.currentTimeMillis());
                 final JobSpecification jobSpec = rewriteCompileQuery(hcc, 
metadataProvider, query, null, stmtParams,
                         requestParameters, resultMetadata);
                 // update stats with count of compile-time warnings. needs to 
be adapted for multi-statement.
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/AsyncRequestsAPIUtil.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/AsyncRequestsAPIUtil.java
index 8884b44..88184fa 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/AsyncRequestsAPIUtil.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/utils/AsyncRequestsAPIUtil.java
@@ -134,7 +134,7 @@
         MessageFuture messageFuture = messageBroker.registerMessageFuture();
         long futureId = messageFuture.getFutureId();
         ClientInfoRequestMessage clientInfoRequestMessage =
-                new ClientInfoRequestMessage(serviceCtx.getNodeId(), futureId, 
jobId, requestId);
+                new ClientInfoRequestMessage(serviceCtx.getNodeId(), futureId, 
jobId, requestId, false);
         try {
             messageBroker.sendMessageToPrimaryCC(clientInfoRequestMessage);
             ClientInfoResponseMessage responseMessage =
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.json
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.json
deleted file mode 100644
index 272762e..0000000
--- 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-       "status": "running"
-}
diff --git 
a/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.regexjson
 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.regexjson
new file mode 100644
index 0000000..0e7ce1c
--- /dev/null
+++ 
b/asterixdb/asterix-app/src/test/resources/runtimets/results/async-deferred-improved/async-running/async-running.2.regexjson
@@ -0,0 +1,5 @@
+{
+  "status":"running",
+  "metrics": "R{.*}",
+  "createdAt": "R{.*}"
+}
\ No newline at end of file

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/20771?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: Id5fd38b4273d1a3c98936cea63b8c879e474d619
Gerrit-Change-Number: 20771
Gerrit-PatchSet: 9
Gerrit-Owner: Peeyush Gupta <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Ian Maxon <[email protected]>
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Peeyush Gupta <[email protected]>

Reply via email to