[
https://issues.apache.org/jira/browse/DRILL-5533?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16022515#comment-16022515
]
ASF GitHub Bot commented on DRILL-5533:
---------------------------------------
Github user arina-ielchiieva commented on a diff in the pull request:
https://github.com/apache/drill/pull/843#discussion_r118186385
--- Diff:
exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java
---
@@ -74,41 +70,43 @@ public String getClassName() {
* @return the imports of this class (for java code gen)
*/
public List<String> getImports() {
- checkInit();
+ loadFunctionBody();
return imports;
}
/**
- * @param methodName
+ * @param methodName method name
* @return the content of the method (for java code gen inlining)
*/
public String getMethod(String methodName) {
- checkInit();
+ loadFunctionBody();
return methods.get(methodName);
}
- private void checkInit() {
- if (ready) {
+ /**
+ * Loads function body: methods (for instance, eval, setup, reset) and
imports.
+ * Loading is done once per class instance upon first function
invocation.
+ * Double-checked locking is used to avoid concurrency issues
+ * when two threads are trying to load the function body at the same
time.
+ */
+ private void loadFunctionBody() {
+ if (isLoaded) {
return;
}
synchronized (this) {
- if (ready) {
+ if (isLoaded) {
return;
}
- // get function body.
-
+ logger.debug("Getting function body for the {}", className);
--- End diff --
Done.
> Fix flag assignment in FunctionInitializer.checkInit() method
> -------------------------------------------------------------
>
> Key: DRILL-5533
> URL: https://issues.apache.org/jira/browse/DRILL-5533
> Project: Apache Drill
> Issue Type: Bug
> Affects Versions: 1.10.0
> Reporter: Arina Ielchiieva
> Assignee: Arina Ielchiieva
> Priority: Minor
>
> FunctionInitializer.checkInit() method uses DCL to ensure that function body
> is loaded only once. But flag parameter is never updated and all threads are
> entering synchronized block.
> Also FunctionInitializer.getImports() always returns empty list.
> https://github.com/apache/drill/blob/3e8b01d5b0d3013e3811913f0fd6028b22c1ac3f/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/FunctionInitializer.java
> Changes:
> 1. Fix DCL in FunctionInitializer.checkInit() method (update flag parameter
> when function body is loaded).
> 2. Fix ImportGrabber.getImports() method to return list with imports.
> 3. Add unit tests for FunctionInitializer.
> 4. Minor refactoring (rename methods, add javadoc).
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)