[
https://issues.apache.org/jira/browse/CASSANDRA-8289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14212994#comment-14212994
]
Robert Stupp edited comment on CASSANDRA-8289 at 11/14/14 10:44 PM:
--------------------------------------------------------------------
Also added some functionality to ensure that a UDF
* is thread-safe (execute one UDF concurrently)
* is deterministic (execute one UDF several times)
As a side effect people can measure timings of UDF invocations (using metrics
with {{System.nanoTime}} - not a micro benchmark).
Has anyone time and is in the mood to take a look at it? Would really
appreciate any feedback about it. Code is on
[github|https://github.com/snazy/cassandra/tree/8289-udftest] at
{{tools/udftest}}.
In the end people should be able to build a JUnit/TestNG test that does this
test automatically. (JUnit/TestNG is not required by the code - but can be used
for assertions.) A unit test for this one is {{UDFTestTest}} with some code
examples in it.
Technically the implementation takes C* as a dependency, uses the CQL parser
code to produce a {{CreateFunctionStatement}} instance and lets it return an
instance to {{UDFunction}}.
was (Author: snazy):
Also added some functionality to ensure that a UDF
* is thread-safe (execute one UDF concurrently)
* is deterministic (execute one UDF several times)
As a side effect people can measure timings of UDF invocations (using metrics
with {{System.nanoTime}} - not a micro benchmark).
Has anyone time and is in the mood to take a look at it? Would really
appreciate any feedback about it. Code is on
[github|https://github.com/snazy/cassandra/tree/8289-udftest] at
{{tools/udftest}}.
In the end people should be able to build a JUnit/TestNG test that does this
test automatically. (JUnit/TestNG is not required by the code - but can be used
for assertions.) A unit test for this one is {{UDFTestTest}} with some code
examples in it.
Technically the implementation takes C* as a dependency, uses the CQL parser
code to produce a {{CreateFunctionStatement}} instance and lets it return an
instance to {{UDFunction}}.
> Allow users to debug/test UDF
> -----------------------------
>
> Key: CASSANDRA-8289
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8289
> Project: Cassandra
> Issue Type: New Feature
> Reporter: Robert Stupp
> Assignee: Robert Stupp
> Labels: udf
> Fix For: 3.0
>
>
> Currently it's not possible to execute unit tests against UDFs nor is it
> possible to debug them.
> Idea is to provide some kind of minimalistic "framework" to execute at least
> scalar UDFs from a unit test.
> Basically that UDF-executor would take the information that 'CREATE FUNCTION'
> takes, compiles that UDF and allows the user to call it using plain java
> calls.
> In case of the Java language it could also generate Java source files to
> enable users to set breakpoints.
> It could also check for timeouts to identify e.g. "endless loop" scenarios or
> do some byte code analysis to check for "evil" package usage.
> For example:
> {code}
> import org.apache.cassandra.udfexec.*
> public class MyUnitTest {
> @Test
> public void testIt() {
> UDFExec sinExec = UDFExec.compile("sin", "java",
> Double.class, // return type
> Double.class // argument type(s)
> );
> sinExec.call(2.0d);
> sinExec.call(null);
> }
> }
> {code}
> Note: this one is not intended to do some "magic" to start a debugger on a C*
> node and debug it there.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)