apache / apache/arrow-java

JVM failed when use gandiva udf with dynamic libraries

Ouverte
#326 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub
Type: bug
Langage dominant
Java
Étoiles
94
Forks
152
Merge moyen
3 j 16 h
PR mergées (30 j)
11

Description

Hi there,

Recently I'm trying to add some UDF with dynamic link libaries. It is fine compiling and running test in cpp, but when I call the udf from java, JVM failed with errors.

Steps to reproduce the issue
1 Prepare dynamic library 'libmytest.so'
```java

// code placeholder
#ifndef MYTEST_H
#define MYTEST_H
#ifdef __cplusplus
extern "C"{
#endif
float testSim();
#ifdef __cplusplus
}
#endif
#endif
```
2 Add simple code for the udf in file 'string_ops.cc'

 
```java

// code placeholder
FORCE_INLINEFORCE_INLINE
gdv_float32 test_sim_binary_binary(gdv_int64 context, const char* left, gdv_int32 left_len, const char* right,                 gdv_int32 right_len) {
float sim = testSim();
return sim;
}
```
 

3 Add function details in the function registry file 'function_registry_string.cc'
```java

// code placeholder
NativeFunction("test_sim", {}, DataTypeVector{binary(),binary()},float32(),
kResultNullIfNull, "sim_binary_binary", NativeFunction::kNeedsContext | NativeFunction::kCanReturnErrors)
```
4 Create test functions

5 Add link to the CMakeLists.txt

5 compile and test

6 write a java demo to call the udf

[hs_err_pid28288.log](hs_err_pid28288.log)

**Environment**: OS:Centos7.4
llvm:7.0.1
jdk:1.8.0_162
arrow:1.0.0
**Reporter**: [Leo89](https://issues.apache.org/jira/browse/ARROW-9624)
#### Original Issue Attachments:
- [hs_err_pid28288.log](https://issues.apache.org/jira/secure/attachment/13008955/hs_err_pid28288.log)

**Note**: *This issue was originally created as [ARROW-9624](https://issues.apache.org/jira/browse/ARROW-9624). Please see the [migration documentation](https://github.com/apache/arrow/issues/14542) for further details.*

Guide de contribution

Ouvrir le guide de contribution

Piste de recherche

Commencez par examiner hs_err_pid28288.log et reproduire l’appel Java à la Gandiva UDF avec libmytest.so. Suivez les modifications de l’UDF native dans string_ops.cc, function_registry_string.cc et CMakeLists.txt, en comparant les chemins C++ et Java. C’est terminé lorsque la démo Java ne provoque plus l’échec de la JVM, tandis que l’UDF de la bibliothèque dynamique reste appelable.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp, java
Domaine
backend
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.