You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by ji...@apache.org on 2015/05/19 04:54:15 UTC

tajo git commit: TAJO-1608: Fix test failure in index_support branch. (jihoon)

Repository: tajo
Updated Branches:
  refs/heads/index_support 2cbc1b9c7 -> 1ad6b6cc9


TAJO-1608: Fix test failure in index_support branch. (jihoon)

Closes #573


Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/1ad6b6cc
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/1ad6b6cc
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/1ad6b6cc

Branch: refs/heads/index_support
Commit: 1ad6b6cc9d01760c66fd332bf7d0a246dce5ee1a
Parents: 2cbc1b9
Author: Jihoon Son <ji...@apache.org>
Authored: Tue May 19 11:52:40 2015 +0900
Committer: Jihoon Son <ji...@apache.org>
Committed: Tue May 19 11:53:44 2015 +0900

----------------------------------------------------------------------
 CHANGES                                         |   2 +
 .../engine/planner/PhysicalPlannerImpl.java     |   7 +-
 .../planner/physical/BSTIndexScanExec.java      | 114 +++++++++++++++----
 .../apache/tajo/engine/query/TestIndexScan.java |  94 +++++++++------
 .../org/apache/tajo/storage/StorageManager.java |  16 +++
 .../org/apache/tajo/storage/TableSpace.java     |   3 +
 .../apache/tajo/storage/TableSpaceManager.java  |  16 ---
 .../apache/tajo/storage/FileStorageManager.java |  20 ----
 .../apache/tajo/storage/index/TestBSTIndex.java |  48 +++++---
 9 files changed, 208 insertions(+), 112 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 4372e04..b2b457c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -128,6 +128,8 @@ Release 0.11.0 - unreleased
 
   BUG FIXES
 
