Hi Ekaterina,

I use 4.0.1.
But as I said I added a jar in classpath (/usr/share/cassandra/lib/ folder
on every node) and I see that the jar is loaded in the classpath from the
Cassandra command line. And I have "enable_user_defined_functions: true"
and "enable_user_defined_functions_threads: false" in cassandra.yaml.
So I don't see what is missing or not done properly.

Best regards,
Sébastien.

Le mer. 6 avr. 2022 à 16:03, Ekaterina Dimitrova <e.dimitr...@gmail.com> a
écrit :

> Hi Sebastian,
> Do you use the latest 4.0.3 version? Those options were added in 4.0.2 I
> believe, so if you try them with an earlier version - below message is what
> you would get as they didn’t exist.
>
> Best regards,
> Ekaterina
>
> On Wed, 6 Apr 2022 at 9:53, Sébastien Rebecchi <srebec...@kameleoon.com>
> wrote:
>
>> Hi Benjamin, Hi everybody,
>>
>> I found in the documentation that we should add "allow_insecure_udfs:
>> true" and optionally "allow_extra_insecure_udfs: true" so that
>> "enable_user_defined_functions_threads: false" is really taken into account
>> (I understood like that). That would explain why my UDF still does not run
>> even with "enable_user_defined_functions_threads: false". Found in
>> https://github.com/apache/cassandra/blob/cassandra-4.0/NEWS.txt
>>
>> So I tried to add "allow_insecure_udfs: true" and
>> "allow_extra_insecure_udfs: true" in cassandra.yaml, but then Cassandra
>> failed to restart and I got that error in logs "Exception
>> (org.apache.cassandra.exceptions.ConfigurationException) encountered during
>> startup: Invalid yaml. Please remove properties [allow_insecure_udfs,
>> allow_extra_insecure_udfs] from your cassandra.yaml".
>>
>> Should I understand that we can activate that 2 extra confs only by
>> changing source code? That would be really disappointing :( And if no, then
>> how to activate all UDF possibilities from cassandra.yaml please?
>>
>> Thanks in advance,
>>
>> Sébastien.
>>
>>
>> Le mar. 5 avr. 2022 à 10:36, Benjamin Lerer <ble...@apache.org> a écrit :
>>
>>> Unfortunately, I do not have much time for doing some digging. Sorry for
>>> that :-(
>>> You should look at JavaBasedUDFunction and  UDFExecutorServic.
>>>
>>> Le lun. 4 avr. 2022 à 17:25, Sébastien Rebecchi <srebec...@kameleoon.com>
>>> a écrit :
>>>
>>>> Hi!
>>>> Do you have any more ideas for me?
>>>> Cordially,
>>>> Sébastien.
>>>>
>>>> Le lun. 28 mars 2022 à 16:39, Sébastien Rebecchi <
>>>> srebec...@kameleoon.com> a écrit :
>>>>
>>>>> Unfortunately, it is not working even with
>>>>> "enable_user_defined_functions_threads: false" in cassandra.yaml :/
>>>>> Is there any way to check the running configuration?
>>>>>
>>>>> Le lun. 28 mars 2022 à 15:35, Benjamin Lerer <ble...@apache.org> a
>>>>> écrit :
>>>>>
>>>>>> I do not think that allowing to customize UDF classes whitelist has
>>>>>> been discussed before. Feel free to open a JIRA ticket :-)
>>>>>> I have some plans to revisit how we securise UDFs as the current
>>>>>> threading approach has some impact in terms of latency. That can be a 
>>>>>> good
>>>>>> opportunity to look into providing more flexibility.
>>>>>>
>>>>>> Le lun. 28 mars 2022 à 15:00, Sébastien Rebecchi <
>>>>>> srebec...@kameleoon.com> a écrit :
>>>>>>
>>>>>>> Thanks you very much! I will try that.
>>>>>>> As you know, would it be a long-terms solution? Or is there any plan
>>>>>>> to add the possibility to customize UDF classes whitelist?
>>>>>>>
>>>>>>> Le lun. 28 mars 2022 à 14:31, Benjamin Lerer <ble...@apache.org> a
>>>>>>> écrit :
>>>>>>>
>>>>>>>> Is there a way to customize that default behaviour?
>>>>>>>>
>>>>>>>>
>>>>>>>> Looking at JavaBasedUDFunction quickly it seems that the
>>>>>>>> ClassLoader is only used when you use the UDFExecutorService to
>>>>>>>> execute your UDFs. You can try to disable it using
>>>>>>>> "enable_user_defined_functions_threads: false" and see if it works.
>>>>>>>> Now that also means that you have to ensure that only trusted
>>>>>>>> persons can create UDF or UDA as it removes all safety mechanisms.
>>>>>>>>
>>>>>>>>
>>>>>>>> Le lun. 28 mars 2022 à 13:23, Sébastien Rebecchi <
>>>>>>>> srebec...@kameleoon.com> a écrit :
>>>>>>>>
>>>>>>>>> Hi Benjamin,
>>>>>>>>>
>>>>>>>>> Thanks for the answer.
>>>>>>>>> Is there a way to customize that default behaviour? If no, could
>>>>>>>>> you indicate where to find this class loader in the github of 
>>>>>>>>> Cassandra
>>>>>>>>> please?
>>>>>>>>>
>>>>>>>>> Le lun. 28 mars 2022 à 12:40, Benjamin Lerer <ble...@apache.org>
>>>>>>>>> a écrit :
>>>>>>>>>
>>>>>>>>>> Hi Sébastien,
>>>>>>>>>>
>>>>>>>>>> Cassandra uses a special classloader for UDFs that limit which
>>>>>>>>>> classes can be used.
>>>>>>>>>> You cannot rely on non-JDK classes for UDFs and some of the JDK
>>>>>>>>>> packages like the IO package for example cannot be used.
>>>>>>>>>> The goal is simply to ensure that UDFs cannot compromise the
>>>>>>>>>> server security.
>>>>>>>>>>
>>>>>>>>>> Le lun. 28 mars 2022 à 11:31, Sébastien Rebecchi <
>>>>>>>>>> srebec...@kameleoon.com> a écrit :
>>>>>>>>>>
>>>>>>>>>>> Hello,
>>>>>>>>>>>
>>>>>>>>>>> I am trying to create a UDF based on custom methods.
>>>>>>>>>>> So I set enable_user_defined_functions to true and added a jar
>>>>>>>>>>> in "/usr/share/cassandra/lib/" folder on every node, restarted the 
>>>>>>>>>>> nodes
>>>>>>>>>>> and I can see from the command line that the jar is indeed used (in 
>>>>>>>>>>> the
>>>>>>>>>>> classpath with -cp).
>>>>>>>>>>>
>>>>>>>>>>> But when i create the UDF I got that error:
>>>>>>>>>>>
>>>>>>>>>>> CREATE OR REPLACE FUNCTION blobToJson (input blob) RETURNS NULL
>>>>>>>>>>> ON NULL INPUT RETURNS text LANGUAGE java AS 'return
>>>>>>>>>>> com.kameleoon.visit.Visit.writeToJson(com.kameleoon.visit.Visit.readFromByteBuffer(input));';
>>>>>>>>>>> InvalidRequest: Error from server: code=2200 [Invalid query]
>>>>>>>>>>> message="Java source compilation failed:
>>>>>>>>>>> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type
>>>>>>>>>>> Line 1: com.kameleoon.visit.Visit cannot be resolved to a type
>>>>>>>>>>>
>>>>>>>>>>> Of course the class com.kameleoon.visit.Visit does exist in the
>>>>>>>>>>> jar and the jar has read rights to every user (chmod 444). So I can 
>>>>>>>>>>> not
>>>>>>>>>>> find the reason.
>>>>>>>>>>>
>>>>>>>>>>> versions are: [cqlsh 6.0.0 | Cassandra 4.0.1 | CQL spec 3.4.5 |
>>>>>>>>>>> Native protocol v5]
>>>>>>>>>>>
>>>>>>>>>>> Any help would be appreciated!
>>>>>>>>>>>
>>>>>>>>>>> Thanks!
>>>>>>>>>>>
>>>>>>>>>>> Sébastien.
>>>>>>>>>>>
>>>>>>>>>>

Reply via email to