[ 
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)

Reply via email to