>From Ali Alsuliman <[email protected]>:
Ali Alsuliman has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21212?usp=email )
Change subject: [ASTERIXDB-3769][API] Fail async requests for unsupported
statements
......................................................................
[ASTERIXDB-3769][API] Fail async requests for unsupported statements
- user model changes: yes
- storage format changes: no
- interface changes: no
Ext-ref: MB-71779
Change-Id: Iad2a4ec54b01ca53142852261787e070a781b031
---
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.5.update.sqlpp
M
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.6.async.sqlpp
M
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
A
asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-not-supported/async-not-supported.1.async.sqlpp
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
M asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
7 files changed, 51 insertions(+), 8 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/12/21212/1
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 ea42a3d..e2833a5 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
@@ -386,7 +386,6 @@
final ResultMetadata outMetadata = requestParameters.getOutMetadata();
final Map<String, IAObject> stmtParams =
requestParameters.getStatementParameters();
warningCollector.setMaxWarnings(sessionConfig.getMaxWarnings());
- boolean stmtWithAsyncSupportUsed = false;
try {
for (Statement stmt : statements) {
if (sessionConfig.is(SessionConfig.FORMAT_HTML)) {
@@ -516,7 +515,6 @@
}
handleCopyToStatement(metadataProvider, stmt, hcc,
resultSet, resultDelivery, outMetadata,
requestParameters, stmtParams, stats);
- stmtWithAsyncSupportUsed = true;
break;
case INSERT:
case UPDATE:
@@ -526,7 +524,6 @@
metadataProvider.setResultAsyncMode(resultDelivery
== ResultDelivery.ASYNC
|| resultDelivery ==
ResultDelivery.DEFERRED);
metadataProvider.setMaxResultReads(maxResultReads);
- stmtWithAsyncSupportUsed = true;
}
if (stats.getProfileType() == Stats.ProfileType.FULL) {
this.jobFlags.add(JobFlag.PROFILE_RUNTIME);
@@ -572,7 +569,6 @@
}
handleQuery(metadataProvider, (Query) stmt, hcc,
resultSet, resultDelivery, outMetadata, stats,
requestParameters, stmtParams, stmtRewriter);
- stmtWithAsyncSupportUsed = true;
break;
case ANALYZE:
handleAnalyzeStatement(metadataProvider, stmt, hcc,
requestParameters);
@@ -608,7 +604,7 @@
throw ex;
} finally {
// async queries are completed after their job completes
- if (statements.isEmpty() || ResultDelivery.ASYNC != resultDelivery
|| !stmtWithAsyncSupportUsed) {
+ if (statements.isEmpty() || ResultDelivery.ASYNC !=
resultDelivery) {
appCtx.getRequestTracker().complete(requestParameters.getRequestReference().getUuid());
}
Thread.currentThread().setName(threadName);
@@ -6013,6 +6009,25 @@
if (requestDataverseDecl != null) {
statements.add(0, requestDataverseDecl);
}
+ validateAsyncSupported(requestParameters);
+ }
+
+ private void validateAsyncSupported(IRequestParameters requestParameters)
throws CompilationException {
+ if (requestParameters.getResultProperties().getDelivery() ==
ResultDelivery.ASYNC) {
+ Optional<Statement> stmsOpt =
statements.stream().findAny().filter(this::asyncNotSupported);
+ if (stmsOpt.isPresent()) {
+ Statement stmt = stmsOpt.get();
+ throw new
CompilationException(ErrorCode.ASYNC_NOT_SUPPORTED_FOR_STATEMENT,
stmt.getSourceLocation(),
+ stmt.getKind());
+ }
+ }
+ }
+
+ protected boolean asyncNotSupported(Statement statement) {
+ return switch (statement.getKind()) {
+ case QUERY, COPY_TO, INSERT, UPSERT, UPDATE, DATAVERSE_DECL, SET
-> false;
+ default -> true;
+ };
}
public static void validateStatements(List<Statement> statements, boolean
allowMultiStatement,
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.5.update.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.5.update.sqlpp
index 31abd48..6adaa2d 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.5.update.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.5.update.sqlpp
@@ -26,3 +26,6 @@
UPSERT INTO Test { "id": 3, "val": 4.5 };
UPSERT INTO Test { "id": 4, "val": 5.5 };
+
+// create samples to actually use parallel sort
+ANALYZE DATASET Test;
\ No newline at end of file
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.6.async.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.6.async.sqlpp
index 07a41f7..0e123c3 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.6.async.sqlpp
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred-improved/async-json/async-json.6.async.sqlpp
@@ -20,7 +20,4 @@
-- param include-host=false
use test;
SET `compiler.sort.parallel` "true";
-
-// create samples to actually use parallel sort
-analyze dataset Test;
Select * from Test order by val;
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
index f8155ef..276f32d 100644
---
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/AsyncDeferredQueries.xml
@@ -69,6 +69,12 @@
<output-dir compare="Clean-JSON">async-json</output-dir>
</compilation-unit>
</test-case>
+ <test-case FilePath="async-deferred">
+ <compilation-unit name="async-not-supported">
+ <output-dir compare="Clean-JSON">async-not-supported</output-dir>
+ <expected-error>ASX1246: Async mode not supported for the
statement DATASET_DECL</expected-error>
+ </compilation-unit>
+ </test-case>
<test-case FilePath="async-deferred-improved">
<compilation-unit name="async-failed">
<output-dir compare="Clean-JSON">async-failed</output-dir>
diff --git
a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-not-supported/async-not-supported.1.async.sqlpp
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-not-supported/async-not-supported.1.async.sqlpp
new file mode 100644
index 0000000..31cafaa
--- /dev/null
+++
b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/async-deferred/async-not-supported/async-not-supported.1.async.sqlpp
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+CREATE COLLECTION col PRIMARY KEY (id: int);
\ No newline at end of file
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
index 9555fd3..0068108 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/ErrorCode.java
@@ -351,6 +351,7 @@
NOT_ICEBERG_CATALOG(1243),
UPDATE_PRIMARY_KEY(1244),
PARQUET_WRITER_ERROR(1245),
+ ASYNC_NOT_SUPPORTED_FOR_STATEMENT(1246),
// Feed errors
DATAFLOW_ILLEGAL_STATE(3001),
diff --git
a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
index d7dcff3..20cd871 100644
--- a/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
+++ b/asterixdb/asterix-common/src/main/resources/asx_errormsg/en.properties
@@ -353,6 +353,7 @@
1243 = Catalog '%1$s' is not an Iceberg catalog
1244 = Cannot update primary key '%1$s'
1245 = Parquet writer error: %1$s
+1246 = Async mode not supported for the statement %1$s
# Feed Errors
3001 = Illegal state.
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/21212?usp=email
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings?usp=email
Gerrit-MessageType: newchange
Gerrit-Project: asterixdb
Gerrit-Branch: lumina
Gerrit-Change-Id: Iad2a4ec54b01ca53142852261787e070a781b031
Gerrit-Change-Number: 21212
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>