drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DRILL-4956) Temporary tables support
Date Tue, 06 Dec 2016 06:13:00 GMT

    [ https://issues.apache.org/jira/browse/DRILL-4956?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15724517#comment-15724517
] 

ASF GitHub Bot commented on DRILL-4956:
---------------------------------------

Github user paul-rogers commented on a diff in the pull request:

    https://github.com/apache/drill/pull/666#discussion_r91012936
  
    --- Diff: exec/java-exec/src/main/java/org/apache/drill/exec/rpc/user/UserSession.java
---
    @@ -207,25 +239,165 @@ public SchemaPlus getDefaultSchema(SchemaPlus rootSchema) {
           return null;
         }
     
    -    final SchemaPlus defaultSchema = SchemaUtilites.findSchema(rootSchema, defaultSchemaPath);
    -
    -    if (defaultSchema == null) {
    -      // If the current schema resolves to null, return root schema as the current default
schema.
    -      return defaultSchema;
    -    }
    -
    -    return defaultSchema;
    +    return SchemaUtilites.findSchema(rootSchema, defaultSchemaPath);
       }
     
       public boolean setSessionOption(String name, String value) {
         return true;
       }
     
    +  /**
    +   * @return unique session identifier
    +   */
    +  public String getUuid() { return uuid; }
    +
    +  /**
    +   * Adds temporary table to temporary tables cache.
    +   *
    +   * @param schema table schema
    +   * @param tableName original table name
    +   * @return generated temporary table name
    +   */
    +  public String registerTemporaryTable(AbstractSchema schema, String tableName) {
    +    return temporaryTablesCache.add(schema, tableName);
    +  }
    +
    +  /**
    +   * Looks for temporary table in temporary tables cache by its name in specified schema.
    +   *
    +   * @param fullSchemaName table full schema name (example, dfs.tmp)
    +   * @param tableName original table name
    +   * @return temporary table name if found, null otherwise
    +   */
    +  public String findTemporaryTable(String fullSchemaName, String tableName) {
    +    return temporaryTablesCache.find(fullSchemaName, tableName);
    +  }
    +
    +  /**
    +   * Before removing temporary table from temporary tables cache,
    +   * checks if table exists physically on disk, if yes, removes it.
    +   *
    +   * @param fullSchemaName full table schema name (example, dfs.tmp)
    +   * @param tableName original table name
    +   * @return true if table was physically removed, false otherwise
    +   */
    +  public boolean removeTemporaryTable(String fullSchemaName, String tableName) {
    +    final AtomicBoolean result = new AtomicBoolean();
    +    temporaryTablesCache.remove(fullSchemaName, tableName, new BiConsumer<AbstractSchema,
String>() {
    +      @Override
    +      public void accept(AbstractSchema schema, String temporaryTableName) {
    +        if (schema.getTable(temporaryTableName) != null) {
    +          schema.dropTable(temporaryTableName);
    +          result.set(true);
    +        }
    +      }
    +    });
    +    return result.get();
    +  }
    +
       private String getProp(String key) {
         return properties.get(key) != null ? properties.get(key) : "";
       }
     
       private void setProp(String key, String value) {
         properties.put(key, value);
       }
    +
    +  /**
    +   * Temporary tables cache stores data by full schema name (schema and workspace separated
by dot
    +   * (example: dfs.tmp)) as key, and map of generated temporary tables names
    +   * and its schemas represented by {@link AbstractSchema} as values.
    +   * Schemas represented by {@link AbstractSchema} are used to drop temporary tables.
    +   * Generated temporary tables consists of original table name and unique session id.
    +   * Cache is represented by {@link ConcurrentMap} so if is thread-safe and can be used
    +   * in multi-threaded environment.
    +   *
    +   * Temporary tables cache is used to find temporary table by its name and schema,
    +   * to drop all existing temporary tables on session close
    +   * or remove temporary table from cache on user demand.
    +   */
    +  public static class TemporaryTablesCache {
    --- End diff --
    
    Maybe pull this out as top-level class so it can be used as suggested above.


> Temporary tables support
> ------------------------
>
>                 Key: DRILL-4956
>                 URL: https://issues.apache.org/jira/browse/DRILL-4956
>             Project: Apache Drill
>          Issue Type: Improvement
>    Affects Versions: 1.8.0
>            Reporter: Arina Ielchiieva
>            Assignee: Paul Rogers
>              Labels: doc-impacting
>             Fix For: Future
>
>
> Link to design doc - https://docs.google.com/document/d/1gSRo_w6q2WR5fPx7SsQ5IaVmJXJ6xCOJfYGyqpVOC-g/edit



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message