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

    https://github.com/apache/drill/pull/984#discussion_r145515947
  
    --- Diff: 
exec/java-exec/src/test/java/org/apache/drill/test/BaseDirTestWatcher.java ---
    @@ -0,0 +1,184 @@
    +/*
    + * Licensed to the Apache Software Foundation (ASF) under one
    + * or more contributor license agreements.  See the NOTICE file
    + * distributed with this work for additional information
    + * regarding copyright ownership.  The ASF licenses this file
    + * to you under the Apache License, Version 2.0 (the
    + * "License"); you may not use this file except in compliance
    + * with the License.  You may obtain a copy of the License at
    + *
    + * http://www.apache.org/licenses/LICENSE-2.0
    + *
    + * Unless required by applicable law or agreed to in writing, software
    + * distributed under the License is distributed on an "AS IS" BASIS,
    + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    + * See the License for the specific language governing permissions and
    + * limitations under the License.
    + */
    +
    +package org.apache.drill.test;
    +
    +import com.google.common.base.Charsets;
    +import org.apache.commons.io.FileUtils;
    +import org.apache.drill.common.util.TestTools;
    +import org.apache.drill.exec.util.TestUtilities;
    +import org.junit.runner.Description;
    +
    +import java.io.File;
    +import java.io.IOException;
    +
    +public class BaseDirTestWatcher extends DirTestWatcher {
    +  public enum DirType {
    +    ROOT,
    +    TEST_TMP;
    +  }
    +
    +  private File tmpDir;
    +  private File storeDir;
    +  private File dfsTestTmpParentDir;
    +  private File dfsTestTmpDir;
    +  private File rootDir;
    +
    +  public BaseDirTestWatcher() {
    +    super();
    +  }
    +
    +  @Override
    +  protected void starting(Description description) {
    +    super.starting(description);
    +
    +    rootDir = makeSubDir("root");
    +    tmpDir = new File(rootDir, "tmp");
    +    storeDir = new File(rootDir, "store");
    +    dfsTestTmpParentDir = new File(rootDir, "dfsTestTmp");
    +
    +    tmpDir.mkdirs();
    +    storeDir.mkdirs();
    +    dfsTestTmpParentDir.mkdirs();
    +  }
    +
    +  public File getTmpDir() {
    +    return tmpDir;
    +  }
    +
    +  public File getStoreDir() {
    +    return storeDir;
    +  }
    +
    +  public File getDfsTestTmpParentDir() {
    +    return dfsTestTmpParentDir;
    +  }
    +
    +  public File getDfsTestTmpDir() {
    +    return dfsTestTmpDir;
    +  }
    +
    +  public String getDfsTestTmpDirPath() {
    +    return dfsTestTmpDir.getAbsolutePath().replaceAll("/\\./", "/");
    +  }
    +
    +  public File getRootDir() {
    +    return rootDir;
    +  }
    +
    +  public String getRootDirPath() {
    +    return rootDir.getAbsolutePath().replaceAll("/\\./", "/");
    +  }
    +
    +  public void newDfsTestTmpDir() {
    +    dfsTestTmpDir = 
TestUtilities.createTempDir(BaseTestQuery.dirTestWatcher.getDfsTestTmpParentDir());
    +  }
    +
    +  private File getDir(DirType type) {
    +    switch (type) {
    +      case ROOT:
    +        return rootDir;
    +      case TEST_TMP:
    +        return dfsTestTmpDir;
    +      default:
    +        throw new IllegalArgumentException(String.format("Unsupported type 
%s", type));
    +    }
    +  }
    +
    +  public File makeRootSubDir(String relPath) {
    --- End diff --
    
    Here is where we might have a bit of a discussion. Should we represent 
directory paths as:
    
    * Strings (as done here)
    * Java NIO `Path` objects (which Java seems to want to be the new standard)
    * Hadoop `Path` objects (since that is what the Drill file system uses)
    * Good old fashioned Java `File` objects (which, while old, works well in 
common cases)
    
    I would suggest we use `File` for references to file system paths:
    
    * The Java `Path` has the same name as the Hadoop `Path`, causing endless 
confusion.
    * Hadoop `Path` is overkill for simple uses in tests.
    * `String` encourages people to write their own code to join paths by 
concatenating.
    
    The use of `File` keeps things simple and standard. Concatenation is simple.
    
    Other solutions are, of course, possible. We could use `String` and 
replicate the methods on `File` or either of the `Path` classes, say. The point 
is, let's pick a standard and use it everywhere.


---

Reply via email to