You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/11/06 14:57:13 UTC

cassandra git commit: Make UFTest.testAmokUDF non-flappy

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-3.0 57d56bd1c -> 0b83c188b


Make UFTest.testAmokUDF non-flappy

patch by Robert Stupp; reviewed by Sylvain Lebresne for CASSANDRA-10662


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0b83c188
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0b83c188
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0b83c188

Branch: refs/heads/cassandra-3.0
Commit: 0b83c188b9e2d0d975258e41e5fc16a478330fc9
Parents: 57d56bd
Author: Robert Stupp <sn...@snazy.de>
Authored: Fri Nov 6 14:56:26 2015 +0100
Committer: Robert Stupp <sn...@snazy.de>
Committed: Fri Nov 6 14:56:26 2015 +0100

----------------------------------------------------------------------
 .../cql3/validation/entities/UFTest.java        | 99 +++++++++++---------
 1 file changed, 55 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0b83c188/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
index 78e85dc..c0d8902 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UFTest.java
@@ -2346,52 +2346,63 @@ public class UFTest extends CQLTester
 
         long udfWarnTimeout = DatabaseDescriptor.getUserDefinedFunctionWarnTimeout();
         long udfFailTimeout = DatabaseDescriptor.getUserDefinedFunctionFailTimeout();
-        try
+        int maxTries = 5;
+        for (int i = 1; i <= maxTries; i++)
         {
-            // short timeout
-            DatabaseDescriptor.setUserDefinedFunctionWarnTimeout(1);
-            DatabaseDescriptor.setUserDefinedFunctionFailTimeout(100);
-            // don't kill the unit test... - default policy is "die"
-            DatabaseDescriptor.setUserFunctionTimeoutPolicy(Config.UserFunctionTimeoutPolicy.ignore);
+            try
+            {
+                // short timeout
+                DatabaseDescriptor.setUserDefinedFunctionWarnTimeout(10);
+                DatabaseDescriptor.setUserDefinedFunctionFailTimeout(250);
+                // don't kill the unit test... - default policy is "die"
+                DatabaseDescriptor.setUserFunctionTimeoutPolicy(Config.UserFunctionTimeoutPolicy.ignore);
 
-            ClientWarn.captureWarnings();
-            String fName = createFunction(KEYSPACE_PER_TEST, "double",
-                                          "CREATE OR REPLACE FUNCTION %s(val double) " +
-                                          "RETURNS NULL ON NULL INPUT " +
-                                          "RETURNS double " +
-                                          "LANGUAGE JAVA\n" +
-                                          "AS 'long t=System.currentTimeMillis()+20; while (t>System.currentTimeMillis()) { }; return 0d;'");
-            execute("SELECT " + fName + "(dval) FROM %s WHERE key=1");
-            List<String> warnings = ClientWarn.getWarnings();
-            Assert.assertNotNull(warnings);
-            Assert.assertFalse(warnings.isEmpty());
-            ClientWarn.resetWarnings();
-
-            // Java UDF
-
-            fName = createFunction(KEYSPACE_PER_TEST, "double",
-                                   "CREATE OR REPLACE FUNCTION %s(val double) " +
-                                   "RETURNS NULL ON NULL INPUT " +
-                                   "RETURNS double " +
-                                   "LANGUAGE JAVA\n" +
-                                   "AS 'long t=System.currentTimeMillis()+300; while (t>System.currentTimeMillis()) { }; return 0d;';");
-            assertInvalidMessage("ran longer than 100ms", "SELECT " + fName + "(dval) FROM %s WHERE key=1");
-
-            // Javascript UDF
-
-            fName = createFunction(KEYSPACE_PER_TEST, "double",
-                                   "CREATE OR REPLACE FUNCTION %s(val double) " +
-                                   "RETURNS NULL ON NULL INPUT " +
-                                   "RETURNS double " +
-                                   "LANGUAGE JAVASCRIPT\n" +
-                                   "AS 'var t=java.lang.System.currentTimeMillis()+300; while (t>java.lang.System.currentTimeMillis()) { }; 0;';");
-            assertInvalidMessage("ran longer than 100ms", "SELECT " + fName + "(dval) FROM %s WHERE key=1");
-        }
-        finally
-        {
-            // reset to defaults
-            DatabaseDescriptor.setUserDefinedFunctionWarnTimeout(udfWarnTimeout);
-            DatabaseDescriptor.setUserDefinedFunctionFailTimeout(udfFailTimeout);
+                ClientWarn.captureWarnings();
+                String fName = createFunction(KEYSPACE_PER_TEST, "double",
+                                              "CREATE OR REPLACE FUNCTION %s(val double) " +
+                                              "RETURNS NULL ON NULL INPUT " +
+                                              "RETURNS double " +
+                                              "LANGUAGE JAVA\n" +
+                                              "AS 'long t=System.currentTimeMillis()+110; while (t>System.currentTimeMillis()) { }; return 0d;'");
+                execute("SELECT " + fName + "(dval) FROM %s WHERE key=1");
+                List<String> warnings = ClientWarn.getWarnings();
+                Assert.assertNotNull(warnings);
+                Assert.assertFalse(warnings.isEmpty());
+                ClientWarn.resetWarnings();
+
+                // Java UDF
+
+                fName = createFunction(KEYSPACE_PER_TEST, "double",
+                                       "CREATE OR REPLACE FUNCTION %s(val double) " +
+                                       "RETURNS NULL ON NULL INPUT " +
+                                       "RETURNS double " +
+                                       "LANGUAGE JAVA\n" +
+                                       "AS 'long t=System.currentTimeMillis()+500; while (t>System.currentTimeMillis()) { }; return 0d;';");
+                assertInvalidMessage("ran longer than 250ms", "SELECT " + fName + "(dval) FROM %s WHERE key=1");
+
+                // Javascript UDF
+
+                fName = createFunction(KEYSPACE_PER_TEST, "double",
+                                       "CREATE OR REPLACE FUNCTION %s(val double) " +
+                                       "RETURNS NULL ON NULL INPUT " +
+                                       "RETURNS double " +
+                                       "LANGUAGE JAVASCRIPT\n" +
+                                       "AS 'var t=java.lang.System.currentTimeMillis()+500; while (t>java.lang.System.currentTimeMillis()) { }; 0;';");
+                assertInvalidMessage("ran longer than 250ms", "SELECT " + fName + "(dval) FROM %s WHERE key=1");
+
+                return;
+            }
+            catch (Error | RuntimeException e)
+            {
+                if (i == maxTries)
+                    throw e;
+            }
+            finally
+            {
+                // reset to defaults
+                DatabaseDescriptor.setUserDefinedFunctionWarnTimeout(udfWarnTimeout);
+                DatabaseDescriptor.setUserDefinedFunctionFailTimeout(udfFailTimeout);
+            }
         }
     }
 }