You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2016/10/11 07:07:36 UTC
asterixdb git commit: += PollQuery Test File Type
Repository: asterixdb
Updated Branches:
refs/heads/master 33af12dff -> db1c115ec
+= PollQuery Test File Type
pollquery test type files will run the query every polldelaysecs
[default:1] seconds for up to polltimeoutsecs seconds or until the
correct result is found. This avoids unnecessarily long or dangerously
short sleeps to wait for some asynchronous operation to complete.
Usage: polltimeoutsecs=nnn must be present somewhere in your file,
otherwise an error is thrown. Optionally, polldelaysecs=nnn can be also
present to override the default poll frequency of 1s.
Change-Id: I7e4c67c74debf8253479257a1c54d6426a9531d8
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1267
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Michael Blow <mb...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/db1c115e
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/db1c115e
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/db1c115e
Branch: refs/heads/master
Commit: db1c115ec5270fbaf0556a9f9abd6c40978e67a4
Parents: 33af12d
Author: Michael Blow <mb...@apache.org>
Authored: Tue Oct 11 02:29:50 2016 -0400
Committer: Michael Blow <mb...@apache.org>
Committed: Tue Oct 11 00:06:48 2016 -0700
----------------------------------------------------------------------
.../feed-with-external-function.4.sleep.aql | 19 ---------
.../feed-with-external-function.5.pollquery.aql | 33 ++++++++++++++++
.../feed-with-external-function.5.query.aql | 32 ---------------
.../apache/asterix/test/aql/TestExecutor.java | 41 ++++++++++++++++++++
4 files changed, 74 insertions(+), 51 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/db1c115e/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.4.sleep.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.4.sleep.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.4.sleep.aql
deleted file mode 100644
index af2f691..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.4.sleep.aql
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * 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.
- */
-10000
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/db1c115e/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.pollquery.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.pollquery.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.pollquery.aql
new file mode 100644
index 0000000..f095804
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.pollquery.aql
@@ -0,0 +1,33 @@
+/*
+ * 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.
+ */
+/*
+ * Description : Create a feed dataset that uses the feed simulator adapter.
+ The feed simulator simulates feed from a file in the local fs.
+ Associate with the feed an external user-defined function. The UDF
+ finds topics in each tweet. A topic is identified by a #.
+ Begin ingestion and apply external user defined function
+ * Expected Res : Success
+ * Date : 23rd Apr 2013
+ */
+// polltimeoutsecs=30
+use dataverse externallibtest;
+
+for $x in dataset TweetsFeedIngest
+order by $x.id
+return $x
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/db1c115e/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.query.aql
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.query.aql
deleted file mode 100644
index 8879fa8..0000000
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries/feeds/feed-with-external-function/feed-with-external-function.5.query.aql
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.
- */
-/*
- * Description : Create a feed dataset that uses the feed simulator adapter.
- The feed simulator simulates feed from a file in the local fs.
- Associate with the feed an external user-defined function. The UDF
- finds topics in each tweet. A topic is identified by a #.
- Begin ingestion and apply external user defined function
- * Expected Res : Success
- * Date : 23rd Apr 2013
- */
-use dataverse externallibtest;
-
-for $x in dataset TweetsFeedIngest
-order by $x.id
-return $x
http://git-wip-us.apache.org/repos/asf/asterixdb/blob/db1c115e/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
index 08a0342..29c0afd 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/aql/TestExecutor.java
@@ -37,6 +37,7 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
@@ -81,6 +82,10 @@ public class TestExecutor {
private static final Pattern JAVA_BLOCK_COMMENT_PATTERN =
Pattern.compile("/\\*.*\\*/", Pattern.MULTILINE | Pattern.DOTALL);
private static final Pattern REGEX_LINES_PATTERN = Pattern.compile("^(-)?/(.*)/([im]*)$");
+ private static final Pattern POLL_TIMEOUT_PATTERN =
+ Pattern.compile("polltimeoutsecs=(\\d+)(\\D|$)", Pattern.MULTILINE);
+ private static final Pattern POLL_DELAY_PATTERN = Pattern.compile("polldelaysecs=(\\d+)(\\D|$)", Pattern.MULTILINE);
+
private static Method managixExecuteMethod = null;
private static final HashMap<Integer, ITestServer> runningTestServers = new HashMap<>();
@@ -658,6 +663,42 @@ public class TestExecutor {
ResultExtractor.extract(resultStream);
}
break;
+ case "pollquery":
+ // polltimeoutsecs=nnn, polldelaysecs=nnn
+ final Matcher timeoutMatcher = POLL_TIMEOUT_PATTERN.matcher(statement);
+ int timeoutSecs;
+ if (timeoutMatcher.find()) {
+ timeoutSecs = Integer.parseInt(timeoutMatcher.group(1));
+ } else {
+ throw new IllegalArgumentException("ERROR: polltimeoutsecs=nnn must be present in poll file");
+ }
+ final Matcher retryDelayMatcher = POLL_DELAY_PATTERN.matcher(statement);
+ int retryDelaySecs = retryDelayMatcher.find() ? Integer.parseInt(timeoutMatcher.group(1)) : 1;
+ long startTime = System.currentTimeMillis();
+ long limitTime = startTime + TimeUnit.SECONDS.toMillis(timeoutSecs);
+ ctx.setType(ctx.getType().substring("poll".length()));
+ Exception finalException;
+ LOGGER.fine("polling for up to " + timeoutSecs + " seconds w/ " + retryDelaySecs + " second(s) delay");
+ while (true) {
+ try {
+ executeTest(testCaseCtx, ctx, statement, isDmlRecoveryTest, pb, cUnit, queryCount,
+ expectedResultFileCtxs, testFile, actualPath);
+ finalException = null;
+ break;
+ } catch (Exception e) {
+ if ((System.currentTimeMillis() > limitTime)) {
+ finalException = e;
+ break;
+ }
+ LOGGER.fine("sleeping " + retryDelaySecs + " second(s) before polling again");
+ Thread.sleep(TimeUnit.SECONDS.toMillis(retryDelaySecs));
+ }
+ }
+ if (finalException != null) {
+ throw new Exception("Poll limit (" + timeoutSecs + "s) exceeded without obtaining expected result",
+ finalException);
+ }
+ break;
case "query":
case "async":
case "asyncdefer":