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 fce6a0c393 [ASTERIXDB-3687][API] Incorrect metrics and missing fields
in status API
fce6a0c393 is described below
commit fce6a0c393b1c24e7a872112a5064048670b8867
Author: Peeyush Gupta <[email protected]>
AuthorDate: Wed Jan 7 22:49:29 2026 -0800
[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]>
---
.../apache/asterix/translator/ClientRequest.java | 5 ++
.../api/http/server/NCQueryStatusApiServlet.java | 32 ++++++++
.../api/http/server/QueryResultApiServlet.java | 13 ++--
.../api/http/server/QueryStatusApiServlet.java | 89 +++++++++++++++-------
.../app/message/ClientInfoRequestMessage.java | 21 ++++-
.../app/message/ClientInfoResponseMessage.java | 36 +++++++++
.../asterix/app/result/JobResultCallback.java | 1 -
.../asterix/app/translator/QueryTranslator.java | 1 +
.../apache/asterix/utils/AsyncRequestsAPIUtil.java | 2 +-
.../async-running/async-running.2.json | 3 -
.../async-running/async-running.2.regexjson | 5 ++
11 files changed, 166 insertions(+), 42 deletions(-)
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 f7ddcf535e..bd67c50fd4 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 @@ public class ClientRequest extends BaseClientRequest {
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 @@ public class ClientRequest extends BaseClientRequest {
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 4c0ce1df5a..8244f928a6 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 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 @@ public class NCQueryStatusApiServlet extends
QueryStatusApiServlet {
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 21f2267a6c..ad3a9de184 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 @@ package org.apache.asterix.api.http.server;
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 @@ public class QueryResultApiServlet extends
AbstractQueryApiServlet {
}
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 @@ public class QueryResultApiServlet extends
AbstractQueryApiServlet {
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 9052f8f655..cf70ef420f 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 @@ package org.apache.asterix.api.http.server;
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.ResultCountPrinter;
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 @@ public class QueryStatusApiServlet extends
AbstractQueryApiServlet {
}
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 @@ public class QueryStatusApiServlet extends
AbstractQueryApiServlet {
}
}
- 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 c244aa0f56..0e717198bc 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.messaging.CCMessageBroker;
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 @@ public class ClientInfoRequestMessage implements
ICcAddressedMessage {
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 @@ public class ClientInfoRequestMessage implements
ICcAddressedMessage {
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 9952a9aba0..29200c53f8 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 @@ public class ClientInfoResponseMessage implements
INcAddressedMessage {
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 class ClientInfoResponseMessage implements
INcAddressedMessage {
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 08c459d6f9..ef36bc8883 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 @@ public class JobResultCallback implements
IJobResultCallback {
}
}
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 9d019959c8..0c5cd98582 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 @@ public class QueryTranslator extends
AbstractLangTranslator implements IStatemen
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 8884b4483a..88184fad53 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 @@ public class AsyncRequestsAPIUtil {
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 272762e81c..0000000000
---
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 0000000000..0e7ce1c2aa
--- /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