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