+    TAJO-1608: Fix test failure in index_support branch. (jihoon)
+
     TAJO-1594: Catalog schema is invalid for some databases. (jihoon)
 
     TAJO-1605: Fix master build failure on jdk 1.6. (jinho)

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
index 04315eb..2f46026 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java
@@ -1192,11 +1192,10 @@ public class PhysicalPlannerImpl implements PhysicalPlanner {
     Preconditions.checkNotNull(ctx.getTable(annotation.getCanonicalName()),
         "Error: There is no table matched to %s", annotation.getCanonicalName());
 
-    FragmentProto [] fragmentProtos = ctx.getTables(annotation.getTableName());
-    List<FileFragment> fragments =
-        FragmentConvertor.convert(ctx.getConf(), fragmentProtos);
+    FragmentProto [] fragments = ctx.getTables(annotation.getTableName());
 
-    return new BSTIndexScanExec(ctx, annotation, fragments.get(0), annotation.getIndexPath(),
+    Preconditions.checkState(fragments.length == 1);
+    return new BSTIndexScanExec(ctx, annotation, fragments[0], annotation.getIndexPath(),
         annotation.getKeySchema(), annotation.getPredicates());
   }
 

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
index 7df48a4..712fc6d 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/BSTIndexScanExec.java
@@ -25,6 +25,8 @@ import org.apache.hadoop.io.IOUtils;
 import org.apache.tajo.catalog.Column;
 import org.apache.tajo.catalog.Schema;
 import org.apache.tajo.catalog.SortSpec;
+import org.apache.tajo.catalog.TableMeta;
+import org.apache.tajo.catalog.proto.CatalogProtos;
 import org.apache.tajo.catalog.statistics.TableStats;
 import org.apache.tajo.datum.Datum;
 import org.apache.tajo.engine.planner.Projector;
@@ -33,19 +35,22 @@ import org.apache.tajo.plan.expr.EvalNode;
 import org.apache.tajo.plan.expr.EvalTreeUtil;
 import org.apache.tajo.plan.logical.IndexScanNode;
 import org.apache.tajo.plan.rewrite.rules.IndexScanInfo.SimplePredicate;
+import org.apache.tajo.plan.util.PlannerUtil;
 import org.apache.tajo.storage.*;
 import org.apache.tajo.storage.fragment.FileFragment;
+import org.apache.tajo.storage.fragment.FragmentConvertor;
 import org.apache.tajo.storage.index.bst.BSTIndex;
 import org.apache.tajo.util.TUtil;
 import org.apache.tajo.worker.TaskAttemptContext;
 
 import java.io.IOException;
 import java.net.URI;
+import java.util.HashSet;
 import java.util.Set;
 
 public class BSTIndexScanExec extends PhysicalExec {
   private final static Log LOG = LogFactory.getLog(BSTIndexScanExec.class);
-  private IndexScanNode scanNode;
+  private IndexScanNode plan;
   private SeekableScanner fileScanner;
   
   private EvalNode qual;
@@ -61,13 +66,18 @@ public class BSTIndexScanExec extends PhysicalExec {
 
   private TableStats inputStats;
 
-  public BSTIndexScanExec(TaskAttemptContext context,
-                          IndexScanNode scanNode ,
-       FileFragment fragment, URI indexPrefix , Schema keySchema,
-       SimplePredicate [] predicates) throws IOException {
-    super(context, scanNode.getInSchema(), scanNode.getOutSchema());
-    this.scanNode = scanNode;
-    this.qual = scanNode.getQual();
+  private CatalogProtos.FragmentProto fragment;
+
+  private Schema keySchema;
+
+  public BSTIndexScanExec(TaskAttemptContext context, IndexScanNode plan,
+                          CatalogProtos.FragmentProto fragment, URI indexPrefix , Schema keySchema,
+                          SimplePredicate [] predicates) throws IOException {
+    super(context, plan.getInSchema(), plan.getOutSchema());
+    this.plan = plan;
+    this.qual = plan.getQual();
+    this.fragment = fragment;
+    this.keySchema = keySchema;
 
     SortSpec[] keySortSpecs = new SortSpec[predicates.length];
     values = new Datum[predicates.length];
@@ -79,12 +89,8 @@ public class BSTIndexScanExec extends PhysicalExec {
     TupleComparator comparator = new BaseTupleComparator(keySchema,
         keySortSpecs);
 
-    Schema fileScanOutSchema = mergeSubSchemas(inSchema, keySchema, scanNode.getTargets(), qual);
 
-    this.fileScanner = TableSpaceManager.getSeekableScanner(context.getConf(),
-        scanNode.getTableDesc().getMeta(), inSchema, fragment, fileScanOutSchema);
-    this.fileScanner.init();
-    this.projector = new Projector(context, inSchema, outSchema, scanNode.getTargets());
+    this.projector = new Projector(context, inSchema, outSchema, plan.getTargets());
 
     Path indexPath = new Path(indexPrefix.toString(), context.getUniqueKeyFromFragments());
     this.reader = new BSTIndex(context.getConf()).
@@ -111,10 +117,79 @@ public class BSTIndexScanExec extends PhysicalExec {
 
   @Override
   public void init() throws IOException {
+    Schema projected;
+
+    // in the case where projected column or expression are given
+    // the target can be an empty list.
+    if (plan.hasTargets()) {
+      projected = new Schema();
+      Set<Column> columnSet = new HashSet<Column>();
+
+      if (plan.hasQual()) {
+        columnSet.addAll(EvalTreeUtil.findUniqueColumns(qual));
+      }
+
+      for (Target t : plan.getTargets()) {
+        columnSet.addAll(EvalTreeUtil.findUniqueColumns(t.getEvalTree()));
+      }
+
+      for (Column column : inSchema.getAllColumns()) {
+        if (columnSet.contains(column)) {
+          projected.addColumn(column);
+        }
+      }
+
+    } else {
+      // no any projected columns, meaning that all columns should be projected.
+      // TODO - this implicit rule makes code readability bad. So, we should remove it later
+      projected = outSchema;
+    }
+
+    initScanner(projected);
     super.init();
     progress = 0.0f;
-    if (qual != null) {
-      qual.bind(context.getEvalContext(), inSchema);
+
+    if (plan.hasQual()) {
+      if (fileScanner.isProjectable()) {
+        qual.bind(context.getEvalContext(), projected);
+      } else {
+        qual.bind(context.getEvalContext(), inSchema);
+      }
+    }
+  }
+
+  private void initScanner(Schema projected) throws IOException {
+
+    TableMeta meta;
+    try {
+      meta = (TableMeta) plan.getTableDesc().getMeta().clone();
+    } catch (CloneNotSupportedException e) {
+      throw new RuntimeException(e);
+    }
+
+    // set system default properties
+    PlannerUtil.applySystemDefaultToTableProperties(context.getQueryContext(), meta);
+
+    // Why we should check nullity? See https://issues.apache.org/jira/browse/TAJO-1422
+    if (fragment != null) {
+
+      Schema fileScanOutSchema = mergeSubSchemas(projected, keySchema, plan.getTargets(), qual);
+
+      this.fileScanner = TableSpaceManager.getStorageManager(context.getConf(),
+          plan.getTableDesc().getMeta().getStoreType())
+          .getSeekableScanner(plan.getTableDesc().getMeta(), plan.getPhysicalSchema(), fragment, fileScanOutSchema);
+      this.fileScanner.init();
+
+      // See Scanner.isProjectable() method Depending on the result of isProjectable(),
+      // the width of retrieved tuple is changed.
+      //
+      // If TRUE, the retrieved tuple will contain only projected fields.
+      // If FALSE, the retrieved tuple will contain projected fields and NullDatum for non-projected fields.
+      if (fileScanner.isProjectable()) {
+        this.projector = new Projector(context, projected, outSchema, plan.getTargets());
+      } else {
+        this.projector = new Projector(context, inSchema, outSchema, plan.getTargets());
+      }
     }
   }
 
@@ -146,9 +221,10 @@ public class BSTIndexScanExec extends PhysicalExec {
       fileScanner.seek(offset);
       }
     }
+
     Tuple tuple;
-    Tuple outTuple = new VTuple(this.outSchema.size());
-    if (!scanNode.hasQual()) {
+    Tuple outTuple = new VTuple(outColumnNum);
+    if (!plan.hasQual()) {
       if ((tuple = fileScanner.next()) != null) {
         projector.eval(tuple, outTuple);
         return outTuple;
@@ -166,7 +242,6 @@ public class BSTIndexScanExec extends PhysicalExec {
              return null;
            }
            else fileScanner.seek(offset);
-           return null;
          }
        }
      }
@@ -193,9 +268,6 @@ public class BSTIndexScanExec extends PhysicalExec {
     }
     reader = null;
     fileScanner = null;
-    scanNode = null;
-    qual = null;
-    projector = null;
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java
index f94a3b5..3a4ff6f 100644
--- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java
+++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java
@@ -44,76 +44,100 @@ public class TestIndexScan extends QueryTestCaseBase {
   @Test
   public final void testOnSortedNonUniqueKeys() throws Exception {
     executeString("create index l_orderkey_idx on lineitem (l_orderkey)");
-    ResultSet res = executeString("select * from lineitem where l_orderkey = 1;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_orderkey_idx");
+    try {
+      ResultSet res = executeString("select * from lineitem where l_orderkey = 1;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_orderkey_idx");
+    }
   }
 
   @Test
   public final void testOnUnsortedTextKeys() throws Exception {
     executeString("create index l_shipdate_idx on lineitem (l_shipdate)");
-    ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem where l_shipdate = '1997-01-28';");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_shipdate_idx");
+    try {
+      ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem where l_shipdate = '1997-01-28';");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_shipdate_idx");
+    }
   }
 
   @Test
   public final void testOnMultipleKeys() throws Exception {
     executeString("create index multikey_idx on lineitem (l_shipdate asc null last, l_tax desc null first, l_shipmode, l_linenumber desc null last)");
-    ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem " +
-        "where l_shipdate = '1997-01-28' and l_tax = 0.05 and l_shipmode = 'RAIL' and l_linenumber = 1;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index multikey_idx");
+    try {
+      ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem " +
+          "where l_shipdate = '1997-01-28' and l_tax = 0.05 and l_shipmode = 'RAIL' and l_linenumber = 1;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index multikey_idx");
+    }
   }
 
   @Test
   public final void testOnMultipleKeys2() throws Exception {
     executeString("create index multikey_idx on lineitem (l_shipdate asc null last, l_tax desc null first)");
-    ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem " +
-        "where l_shipdate = '1997-01-28' and l_tax = 0.05 and l_shipmode = 'RAIL' and l_linenumber = 1;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index multikey_idx");
+    try {
+      ResultSet res = executeString("select l_orderkey, l_shipdate, l_comment from lineitem " +
+          "where l_shipdate = '1997-01-28' and l_tax = 0.05 and l_shipmode = 'RAIL' and l_linenumber = 1;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index multikey_idx");
+    }
   }
 
   @Test
   public final void testOnMultipleExprs() throws Exception {
     executeString("create index l_orderkey_100_l_linenumber_10_idx on lineitem (l_orderkey*100-l_linenumber*10 asc null first);");
-    ResultSet res = executeString("select l_orderkey, l_linenumber from lineitem where l_orderkey*100-l_linenumber*10 = 280");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_orderkey_100_l_linenumber_10_idx");
+    try {
+      ResultSet res = executeString("select l_orderkey, l_linenumber from lineitem where l_orderkey*100-l_linenumber*10 = 280");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_orderkey_100_l_linenumber_10_idx");
+    }
   }
 
   @Test
   public final void testWithGroupBy() throws Exception {
     executeString("create index l_shipdate_idx on lineitem (l_shipdate)");
-    ResultSet res = executeString("select l_shipdate, count(*) from lineitem where l_shipdate = '1997-01-28' group by l_shipdate;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_shipdate_idx");
+    try {
+      ResultSet res = executeString("select l_shipdate, count(*) from lineitem where l_shipdate = '1997-01-28' group by l_shipdate;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_shipdate_idx");
+    }
   }
 
   @Test
   public final void testWithSort() throws Exception {
     executeString("create index l_orderkey_idx on lineitem (l_orderkey)");
-    ResultSet res = executeString("select l_shipdate from lineitem where l_orderkey = 1 order by l_shipdate;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_orderkey_idx");
+    try {
+      ResultSet res = executeString("select l_shipdate from lineitem where l_orderkey = 1 order by l_shipdate;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_orderkey_idx");
+    }
   }
 
   @Test
   public final void testWithJoin() throws Exception {
     executeString("create index l_orderkey_idx on lineitem (l_orderkey)");
     executeString("create index o_orderkey_idx on orders (o_orderkey)");
-    ResultSet res = executeString("select l_shipdate, o_orderstatus from lineitem, orders where l_orderkey = o_orderkey and l_orderkey = 1 and o_orderkey = 1;");
-    assertResultSet(res);
-    cleanupQuery(res);
-    executeString("drop index l_orderkey_idx");
-    executeString("drop index o_orderkey_idx");
+    try {
+      ResultSet res = executeString("select l_shipdate, o_orderstatus from lineitem, orders where l_orderkey = o_orderkey and l_orderkey = 1 and o_orderkey = 1;");
+      assertResultSet(res);
+      cleanupQuery(res);
+    } finally {
+      executeString("drop index l_orderkey_idx");
+      executeString("drop index o_orderkey_idx");
+    }
   }
 }

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/StorageManager.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/StorageManager.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/StorageManager.java
index 0751035..ca6dab5 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/StorageManager.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/StorageManager.java
@@ -254,6 +254,22 @@ public abstract class StorageManager implements TableSpace {
   }
 
   /**
+   * Returns Scanner instance.
+   *
+   * @param meta The table meta
+   * @param schema The input schema
+   * @param fragment The fragment for scanning
+   * @param target The output schema
+   * @return Scanner instance
+   * @throws IOException
+   */
+  @Override
+  public synchronized SeekableScanner getSeekableScanner(TableMeta meta, Schema schema, FragmentProto fragment,
+                                                         Schema target) throws IOException {
+    return (SeekableScanner)this.getScanner(meta, schema, fragment, target);
+  }
+
+  /**
    * Returns Appender instance.
    * @param queryContext Query property.
    * @param taskAttemptId Task id.

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpace.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpace.java
index ef4aa9a..c6c5b6c 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpace.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpace.java
@@ -62,6 +62,9 @@ public interface TableSpace extends Closeable {
 
   Scanner getScanner(TableMeta meta, Schema schema, Fragment fragment, Schema target) throws IOException;
 
+  SeekableScanner getSeekableScanner(TableMeta meta, Schema schema, CatalogProtos.FragmentProto fragment, Schema target)
+      throws IOException;
+
   Path commitOutputData(OverridableConf queryContext, ExecutionBlockId finalEbId,
                                LogicalPlan plan, Schema schema,
                                TableDesc tableDesc) throws IOException;

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java
index 42a5e07..2543c9a 100644
--- a/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java
+++ b/tajo-storage/tajo-storage-common/src/main/java/org/apache/tajo/storage/TableSpaceManager.java
@@ -178,22 +178,6 @@ public class TableSpaceManager {
   }
 
   /**
-   * Returns Scanner instance.
-   *
-   * @param conf The system property
-   * @param meta The table meta
-   * @param schema The input schema
-   * @param fragment The fragment for scanning
-   * @param target The output schema
-   * @return Scanner instance
-   * @throws IOException
-   */
-  public static synchronized SeekableScanner getSeekableScanner(
-      TajoConf conf, TableMeta meta, Schema schema, Fragment fragment, Schema target) throws IOException {
-    return (SeekableScanner)getStorageManager(conf, meta.getStoreType()).getScanner(meta, schema, fragment, target);
-  }
-
-  /**
    * Creates a scanner instance.
    *
    * @param theClass Concrete class of scanner

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
index 4efc3b7..bdaa832 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileStorageManager.java
@@ -890,26 +890,6 @@ public class FileStorageManager extends StorageManager {
   }
 
   /**
-   * Returns Scanner instance.
-   *
-   * @param conf The system property
-   * @param meta The table meta
-   * @param schema The input schema
-   * @param path The data file path
-   * @return Scanner instance
-   * @throws java.io.IOException
-   */
-  public static synchronized SeekableScanner getSeekableScanner(
-      TajoConf conf, TableMeta meta, Schema schema, Path path) throws IOException {
-
-    FileSystem fs = path.getFileSystem(conf);
-    FileStatus status = fs.getFileStatus(path);
-    FileFragment fragment = new FileFragment(path.getName(), path, 0, status.getLen());
-
-    return TableSpaceManager.getSeekableScanner(conf, meta, schema, fragment, schema);
-  }
-
-  /**
    * Finalizes result data. Tajo stores result data in the staging directory.
    * If the query fails, clean up the staging directory.
    * Otherwise the query is successful, move to the final directory from the staging directory.

http://git-wip-us.apache.org/repos/asf/tajo/blob/1ad6b6cc/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
index ae0fd58..e021bfb 100644
--- a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
+++ b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/index/TestBSTIndex.java
@@ -124,7 +124,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -147,7 +148,8 @@ public class TestBSTIndex {
     tuple = new VTuple(keySchema.size());
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindValue_" + storeType + ".idx"), keySchema, comp);
     reader.open();
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     for (int i = 0; i < TUPLE_NUM - 1; i++) {
@@ -226,7 +228,8 @@ public class TestBSTIndex {
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testBuildIndexWithAppender_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     for (int i = 0; i < TUPLE_NUM - 1; i++) {
@@ -289,7 +292,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -360,7 +364,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -383,7 +388,8 @@ public class TestBSTIndex {
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindNextKeyValue_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple result;
@@ -451,7 +457,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -474,7 +481,8 @@ public class TestBSTIndex {
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindNextKeyOmittedValue_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple result;
@@ -530,7 +538,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -555,7 +564,8 @@ public class TestBSTIndex {
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindMinValue_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     tuple.put(0, DatumFactory.createInt8(0));
@@ -613,7 +623,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -718,7 +729,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -799,7 +811,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -824,7 +837,8 @@ public class TestBSTIndex {
     BSTIndexReader reader = bst.getIndexReader(new Path(testDir, "testFindValueDescOrder_" + storeType + ".idx"),
         keySchema, comp);
     reader.open();
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     for (int i = (TUPLE_NUM - 1); i > 0; i--) {
@@ -889,7 +903,8 @@ public class TestBSTIndex {
     creater.setLoadNum(LOAD_NUM);
     creater.open();
 
-    SeekableScanner scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    SeekableScanner scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple keyTuple;
@@ -917,7 +932,8 @@ public class TestBSTIndex {
     assertEquals(keySchema, reader.getKeySchema());
     assertEquals(comp, reader.getComparator());
 
-    scanner = TableSpaceManager.getSeekableScanner(conf, meta, schema, tablet, schema);
+    scanner = TableSpaceManager.getStorageManager(conf, meta.getStoreType()).
+        getSeekableScanner(meta, schema, tablet.getProto(), schema);
     scanner.init();
 
     Tuple result;