http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java 
b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
index 45a80e3..0e3035a 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/Driver.java
@@ -1493,7 +1493,8 @@ public class Driver implements CommandProcessor {
         break;
       default: return null;
     }
-    return (t != null && !t.isTemporary() && AcidUtils.isMmTable(t)) ? t : 
null;
+    return (t != null && !t.isTemporary()
+        && MetaStoreUtils.isMmTable(t.getParameters())) ? t : null;
   }
 
   private CommandProcessorResponse rollback(CommandProcessorResponse cpr) {

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java 
b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
index 70b129e..5705145 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/io/AcidUtils.java
@@ -36,6 +36,7 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.conf.HiveConf.ConfVars;
 import org.apache.hadoop.hive.metastore.api.DataOperationType;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
+import org.apache.hadoop.hive.metastore.MetaStoreUtils;
 import org.apache.hadoop.hive.metastore.TransactionalValidationListener;
 import org.apache.hadoop.hive.ql.ErrorMsg;
 import org.apache.hadoop.hive.ql.metadata.Table;
@@ -1082,12 +1083,6 @@ public class AcidUtils {
     return tableIsTransactional != null && 
tableIsTransactional.equalsIgnoreCase("true");
   }
 
-  public static boolean isMmTable(Table table) {
-    // TODO: perhaps it should be a 3rd value for 'transactional'?
-    String value = table.getProperty(hive_metastoreConstants.TABLE_IS_MM);
-    return value != null && value.equalsIgnoreCase("true");
-  }
-
   /**
    * Sets the acidOperationalProperties in the configuration object argument.
    * @param conf Mutable configuration object

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java 
b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
index f3609df..10d3f0e 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Hive.java
@@ -1478,7 +1478,7 @@ public class Hive {
       boolean hasFollowingStatsTask, Long mmWriteId) throws HiveException {
     Table tbl = getTable(tableName);
     boolean isMmTableWrite = (mmWriteId != null);
-    Preconditions.checkState(isMmTableWrite == AcidUtils.isMmTable(tbl));
+    Preconditions.checkState(isMmTableWrite == 
MetaStoreUtils.isMmTable(tbl.getParameters()));
     loadPartition(loadPath, tbl, partSpec, replace, inheritTableSpecs,
         isSkewedStoreAsSubdir, isSrcLocal, isAcid, hasFollowingStatsTask, 
mmWriteId);
     if (isMmTableWrite) {

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
----------------------------------------------------------------------
diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java 
b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
index a0ce3a6..fa7c29b 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
@@ -6569,7 +6569,7 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
       }
 
       boolean isNonNativeTable = dest_tab.isNonNative();
-      isMmTable = AcidUtils.isMmTable(dest_tab);
+      isMmTable = MetaStoreUtils.isMmTable(dest_tab.getParameters());
       if (isNonNativeTable || isMmTable) {
         queryTmpdir = dest_path;
       } else {
@@ -6642,7 +6642,7 @@ public class SemanticAnalyzer extends 
BaseSemanticAnalyzer {
       dest_path = new Path(tabPath.toUri().getScheme(), tabPath.toUri()
           .getAuthority(), partPath.toUri().getPath());
 
-      isMmTable = AcidUtils.isMmTable(dest_tab);
+      isMmTable = MetaStoreUtils.isMmTable(dest_tab.getParameters());
       queryTmpdir = isMmTable ? dest_path : ctx.getTempDirForPath(dest_path);
       Utilities.LOG14535.info("createFS for partition specifying " + 
queryTmpdir + " from " + dest_path);
       table_desc = Utilities.getTableDesc(dest_tab);

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java
----------------------------------------------------------------------
diff --git 
a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java 
b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java
index 4d6e24e..92d9f28 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/txn/compactor/CompactorThread.java
@@ -65,7 +65,6 @@ abstract class CompactorThread extends Thread implements 
MetaStoreThread {
   @Override
   public void setThreadId(int threadId) {
     this.threadId = threadId;
-
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java
----------------------------------------------------------------------
diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java 
b/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java
index a7ff9a3..0d177be 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/io/TestAcidUtils.java
@@ -33,10 +33,10 @@ import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.metastore.api.hive_metastoreConstants;
 import org.apache.hadoop.hive.ql.io.AcidUtils.AcidOperationalProperties;
 import org.apache.hadoop.hive.ql.io.orc.TestInputOutputFormat;
-import org.apache.hadoop.hive.ql.io.orc.TestInputOutputFormat.MockFile;
-import org.apache.hadoop.hive.ql.io.orc.TestInputOutputFormat.MockFileSystem;
-import org.apache.hadoop.hive.ql.io.orc.TestInputOutputFormat.MockPath;
 import org.apache.hadoop.hive.shims.HadoopShims.HdfsFileStatusWithId;
+import org.apache.hive.common.util.MockFileSystem;
+import org.apache.hive.common.util.MockFileSystem.MockFile;
+import org.apache.hive.common.util.MockFileSystem.MockPath;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -179,7 +179,7 @@ public class TestAcidUtils {
         new MockFile("mock:/tbl/part1/delta_050_100/bucket_0", 0, new byte[0]),
         new MockFile("mock:/tbl/part1/delta_101_101/bucket_0", 0, new 
byte[0]));
     AcidUtils.Directory dir =
-        AcidUtils.getAcidState(new TestInputOutputFormat.MockPath(fs,
+        AcidUtils.getAcidState(new MockPath(fs,
             "mock:/tbl/part1"), conf, new ValidReadTxnList("100:" + 
Long.MAX_VALUE + ":"));
     assertEquals(null, dir.getBaseDirectory());
     List<FileStatus> obsolete = dir.getObsolete();
@@ -221,7 +221,7 @@ public class TestAcidUtils {
         new MockFile("mock:/tbl/part1/delta_050_105/bucket_0", 0, new byte[0]),
         new MockFile("mock:/tbl/part1/delta_90_120/bucket_0", 0, new byte[0]));
     AcidUtils.Directory dir =
-        AcidUtils.getAcidState(new TestInputOutputFormat.MockPath(fs,
+        AcidUtils.getAcidState(new MockPath(fs,
             "mock:/tbl/part1"), conf, new ValidReadTxnList("100:" + 
Long.MAX_VALUE + ":"));
     assertEquals("mock:/tbl/part1/base_49", dir.getBaseDirectory().toString());
     List<FileStatus> obsolete = dir.getObsolete();
@@ -517,7 +517,7 @@ public class TestAcidUtils {
         new MockFile("mock:/tbl/part1/delete_delta_050_105/bucket_0", 0, new 
byte[0]),
         new MockFile("mock:/tbl/part1/delete_delta_110_110/bucket_0", 0, new 
byte[0]));
     AcidUtils.Directory dir =
-        AcidUtils.getAcidState(new TestInputOutputFormat.MockPath(fs,
+        AcidUtils.getAcidState(new MockPath(fs,
             "mock:/tbl/part1"), conf, new ValidReadTxnList("100:" + 
Long.MAX_VALUE + ":"));
     assertEquals("mock:/tbl/part1/base_49", dir.getBaseDirectory().toString());
     List<FileStatus> obsolete = dir.getObsolete();

http://git-wip-us.apache.org/repos/asf/hive/blob/70299dc4/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
----------------------------------------------------------------------
diff --git 
a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java 
b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
index 2c1bb6f..28a4f9d 100644
--- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
+++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestInputOutputFormat.java
@@ -21,10 +21,7 @@ import static org.junit.Assert.*;
 
 import java.io.DataInput;
 import java.io.DataOutput;
-import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.security.PrivilegedExceptionAction;
 import java.sql.Date;
 import java.sql.Timestamp;
@@ -32,27 +29,16 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
-import java.util.Map;
 import java.util.Properties;
-import java.util.Set;
 import java.util.TimeZone;
-import java.util.TreeSet;
 
 import org.apache.commons.codec.binary.Base64;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.BlockLocation;
-import org.apache.hadoop.fs.FSDataInputStream;
 import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FSInputStream;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.LocatedFileStatus;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.fs.RemoteIterator;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.conf.HiveConf;
@@ -113,7 +99,11 @@ import org.apache.hadoop.mapred.OutputFormat;
 import org.apache.hadoop.mapred.RecordWriter;
 import org.apache.hadoop.mapred.Reporter;
 import org.apache.hadoop.security.UserGroupInformation;
-import org.apache.hadoop.util.Progressable;
+import org.apache.hive.common.util.MockFileSystem;
+import org.apache.hive.common.util.MockFileSystem.MockBlock;
+import org.apache.hive.common.util.MockFileSystem.MockFile;
+import org.apache.hive.common.util.MockFileSystem.MockOutputStream;
+import org.apache.hive.common.util.MockFileSystem.MockPath;
 import org.apache.orc.OrcProto;
 import org.junit.Before;
 import org.junit.Rule;
@@ -921,534 +911,6 @@ public class TestInputOutputFormat {
         null, null, true);
   }
 
-  public static class MockBlock {
-    int offset;
-    int length;
-    final String[] hosts;
-
-    public MockBlock(String... hosts) {
-      this.hosts = hosts;
-    }
-
-    public void setOffset(int offset) {
-      this.offset = offset;
-    }
-
-    public void setLength(int length) {
-      this.length = length;
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("block{offset: ");
-      buffer.append(offset);
-      buffer.append(", length: ");
-      buffer.append(length);
-      buffer.append(", hosts: [");
-      for(int i=0; i < hosts.length; i++) {
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(hosts[i]);
-      }
-      buffer.append("]}");
-      return buffer.toString();
-    }
-  }
-
-  public static class MockFile {
-    final Path path;
-    int blockSize;
-    int length;
-    MockBlock[] blocks;
-    byte[] content;
-
-    public MockFile(String path, int blockSize, byte[] content,
-                    MockBlock... blocks) {
-      this.path = new Path(path);
-      this.blockSize = blockSize;
-      this.blocks = blocks;
-      this.content = content;
-      this.length = content.length;
-      int offset = 0;
-      for(MockBlock block: blocks) {
-        block.offset = offset;
-        block.length = Math.min(length - offset, blockSize);
-        offset += block.length;
-      }
-    }
-
-    @Override
-    public int hashCode() {
-      return path.hashCode() + 31 * length;
-    }
-
-    @Override
-    public boolean equals(final Object obj) {
-      if (!(obj instanceof MockFile)) { return false; }
-      return ((MockFile) obj).path.equals(this.path) && ((MockFile) 
obj).length == this.length;
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("mockFile{path: ");
-      buffer.append(path.toString());
-      buffer.append(", blkSize: ");
-      buffer.append(blockSize);
-      buffer.append(", len: ");
-      buffer.append(length);
-      buffer.append(", blocks: [");
-      for(int i=0; i < blocks.length; i++) {
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(blocks[i]);
-      }
-      buffer.append("]}");
-      return buffer.toString();
-    }
-  }
-
-  static class MockInputStream extends FSInputStream {
-    final MockFile file;
-    int offset = 0;
-
-    public MockInputStream(MockFile file) throws IOException {
-      this.file = file;
-    }
-
-    @Override
-    public void seek(long offset) throws IOException {
-      this.offset = (int) offset;
-    }
-
-    @Override
-    public long getPos() throws IOException {
-      return offset;
-    }
-
-    @Override
-    public boolean seekToNewSource(long l) throws IOException {
-      return false;
-    }
-
-    @Override
-    public int read() throws IOException {
-      if (offset < file.length) {
-        return file.content[offset++] & 0xff;
-      }
-      return -1;
-    }
-  }
-
-  public static class MockPath extends Path {
-    private final FileSystem fs;
-    public MockPath(FileSystem fs, String path) {
-      super(path);
-      this.fs = fs;
-    }
-    @Override
-    public FileSystem getFileSystem(Configuration conf) {
-      return fs;
-    }
-  }
-
-  public static class MockOutputStream extends FSDataOutputStream {
-    private final MockFile file;
-
-    public MockOutputStream(MockFile file) throws IOException {
-      super(new DataOutputBuffer(), null);
-      this.file = file;
-    }
-
-    /**
-     * Set the blocks and their location for the file.
-     * Must be called after the stream is closed or the block length will be
-     * wrong.
-     * @param blocks the list of blocks
-     */
-    public void setBlocks(MockBlock... blocks) {
-      file.blocks = blocks;
-      int offset = 0;
-      int i = 0;
-      while (offset < file.length && i < blocks.length) {
-        blocks[i].offset = offset;
-        blocks[i].length = Math.min(file.length - offset, file.blockSize);
-        offset += blocks[i].length;
-        i += 1;
-      }
-    }
-
-    @Override
-    public void close() throws IOException {
-      super.close();
-      DataOutputBuffer buf = (DataOutputBuffer) getWrappedStream();
-      file.length = buf.getLength();
-      file.content = new byte[file.length];
-      MockBlock block = new MockBlock("host1");
-      block.setLength(file.length);
-      setBlocks(block);
-      System.arraycopy(buf.getData(), 0, file.content, 0, file.length);
-    }
-
-    @Override
-    public String toString() {
-      return "Out stream to " + file.toString();
-    }
-  }
-
-  public static class MockFileSystem extends FileSystem {
-    final List<MockFile> files = new ArrayList<MockFile>();
-    final Map<MockFile, FileStatus> fileStatusMap = new HashMap<>();
-    Path workingDir = new Path("/");
-    // statics for when the mock fs is created via FileSystem.get
-    private static String blockedUgi = null;
-    private final static List<MockFile> globalFiles = new 
ArrayList<MockFile>();
-    protected Statistics statistics;
-
-    public MockFileSystem() {
-      // empty
-    }
-
-    @Override
-    public void initialize(URI uri, Configuration conf) {
-      setConf(conf);
-      statistics = getStatistics("mock", getClass());
-    }
-
-    public MockFileSystem(Configuration conf, MockFile... files) {
-      setConf(conf);
-      this.files.addAll(Arrays.asList(files));
-      statistics = getStatistics("mock", getClass());
-    }
-
-    public static void setBlockedUgi(String s) {
-      blockedUgi = s;
-    }
-
-    void clear() {
-      files.clear();
-    }
-
-    @Override
-    public URI getUri() {
-      try {
-        return new URI("mock:///");
-      } catch (URISyntaxException err) {
-        throw new IllegalArgumentException("huh?", err);
-      }
-    }
-
-    // increments file modification time
-    public void touch(MockFile file) {
-      if (fileStatusMap.containsKey(file)) {
-        FileStatus fileStatus = fileStatusMap.get(file);
-        FileStatus fileStatusNew = new FileStatus(fileStatus.getLen(), 
fileStatus.isDirectory(),
-            fileStatus.getReplication(), fileStatus.getBlockSize(),
-            fileStatus.getModificationTime() + 1, fileStatus.getAccessTime(),
-            fileStatus.getPermission(), fileStatus.getOwner(), 
fileStatus.getGroup(),
-            fileStatus.getPath());
-        fileStatusMap.put(file, fileStatusNew);
-      }
-    }
-
-    @SuppressWarnings("serial")
-    public static class MockAccessDenied extends IOException {
-    }
-
-    @Override
-    public FSDataInputStream open(Path path, int i) throws IOException {
-      statistics.incrementReadOps(1);
-      checkAccess();
-      MockFile file = findFile(path);
-      if (file != null) return new FSDataInputStream(new 
MockInputStream(file));
-      throw new IOException("File not found: " + path);
-    }
-
-    private MockFile findFile(Path path) {
-      for (MockFile file: files) {
-        if (file.path.equals(path)) {
-          return file;
-        }
-      }
-      for (MockFile file: globalFiles) {
-        if (file.path.equals(path)) {
-          return file;
-        }
-      }
-      return null;
-    }
-
-    private void checkAccess() throws IOException {
-      if (blockedUgi == null) return;
-      if 
(!blockedUgi.equals(UserGroupInformation.getCurrentUser().getShortUserName())) 
return;
-      throw new MockAccessDenied();
-    }
-
-    @Override
-    public FSDataOutputStream create(Path path, FsPermission fsPermission,
-                                     boolean overwrite, int bufferSize,
-                                     short replication, long blockSize,
-                                     Progressable progressable
-                                     ) throws IOException {
-      statistics.incrementWriteOps(1);
-      checkAccess();
-      MockFile file = findFile(path);
-      if (file == null) {
-        file = new MockFile(path.toString(), (int) blockSize, new byte[0]);
-        files.add(file);
-      }
-      return new MockOutputStream(file);
-    }
-
-    @Override
-    public FSDataOutputStream append(Path path, int bufferSize,
-                                     Progressable progressable
-                                     ) throws IOException {
-      statistics.incrementWriteOps(1);
-      checkAccess();
-      return create(path, FsPermission.getDefault(), true, bufferSize,
-          (short) 3, 256 * 1024, progressable);
-    }
-
-    @Override
-    public boolean rename(Path path, Path path2) throws IOException {
-      statistics.incrementWriteOps(1);
-      checkAccess();
-      return false;
-    }
-
-    @Override
-    public boolean delete(Path path) throws IOException {
-      statistics.incrementWriteOps(1);
-      checkAccess();
-      return false;
-    }
-
-    @Override
-    public boolean delete(Path path, boolean b) throws IOException {
-      statistics.incrementWriteOps(1);
-      checkAccess();
-      return false;
-    }
-
-    @Override
-    public RemoteIterator<LocatedFileStatus> listLocatedStatus(final Path f)
-        throws IOException {
-      return new RemoteIterator<LocatedFileStatus>() {
-        private Iterator<LocatedFileStatus> iterator = 
listLocatedFileStatuses(f).iterator();
-
-        @Override
-        public boolean hasNext() throws IOException {
-          return iterator.hasNext();
-        }
-
-        @Override
-        public LocatedFileStatus next() throws IOException {
-          return iterator.next();
-        }
-      };
-    }
-
-    private List<LocatedFileStatus> listLocatedFileStatuses(Path path) throws 
IOException {
-      statistics.incrementReadOps(1);
-      checkAccess();
-      path = path.makeQualified(this);
-      List<LocatedFileStatus> result = new ArrayList<>();
-      String pathname = path.toString();
-      String pathnameAsDir = pathname + "/";
-      Set<String> dirs = new TreeSet<String>();
-      MockFile file = findFile(path);
-      if (file != null) {
-        result.add(createLocatedStatus(file));
-        return result;
-      }
-      findMatchingLocatedFiles(files, pathnameAsDir, dirs, result);
-      findMatchingLocatedFiles(globalFiles, pathnameAsDir, dirs, result);
-      // for each directory add it once
-      for(String dir: dirs) {
-        result.add(createLocatedDirectory(new MockPath(this, pathnameAsDir + 
dir)));
-      }
-      return result;
-    }
-
-    @Override
-    public FileStatus[] listStatus(Path path) throws IOException {
-      statistics.incrementReadOps(1);
-      checkAccess();
-      path = path.makeQualified(this);
-      List<FileStatus> result = new ArrayList<FileStatus>();
-      String pathname = path.toString();
-      String pathnameAsDir = pathname + "/";
-      Set<String> dirs = new TreeSet<String>();
-      MockFile file = findFile(path);
-      if (file != null) {
-        return new FileStatus[]{createStatus(file)};
-      }
-      findMatchingFiles(files, pathnameAsDir, dirs, result);
-      findMatchingFiles(globalFiles, pathnameAsDir, dirs, result);
-      // for each directory add it once
-      for(String dir: dirs) {
-        result.add(createDirectory(new MockPath(this, pathnameAsDir + dir)));
-      }
-      return result.toArray(new FileStatus[result.size()]);
-    }
-
-    private void findMatchingFiles(
-        List<MockFile> files, String pathnameAsDir, Set<String> dirs, 
List<FileStatus> result) {
-      for (MockFile file: files) {
-        String filename = file.path.toString();
-        if (filename.startsWith(pathnameAsDir)) {
-          String tail = filename.substring(pathnameAsDir.length());
-          int nextSlash = tail.indexOf('/');
-          if (nextSlash > 0) {
-            dirs.add(tail.substring(0, nextSlash));
-          } else {
-            result.add(createStatus(file));
-          }
-        }
-      }
-    }
-
-    private void findMatchingLocatedFiles(
-        List<MockFile> files, String pathnameAsDir, Set<String> dirs, 
List<LocatedFileStatus> result)
-        throws IOException {
-      for (MockFile file: files) {
-        String filename = file.path.toString();
-        if (filename.startsWith(pathnameAsDir)) {
-          String tail = filename.substring(pathnameAsDir.length());
-          int nextSlash = tail.indexOf('/');
-          if (nextSlash > 0) {
-            dirs.add(tail.substring(0, nextSlash));
-          } else {
-            result.add(createLocatedStatus(file));
-          }
-        }
-      }
-    }
-
-    @Override
-    public void setWorkingDirectory(Path path) {
-      workingDir = path;
-    }
-
-    @Override
-    public Path getWorkingDirectory() {
-      return workingDir;
-    }
-
-    @Override
-    public boolean mkdirs(Path path, FsPermission fsPermission) {
-      statistics.incrementWriteOps(1);
-      return false;
-    }
-
-    private FileStatus createStatus(MockFile file) {
-      if (fileStatusMap.containsKey(file)) {
-        return fileStatusMap.get(file);
-      }
-      FileStatus fileStatus = new FileStatus(file.length, false, 1, 
file.blockSize, 0, 0,
-          FsPermission.createImmutable((short) 644), "owen", "group",
-          file.path);
-      fileStatusMap.put(file, fileStatus);
-      return fileStatus;
-    }
-
-    private FileStatus createDirectory(Path dir) {
-      return new FileStatus(0, true, 0, 0, 0, 0,
-          FsPermission.createImmutable((short) 755), "owen", "group", dir);
-    }
-
-    private LocatedFileStatus createLocatedStatus(MockFile file) throws 
IOException {
-      FileStatus fileStatus = createStatus(file);
-      return new LocatedFileStatus(fileStatus,
-          getFileBlockLocationsImpl(fileStatus, 0, fileStatus.getLen(), 
false));
-    }
-
-    private LocatedFileStatus createLocatedDirectory(Path dir) throws 
IOException {
-      FileStatus fileStatus = createDirectory(dir);
-      return new LocatedFileStatus(fileStatus,
-          getFileBlockLocationsImpl(fileStatus, 0, fileStatus.getLen(), 
false));
-    }
-
-    @Override
-    public FileStatus getFileStatus(Path path) throws IOException {
-      statistics.incrementReadOps(1);
-      checkAccess();
-      path = path.makeQualified(this);
-      String pathnameAsDir = path.toString() + "/";
-      MockFile file = findFile(path);
-      if (file != null) return createStatus(file);
-      for (MockFile dir : files) {
-        if (dir.path.toString().startsWith(pathnameAsDir)) {
-          return createDirectory(path);
-        }
-      }
-      for (MockFile dir : globalFiles) {
-        if (dir.path.toString().startsWith(pathnameAsDir)) {
-          return createDirectory(path);
-        }
-      }
-      throw new FileNotFoundException("File " + path + " does not exist");
-    }
-
-    @Override
-    public BlockLocation[] getFileBlockLocations(FileStatus stat,
-                                                 long start, long len) throws 
IOException {
-      return getFileBlockLocationsImpl(stat, start, len, true);
-    }
-
-    private BlockLocation[] getFileBlockLocationsImpl(final FileStatus stat, 
final long start,
-        final long len,
-        final boolean updateStats) throws IOException {
-      if (updateStats) {
-        statistics.incrementReadOps(1);
-      }
-      checkAccess();
-      List<BlockLocation> result = new ArrayList<BlockLocation>();
-      MockFile file = findFile(stat.getPath());
-      if (file != null) {
-        for(MockBlock block: file.blocks) {
-          if (OrcInputFormat.SplitGenerator.getOverlap(block.offset,
-              block.length, start, len) > 0) {
-            String[] topology = new String[block.hosts.length];
-            for(int i=0; i < topology.length; ++i) {
-              topology[i] = "/rack/ " + block.hosts[i];
-            }
-            result.add(new BlockLocation(block.hosts, block.hosts,
-                topology, block.offset, block.length));
-          }
-        }
-        return result.toArray(new BlockLocation[result.size()]);
-      }
-      return new BlockLocation[0];
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder buffer = new StringBuilder();
-      buffer.append("mockFs{files:[");
-      for(int i=0; i < files.size(); ++i) {
-        if (i != 0) {
-          buffer.append(", ");
-        }
-        buffer.append(files.get(i));
-      }
-      buffer.append("]}");
-      return buffer.toString();
-    }
-
-    public static void addGlobalFile(MockFile mockFile) {
-      globalFiles.add(mockFile);
-    }
-
-    public static void clearGlobalFiles() {
-      globalFiles.clear();
-    }
-  }
-
   static void fill(DataOutputBuffer out, long length) throws IOException {
     for(int i=0; i < length; ++i) {
       out.write(0);
@@ -2569,6 +2031,7 @@ public class TestInputOutputFormat {
     conf.setClass("fs.mock.impl", MockFileSystem.class, FileSystem.class);
     String badUser = UserGroupInformation.getCurrentUser().getShortUserName() 
+ "-foo";
     MockFileSystem.setBlockedUgi(badUser);
+    // TODO: could we instead get FS from path here and add normal files for 
every UGI?
     MockFileSystem.clearGlobalFiles();
     OrcInputFormat.Context.resetThreadPool(); // We need the size above to 
take effect.
     try {

Reply via email to