drill-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From arina-ielchiieva <...@git.apache.org>
Subject [GitHub] drill pull request #660: DRILL-5052: Option to debug generated Java code usi...
Date Thu, 08 Dec 2016 15:27:21 GMT
Github user arina-ielchiieva commented on a diff in the pull request:

    https://github.com/apache/drill/pull/660#discussion_r91531999
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/compile/CodeCompiler.java
---
    @@ -33,36 +32,71 @@
     import com.google.common.cache.LoadingCache;
     import com.google.common.collect.Lists;
     
    +/**
    + * Global code compiler mechanism shared by all threads and operators.
    + * Holds a single cache of generated code (keyed by code source) to
    + * prevent compiling identical code multiple times. Supports both
    + * the byte-code merging and plain-old Java methods of code
    + * generation and compilation.
    + */
    +
     public class CodeCompiler {
    -//  private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(CodeCompiler.class);
    +
    +  public static final String COMPILE_BASE = "drill.exec.compile";
    +  String MAX_LOADING_CACHE_SIZE_CONFIG = COMPILE_BASE + ".cache_max_size";
     
       private final ClassTransformer transformer;
    +  private final ClassBuilder classBuilder;
    +
    +  /**
    +   * Google Guava loading cache that defers creating a cache
    +   * entry until first needed. Creation is done in a thread-safe
    +   * way: if two threads try to create the same class at the same
    +   * time, the first does the work, the second waits for the first
    +   * to complete, then grabs the new entry.
    +   */
    +
       private final LoadingCache<CodeGenerator<?>, GeneratedClassEntry> cache;
    -  private final DrillConfig config;
    -  private final OptionManager optionManager;
     
       public CodeCompiler(final DrillConfig config, final OptionManager optionManager) {
    -    transformer = new ClassTransformer(optionManager);
    -    final int cacheMaxSize = config.getInt(ExecConstants.MAX_LOADING_CACHE_SIZE_CONFIG);
    +    transformer = new ClassTransformer(config, optionManager);
    +    classBuilder = new ClassBuilder(config, optionManager);
    +    final int cacheMaxSize = config.getInt(MAX_LOADING_CACHE_SIZE_CONFIG);
         cache = CacheBuilder.newBuilder()
             .maximumSize(cacheMaxSize)
             .build(new Loader());
    -    this.optionManager = optionManager;
    -    this.config = config;
       }
     
    +  /**
    +   * Create a single instance of the generated class.
    +   *
    +   * @param cg
    +   * @return
    +   * @throws ClassTransformationException
    +   * @throws IOException
    +   */
       @SuppressWarnings("unchecked")
    -  public <T> T getImplementationClass(final CodeGenerator<?> cg) throws ClassTransformationException,
IOException {
    -    return (T) getImplementationClass(cg, 1).get(0);
    +  public <T> T createInstance(final CodeGenerator<?> cg) throws ClassTransformationException,
IOException {
    +    return (T) createInstances(cg, 1).get(0);
       }
     
    +  /**
    +   * Create multiple instances of the generated class.
    +   *
    +   * @param cg
    +   * @param count
    +   * @return
    +   * @throws ClassTransformationException
    +   * @throws IOException
    --- End diff --
    
    Description for param, return and exceptions?


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastructure@apache.org or file a JIRA ticket
with INFRA.
---

Mime
View raw message