You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tajo.apache.org by hy...@apache.org on 2015/09/22 23:05:50 UTC
tajo git commit: TAJO-1868: Allow TablespaceManager::get to return
unregistered tablespace.
Repository: tajo
Updated Branches:
refs/heads/master cf3eef92c -> 4a9628858
TAJO-1868: Allow TablespaceManager::get to return unregistered tablespace.
Closes #768
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo
Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/4a962885
Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/4a962885
Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/4a962885
Branch: refs/heads/master
Commit: 4a9628858ee5632a2eaaac1959645689e4189e20
Parents: cf3eef9
Author: Hyunsik Choi <hy...@apache.org>
Authored: Tue Sep 22 14:04:08 2015 -0700
Committer: Hyunsik Choi <hy...@apache.org>
Committed: Tue Sep 22 14:04:08 2015 -0700
----------------------------------------------------------------------
CHANGES | 3 +
.../apache/tajo/exception/ErrorMessages.java | 1 +
.../apache/tajo/exception/ExceptionUtil.java | 1 +
.../apache/tajo/exception/SQLExceptionUtil.java | 1 +
.../UndefinedTablespaceHandlerException.java | 34 ++
tajo-common/src/main/proto/errors.proto | 1 +
.../org/apache/tajo/client/TestTajoClient.java | 13 +
.../tajo/engine/query/TestCreateTable.java | 2 +-
.../tajo/engine/query/TestHBaseTable.java | 340 +++++++++++--------
.../org/apache/tajo/storage/TestRowFile.java | 2 +-
.../create_table_on_absent_tablespace.sql | 1 +
.../engine/planner/PhysicalPlannerImpl.java | 2 +-
.../planner/physical/ColPartitionStoreExec.java | 2 +-
.../engine/planner/physical/InsertRowsExec.java | 2 +-
.../engine/planner/physical/SeqScanExec.java | 2 +-
.../engine/planner/physical/StoreTableExec.java | 9 +-
.../org/apache/tajo/master/GlobalEngine.java | 2 +-
.../tajo/master/exec/CreateTableExecutor.java | 18 +-
.../apache/tajo/master/exec/DDLExecutor.java | 4 +-
.../exec/NonForwardQueryResultFileScanner.java | 2 +-
.../apache/tajo/master/exec/QueryExecutor.java | 6 +-
.../java/org/apache/tajo/querymaster/Query.java | 4 +-
.../tajo/querymaster/QueryMasterTask.java | 4 +-
.../apache/tajo/querymaster/Repartitioner.java | 6 +-
.../java/org/apache/tajo/querymaster/Stage.java | 2 +-
.../java/org/apache/tajo/worker/TaskImpl.java | 2 +-
.../apache/tajo/storage/TablespaceManager.java | 56 ++-
.../src/main/resources/storage-default.json | 28 +-
.../tajo/storage/hbase/HBasePutAppender.java | 2 +-
.../apache/tajo/storage/hbase/HBaseScanner.java | 4 +-
.../tajo/storage/hbase/TestHBaseTableSpace.java | 6 +-
.../org/apache/tajo/storage/FileAppender.java | 8 +-
.../org/apache/tajo/storage/FileTablespace.java | 7 +-
.../storage/HashShuffleAppenderManager.java | 2 +-
.../apache/tajo/storage/TestFileTablespace.java | 4 +-
.../storage/pgsql/TestPgSQLJdbcTableSpace.java | 32 +-
.../pgsql/TestPgSQLMetadataProvider.java | 10 +-
.../tajo/storage/pgsql/TestPgSQLQueryTests.java | 1 -
38 files changed, 371 insertions(+), 255 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/CHANGES
----------------------------------------------------------------------
diff --git a/CHANGES b/CHANGES
index 057104f..fb0c8a6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -38,6 +38,9 @@ Release 0.11.0 - unreleased
IMPROVEMENT
+ TAJO-1868: Allow TablespaceManager::get to return a unregistered
+ tablespace. (hyunsik)
+
TAJO-1867: TajoMaster should handle the change of ${tajo.root}. (hyunsik)
TAJO-1134: start-tajo.sh should display WEB UI URL and TajoMaster RPC
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
index 9649644..ed84aa7 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/ErrorMessages.java
@@ -72,6 +72,7 @@ public class ErrorMessages {
ADD_MESSAGE(UNDEFINED_INDEX_FOR_TABLE, "index ''%s' does not exist", 1);
ADD_MESSAGE(UNDEFINED_INDEX_FOR_COLUMNS, "index does not exist for '%s' columns of '%s' table", 2);
ADD_MESSAGE(UNDEFINED_INDEX_NAME, "index name '%s' does not exist", 1);
+ ADD_MESSAGE(UNDEFINED_TABLESPACE_HANDLER, "No tablespace handler for URI scheme '%s'", 1);
ADD_MESSAGE(DUPLICATE_TABLESPACE, "tablespace '%s' already exists", 1);
ADD_MESSAGE(DUPLICATE_DATABASE, "database '%s' already exists", 1);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java b/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
index eea85fb..59c5776 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/ExceptionUtil.java
@@ -59,6 +59,7 @@ public class ExceptionUtil {
ADD_EXCEPTION(UNDEFINED_PARTITION_KEY, UndefinedPartitionKeyException.class);
ADD_EXCEPTION(UNDEFINED_OPERATOR, UndefinedOperatorException.class);
ADD_EXCEPTION(UNDEFINED_INDEX_NAME, UndefinedIndexException.class);
+ ADD_EXCEPTION(UNDEFINED_TABLESPACE_HANDLER, UndefinedTablespaceHandlerException.class);
ADD_EXCEPTION(DUPLICATE_TABLESPACE, DuplicateTablespaceException.class);
ADD_EXCEPTION(DUPLICATE_DATABASE, DuplicateDatabaseException.class);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-common/src/main/java/org/apache/tajo/exception/SQLExceptionUtil.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/SQLExceptionUtil.java b/tajo-common/src/main/java/org/apache/tajo/exception/SQLExceptionUtil.java
index b5708e1..4b4ec97 100644
--- a/tajo-common/src/main/java/org/apache/tajo/exception/SQLExceptionUtil.java
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/SQLExceptionUtil.java
@@ -72,6 +72,7 @@ public class SQLExceptionUtil {
SQLSTATES.put(ResultCode.UNDEFINED_PARTITION_METHOD, "42T06");
SQLSTATES.put(ResultCode.UNDEFINED_OPERATOR, "42883"); // == UNDEFINED_FUNCTION
SQLSTATES.put(ResultCode.UNDEFINED_PARTITION_KEY, "42T07");
+ SQLSTATES.put(ResultCode.UNDEFINED_TABLESPACE_HANDLER, "42T11");
SQLSTATES.put(ResultCode.DUPLICATE_TABLESPACE, "42T08");
SQLSTATES.put(ResultCode.DUPLICATE_DATABASE, "42P04");
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedTablespaceHandlerException.java
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedTablespaceHandlerException.java b/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedTablespaceHandlerException.java
new file mode 100644
index 0000000..f1090d3
--- /dev/null
+++ b/tajo-common/src/main/java/org/apache/tajo/exception/UndefinedTablespaceHandlerException.java
@@ -0,0 +1,34 @@
+/*
+ * 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.tajo.exception;
+
+import org.apache.tajo.error.Errors;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
+
+public class UndefinedTablespaceHandlerException extends TajoException {
+ private static final long serialVersionUID = 277182608283894937L;
+
+ public UndefinedTablespaceHandlerException(ReturnState state) {
+ super(state);
+ }
+
+ public UndefinedTablespaceHandlerException(String spaceName) {
+ super(Errors.ResultCode.UNDEFINED_TABLESPACE_HANDLER, spaceName);
+ }
+}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-common/src/main/proto/errors.proto
----------------------------------------------------------------------
diff --git a/tajo-common/src/main/proto/errors.proto b/tajo-common/src/main/proto/errors.proto
index 6a1780b..bb973f2 100644
--- a/tajo-common/src/main/proto/errors.proto
+++ b/tajo-common/src/main/proto/errors.proto
@@ -113,6 +113,7 @@ enum ResultCode {
UNDEFINED_PARTITION_METHOD = 521; // ?
UNDEFINED_OPERATOR = 522; // SQLState: 42883 (=UNDEFINED_FUNCTION)
UNDEFINED_PARTITION_KEY = 523; // ?
+ UNDEFINED_TABLESPACE_HANDLER = 524; // SQLState: 42T11 - No Tablespace Handler for the URI scheme
DUPLICATE_TABLESPACE = 531;
DUPLICATE_DATABASE = 532; // SQLState: 42P04
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
index 38819f1..60f04db 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/client/TestTajoClient.java
@@ -35,6 +35,8 @@ import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.UndefinedTablespaceException;
+import org.apache.tajo.exception.UndefinedTablespaceHandlerException;
import org.apache.tajo.exception.UnsupportedException;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.ipc.ClientProtos.QueryHistoryProto;
@@ -797,4 +799,15 @@ public class TestTajoClient {
rpcClient2.getChannel().eventLoop().terminationFuture().sync();
assertTrue(rpcClient2.getChannel().eventLoop().isTerminated());
}
+
+ @Test(expected = UndefinedTablespaceException.class)
+ public void testCreateTableOnAbsentTablespace() throws TajoException {
+ client.updateQuery("CREATE TABLE testCreateTableOnAbsentTablespace (AGE INT) TABLESPACE unknown123");
+ }
+
+ @Test(expected = UndefinedTablespaceHandlerException.class)
+ public void testCreateTableWithAbsentTablespaceHandler() throws TajoException {
+ client.updateQuery(
+ "CREATE EXTERNAL TABLE testCreateTableWithAbsentTablespaceHandler (AGE INT) USING TEXT LOCATION 'hdfx://tajo'");
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestCreateTable.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestCreateTable.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestCreateTable.java
index ed1026e..e33f173 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestCreateTable.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestCreateTable.java
@@ -415,7 +415,7 @@ public class TestCreateTable extends QueryTestCaseBase {
}
if(isClonedSchema(origPartMethod.getExpressionSchema(),
newPartMethod.getExpressionSchema()) == false) {
- fail("Partition columns of input tables do not match");
+ fail("Partition columns of input tables do not match");
return false;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
index 760fa62..59cb3ec 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/engine/query/TestHBaseTable.java
@@ -18,6 +18,7 @@
package org.apache.tajo.engine.query;
+import com.google.common.base.Optional;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileStatus;
@@ -151,15 +152,22 @@ public class TestHBaseTable extends QueryTestCaseBase {
@Test
public void testCreateNotExistsExternalHBaseTable() throws Exception {
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table1 (col1 text, col2 text, col3 text, col4 text) " +
- "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col2:a,col3:,col2:b') " +
- "LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
+
try {
- executeString(sql).close();
- fail("External table should be a existed table.");
- } catch (Throwable e) {
- assertTrue(e.getMessage().indexOf("External table should be a existed table.") >= 0);
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table1 (col1 text, col2 text, col3 text, col4 text) " +
+ "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col2:a,col3:,col2:b') " +
+ "LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ try {
+ executeString(sql).close();
+ fail("External table should be a existed table.");
+ } catch (Throwable e) {
+ assertTrue(e.getMessage().indexOf("External table should be a existed table.") >= 0);
+ }
+ } finally {
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
}
@@ -177,195 +185,229 @@ public class TestHBaseTable extends QueryTestCaseBase {
@Test
public void testCreateExternalHBaseTable() throws Exception {
- HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table_not_purge"));
- hTableDesc.addFamily(new HColumnDescriptor("col1"));
- hTableDesc.addFamily(new HColumnDescriptor("col2"));
- hTableDesc.addFamily(new HColumnDescriptor("col3"));
- testingCluster.getHBaseUtil().createTable(hTableDesc);
-
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk text, col1 text, col2 text, col3 text) " +
- "USING hbase WITH ('table'='external_hbase_table_not_purge', 'columns'=':key,col1:a,col2:,col3:b') " +
- "LOCATION '%s/external_hbase_table'", tableSpaceUri);
- executeString(sql).close();
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
- assertTableExists("external_hbase_mapped_table");
+ try {
+ HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table_not_purge"));
+ hTableDesc.addFamily(new HColumnDescriptor("col1"));
+ hTableDesc.addFamily(new HColumnDescriptor("col2"));
+ hTableDesc.addFamily(new HColumnDescriptor("col3"));
+ testingCluster.getHBaseUtil().createTable(hTableDesc);
+
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk text, col1 text, col2 text, col3 text) " +
+ "USING hbase WITH ('table'='external_hbase_table_not_purge', 'columns'=':key,col1:a,col2:,col3:b') " +
+ "LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ executeString(sql).close();
- executeString("DROP TABLE external_hbase_mapped_table").close();
+ assertTableExists("external_hbase_mapped_table");
+
+ executeString("DROP TABLE external_hbase_mapped_table").close();
+
+ HBaseAdmin hAdmin = new HBaseAdmin(testingCluster.getHBaseUtil().getConf());
+ try {
+ assertTrue(hAdmin.tableExists("external_hbase_table_not_purge"));
+ hAdmin.disableTable("external_hbase_table_not_purge");
+ hAdmin.deleteTable("external_hbase_table_not_purge");
+ } finally {
+ hAdmin.close();
+ }
- HBaseAdmin hAdmin = new HBaseAdmin(testingCluster.getHBaseUtil().getConf());
- try {
- assertTrue(hAdmin.tableExists("external_hbase_table_not_purge"));
- hAdmin.disableTable("external_hbase_table_not_purge");
- hAdmin.deleteTable("external_hbase_table_not_purge");
} finally {
- hAdmin.close();
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
+
}
@Test
public void testSimpleSelectQuery() throws Exception {
- HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
- hTableDesc.addFamily(new HColumnDescriptor("col1"));
- hTableDesc.addFamily(new HColumnDescriptor("col2"));
- hTableDesc.addFamily(new HColumnDescriptor("col3"));
- testingCluster.getHBaseUtil().createTable(hTableDesc);
-
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk text, col1 text, col2 text, col3 text) " +
- "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col1:a,col2:,col3:b') " +
- "LOCATION '%s/external_hbase_table'", tableSpaceUri);
- executeString(sql).close();
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
- assertTableExists("external_hbase_mapped_table");
+ try {
+ HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
+ hTableDesc.addFamily(new HColumnDescriptor("col1"));
+ hTableDesc.addFamily(new HColumnDescriptor("col2"));
+ hTableDesc.addFamily(new HColumnDescriptor("col3"));
+ testingCluster.getHBaseUtil().createTable(hTableDesc);
+
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk text, col1 text, col2 text, col3 text) " +
+ "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col1:a,col2:,col3:b') " +
+ "LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ executeString(sql).close();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.getByName("cluster1").get();
- HConnection hconn = space.getConnection();
- HTableInterface htable = hconn.getTable("external_hbase_table");
+ assertTableExists("external_hbase_mapped_table");
- try {
- for (int i = 0; i < 100; i++) {
- Put put = new Put(String.valueOf(i).getBytes());
- put.add("col1".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
- put.add("col1".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
- put.add("col2".getBytes(), "k1".getBytes(), ("k1-" + i).getBytes());
- put.add("col2".getBytes(), "k2".getBytes(), ("k2-" + i).getBytes());
- put.add("col3".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
- htable.put(put);
- }
+ HConnection hconn = ((HBaseTablespace)existing.get()).getConnection();
+ HTableInterface htable = hconn.getTable("external_hbase_table");
- ResultSet res = executeString("select * from external_hbase_mapped_table where rk > '20'");
- assertResultSet(res);
- cleanupQuery(res);
+ try {
+ for (int i = 0; i < 100; i++) {
+ Put put = new Put(String.valueOf(i).getBytes());
+ put.add("col1".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
+ put.add("col1".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
+ put.add("col2".getBytes(), "k1".getBytes(), ("k1-" + i).getBytes());
+ put.add("col2".getBytes(), "k2".getBytes(), ("k2-" + i).getBytes());
+ put.add("col3".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
+ htable.put(put);
+ }
+
+ ResultSet res = executeString("select * from external_hbase_mapped_table where rk > '20'");
+ assertResultSet(res);
+ cleanupQuery(res);
+ } finally {
+ executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
+ htable.close();
+ }
} finally {
- executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
- htable.close();
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
}
@Test
public void testBinaryMappedQuery() throws Exception {
- HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
- hTableDesc.addFamily(new HColumnDescriptor("col1"));
- hTableDesc.addFamily(new HColumnDescriptor("col2"));
- hTableDesc.addFamily(new HColumnDescriptor("col3"));
- testingCluster.getHBaseUtil().createTable(hTableDesc);
-
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk int8, col1 text, col2 text, col3 int4)\n " +
- "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key#b,col1:a,col2:,col3:b#b') " +
- "LOCATION '%s/external_hbase_table'", tableSpaceUri);
- executeString(sql).close();
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
- assertTableExists("external_hbase_mapped_table");
+ try {
+ HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
+ hTableDesc.addFamily(new HColumnDescriptor("col1"));
+ hTableDesc.addFamily(new HColumnDescriptor("col2"));
+ hTableDesc.addFamily(new HColumnDescriptor("col3"));
+ testingCluster.getHBaseUtil().createTable(hTableDesc);
+
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk int8, col1 text, col2 text, col3 int4)\n " +
+ "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key#b,col1:a,col2:,col3:b#b') " +
+ "LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ executeString(sql).close();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.getByName("cluster1").get();
- HConnection hconn = space.getConnection();
- HTableInterface htable = hconn.getTable("external_hbase_table");
+ assertTableExists("external_hbase_mapped_table");
- try {
- for (int i = 0; i < 100; i++) {
- Put put = new Put(Bytes.toBytes((long) i));
- put.add("col1".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
- put.add("col1".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
- put.add("col2".getBytes(), "k1".getBytes(), ("k1-" + i).getBytes());
- put.add("col2".getBytes(), "k2".getBytes(), ("k2-" + i).getBytes());
- put.add("col3".getBytes(), "b".getBytes(), Bytes.toBytes(i));
- htable.put(put);
- }
+ HConnection hconn = ((HBaseTablespace)existing.get()).getConnection();
+ HTableInterface htable = hconn.getTable("external_hbase_table");
- ResultSet res = executeString("select * from external_hbase_mapped_table where rk > 20");
- assertResultSet(res);
- res.close();
+ try {
+ for (int i = 0; i < 100; i++) {
+ Put put = new Put(Bytes.toBytes((long) i));
+ put.add("col1".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
+ put.add("col1".getBytes(), "b".getBytes(), ("b-" + i).getBytes());
+ put.add("col2".getBytes(), "k1".getBytes(), ("k1-" + i).getBytes());
+ put.add("col2".getBytes(), "k2".getBytes(), ("k2-" + i).getBytes());
+ put.add("col3".getBytes(), "b".getBytes(), Bytes.toBytes(i));
+ htable.put(put);
+ }
- //Projection
- res = executeString("select col3, col2, rk from external_hbase_mapped_table where rk > 95");
+ ResultSet res = executeString("select * from external_hbase_mapped_table where rk > 20");
+ assertResultSet(res);
+ res.close();
- String expected = "col3,col2,rk\n" +
- "-------------------------------\n" +
- "96,{\"k1\":\"k1-96\", \"k2\":\"k2-96\"},96\n" +
- "97,{\"k1\":\"k1-97\", \"k2\":\"k2-97\"},97\n" +
- "98,{\"k1\":\"k1-98\", \"k2\":\"k2-98\"},98\n" +
- "99,{\"k1\":\"k1-99\", \"k2\":\"k2-99\"},99\n";
+ //Projection
+ res = executeString("select col3, col2, rk from external_hbase_mapped_table where rk > 95");
- assertEquals(expected, resultSetToString(res));
- res.close();
+ String expected = "col3,col2,rk\n" +
+ "-------------------------------\n" +
+ "96,{\"k1\":\"k1-96\", \"k2\":\"k2-96\"},96\n" +
+ "97,{\"k1\":\"k1-97\", \"k2\":\"k2-97\"},97\n" +
+ "98,{\"k1\":\"k1-98\", \"k2\":\"k2-98\"},98\n" +
+ "99,{\"k1\":\"k1-99\", \"k2\":\"k2-99\"},99\n";
+ assertEquals(expected, resultSetToString(res));
+ res.close();
+
+ } finally {
+ executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
+ htable.close();
+ }
} finally {
- executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
- htable.close();
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
}
@Test
public void testColumnKeyValueSelectQuery() throws Exception {
- HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
- hTableDesc.addFamily(new HColumnDescriptor("col2"));
- hTableDesc.addFamily(new HColumnDescriptor("col3"));
- testingCluster.getHBaseUtil().createTable(hTableDesc);
-
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk1 text, col2_key text, col2_value text, col3 text) " +
- "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col2:key:,col2:value:,col3:', " +
- "'hbase.rowkey.delimiter'='_') LOCATION '%s/external_hbase_table'", tableSpaceUri);
- executeString(sql).close();
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
- assertTableExists("external_hbase_mapped_table");
+ try {
+ HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
+ hTableDesc.addFamily(new HColumnDescriptor("col2"));
+ hTableDesc.addFamily(new HColumnDescriptor("col3"));
+ testingCluster.getHBaseUtil().createTable(hTableDesc);
+
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk1 text, col2_key text, col2_value text, col3 text) " +
+ "USING hbase WITH ('table'='external_hbase_table', 'columns'=':key,col2:key:,col2:value:,col3:', " +
+ "'hbase.rowkey.delimiter'='_') LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ executeString(sql).close();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.getByName("cluster1").get();
- HConnection hconn = space.getConnection();
- HTableInterface htable = hconn.getTable("external_hbase_table");
+ assertTableExists("external_hbase_mapped_table");
- try {
- for (int i = 0; i < 10; i++) {
- Put put = new Put(Bytes.toBytes("rk-" + i));
- for (int j = 0; j < 5; j++) {
- put.add("col2".getBytes(), ("key-" + j).getBytes(), Bytes.toBytes("value-" + j));
+ HConnection hconn = ((HBaseTablespace)existing.get()).getConnection();
+ HTableInterface htable = hconn.getTable("external_hbase_table");
+
+ try {
+ for (int i = 0; i < 10; i++) {
+ Put put = new Put(Bytes.toBytes("rk-" + i));
+ for (int j = 0; j < 5; j++) {
+ put.add("col2".getBytes(), ("key-" + j).getBytes(), Bytes.toBytes("value-" + j));
+ }
+ put.add("col3".getBytes(), "".getBytes(), ("col3-value-" + i).getBytes());
+ htable.put(put);
}
- put.add("col3".getBytes(), "".getBytes(), ("col3-value-" + i).getBytes());
- htable.put(put);
- }
- ResultSet res = executeString("select * from external_hbase_mapped_table where rk1 >= 'rk-0'");
- assertResultSet(res);
- cleanupQuery(res);
+ ResultSet res = executeString("select * from external_hbase_mapped_table where rk1 >= 'rk-0'");
+ assertResultSet(res);
+ cleanupQuery(res);
+ } finally {
+ executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
+ htable.close();
+ }
} finally {
- executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
- htable.close();
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
}
@Test
public void testRowFieldSelectQuery() throws Exception {
- HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
- hTableDesc.addFamily(new HColumnDescriptor("col3"));
- testingCluster.getHBaseUtil().createTable(hTableDesc);
-
- String sql = String.format(
- "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk1 text, rk2 text, col3 text) " +
- "USING hbase WITH ('table'='external_hbase_table', 'columns'='0:key,1:key,col3:a', " +
- "'hbase.rowkey.delimiter'='_') LOCATION '%s/external_hbase_table'", tableSpaceUri);
- executeString(sql).close();
+ Optional<Tablespace> existing = TablespaceManager.removeTablespaceForTest("cluster1");
+ assertTrue(existing.isPresent());
- assertTableExists("external_hbase_mapped_table");
+ try {
+ HTableDescriptor hTableDesc = new HTableDescriptor(TableName.valueOf("external_hbase_table"));
+ hTableDesc.addFamily(new HColumnDescriptor("col3"));
+ testingCluster.getHBaseUtil().createTable(hTableDesc);
+
+ String sql = String.format(
+ "CREATE EXTERNAL TABLE external_hbase_mapped_table (rk1 text, rk2 text, col3 text) " +
+ "USING hbase WITH ('table'='external_hbase_table', 'columns'='0:key,1:key,col3:a', " +
+ "'hbase.rowkey.delimiter'='_') LOCATION '%s/external_hbase_table'", tableSpaceUri);
+ executeString(sql).close();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.getByName("cluster1").get();
- HConnection hconn = space.getConnection();
- HTableInterface htable = hconn.getTable("external_hbase_table");
+ assertTableExists("external_hbase_mapped_table");
- try {
- for (int i = 0; i < 100; i++) {
- Put put = new Put(("field1-" + i + "_field2-" + i).getBytes());
- put.add("col3".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
- htable.put(put);
- }
- ResultSet res = executeString("select * from external_hbase_mapped_table where rk1 > 'field1-20'");
- assertResultSet(res);
- cleanupQuery(res);
+ HConnection hconn = ((HBaseTablespace)existing.get()).getConnection();
+ HTableInterface htable = hconn.getTable("external_hbase_table");
+
+ try {
+ for (int i = 0; i < 100; i++) {
+ Put put = new Put(("field1-" + i + "_field2-" + i).getBytes());
+ put.add("col3".getBytes(), "a".getBytes(), ("a-" + i).getBytes());
+ htable.put(put);
+ }
+
+ ResultSet res = executeString("select * from external_hbase_mapped_table where rk1 > 'field1-20'");
+ assertResultSet(res);
+ cleanupQuery(res);
+ } finally {
+ executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
+ htable.close();
+ }
} finally {
- executeString("DROP TABLE external_hbase_mapped_table PURGE").close();
- htable.close();
+ TablespaceManager.addTableSpaceForTest(existing.get());
}
}
@@ -483,7 +525,7 @@ public class TestHBaseTable extends QueryTestCaseBase {
EvalNode evalNodeEq = new BinaryEval(EvalType.EQUAL, new FieldEval(tableDesc.getLogicalSchema().getColumn("rk")),
new ConstEval(new TextDatum("021")));
scanNode.setQual(evalNodeEq);
- Tablespace tablespace = TablespaceManager.getByName("cluster1").get();
+ Tablespace tablespace = TablespaceManager.getByName("cluster1");
List<Fragment> fragments = tablespace.getSplits("hbase_mapped_table", tableDesc, scanNode.getQual());
assertEquals(1, fragments.size());
assertEquals("021", new String(((HBaseFragment)fragments.get(0)).getStartRow()));
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core-tests/src/test/java/org/apache/tajo/storage/TestRowFile.java
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/java/org/apache/tajo/storage/TestRowFile.java b/tajo-core-tests/src/test/java/org/apache/tajo/storage/TestRowFile.java
index c1d5a97..011803d 100644
--- a/tajo-core-tests/src/test/java/org/apache/tajo/storage/TestRowFile.java
+++ b/tajo-core-tests/src/test/java/org/apache/tajo/storage/TestRowFile.java
@@ -71,7 +71,7 @@ public class TestRowFile {
TableMeta meta = CatalogUtil.newTableMeta("ROWFILE");
- FileTablespace sm = (FileTablespace) TablespaceManager.get(cluster.getDefaultFileSystem().getUri()).get();
+ FileTablespace sm = (FileTablespace) TablespaceManager.get(cluster.getDefaultFileSystem().getUri());
Path tablePath = new Path("/test");
Path dataPath = new Path(tablePath, "test.tbl");
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core-tests/src/test/resources/queries/TestCreateTable/negative/create_table_on_absent_tablespace.sql
----------------------------------------------------------------------
diff --git a/tajo-core-tests/src/test/resources/queries/TestCreateTable/negative/create_table_on_absent_tablespace.sql b/tajo-core-tests/src/test/resources/queries/TestCreateTable/negative/create_table_on_absent_tablespace.sql
new file mode 100644
index 0000000..8db9868
--- /dev/null
+++ b/tajo-core-tests/src/test/resources/queries/TestCreateTable/negative/create_table_on_absent_tablespace.sql
@@ -0,0 +1 @@
+CREATE TABLE default.LINEITEM (XXX TEXT) TABLESPACE unknown;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/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 36d80da..461e405 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
@@ -932,7 +932,7 @@ public class PhysicalPlannerImpl implements PhysicalPlanner {
PartitionedTableScanNode partitionedTableScanNode = (PartitionedTableScanNode) scanNode;
List<Fragment> fileFragments = TUtil.newList();
- FileTablespace space = (FileTablespace) TablespaceManager.get(scanNode.getTableDesc().getUri()).get();
+ FileTablespace space = (FileTablespace) TablespaceManager.get(scanNode.getTableDesc().getUri());
for (Path path : partitionedTableScanNode.getInputPaths()) {
fileFragments.addAll(TUtil.newList(space.split(scanNode.getCanonicalName(), path)));
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
index a8a1c78..01d3c0f 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/ColPartitionStoreExec.java
@@ -197,7 +197,7 @@ public abstract class ColPartitionStoreExec extends UnaryPhysicalExec {
actualFilePath = new Path(lastFileName + "_" + suffixId);
}
- appender = ((FileTablespace) TablespaceManager.get(lastFileName.toUri()).get())
+ appender = ((FileTablespace) TablespaceManager.get(lastFileName.toUri()))
.getAppender(meta, outSchema, actualFilePath);
appender.enableStats();
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/InsertRowsExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/InsertRowsExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/InsertRowsExec.java
index f3a24a7..6c2f7a5 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/InsertRowsExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/InsertRowsExec.java
@@ -65,7 +65,7 @@ public class InsertRowsExec extends UnaryPhysicalExec {
sumStats = new TableStats();
StoreTableNode storeTableNode = (StoreTableNode) plan;
- appender = TablespaceManager.get(storeTableNode.getUri()).get().getAppenderForInsertRow(
+ appender = TablespaceManager.get(storeTableNode.getUri()).getAppenderForInsertRow(
context.getQueryContext(),
context.getTaskId(), meta, storeTableNode.getTableSchema(), context.getOutputPath());
appender.enableStats();
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
index c2a6e99..a41d20a 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/SeqScanExec.java
@@ -268,7 +268,7 @@ public class SeqScanExec extends ScanExec {
} else {
- Tablespace tablespace = TablespaceManager.get(table.getUri()).get();
+ Tablespace tablespace = TablespaceManager.get(table.getUri());
this.scanner = tablespace.getScanner(
meta,
plan.getPhysicalSchema(),
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
index c317f7f..8db1f5d 100644
--- a/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
+++ b/tajo-core/src/main/java/org/apache/tajo/engine/planner/physical/StoreTableExec.java
@@ -93,12 +93,7 @@ public class StoreTableExec extends UnaryPhysicalExec {
lastFileName = new Path(lastFileName + "_" + suffixId);
}
- Optional<FileTablespace> spaceRes = TablespaceManager.get(lastFileName.toUri());
- if (!spaceRes.isPresent()) {
- throw new IllegalStateException("No Tablespace for " + lastFileName.toUri());
- }
-
- FileTablespace space = spaceRes.get();
+ FileTablespace space = TablespaceManager.get(lastFileName.toUri());
appender = space.getAppender(meta, appenderSchema, lastFileName);
if (suffixId > 0) {
@@ -107,7 +102,7 @@ public class StoreTableExec extends UnaryPhysicalExec {
}
} else {
Path stagingDir = context.getQueryContext().getStagingDir();
- appender = TablespaceManager.get(stagingDir.toUri()).get().getAppender(
+ appender = TablespaceManager.get(stagingDir.toUri()).getAppender(
context.getQueryContext(),
context.getTaskId(),
meta,
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
index 0d14d9a..d5e5dd5 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java
@@ -312,7 +312,7 @@ public class GlobalEngine extends AbstractService {
InsertNode iNode = rootNode.getChild();
Schema outSchema = iNode.getChild().getOutSchema();
- TablespaceManager.get(tableDesc.getUri()).get().verifySchemaToWrite(tableDesc, outSchema);
+ TablespaceManager.get(tableDesc.getUri()).verifySchemaToWrite(tableDesc, outSchema);
} catch (TajoException t) {
state.addVerification(t);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/master/exec/CreateTableExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/CreateTableExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/CreateTableExecutor.java
index 24f420c..f7b7bf2 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/CreateTableExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/CreateTableExecutor.java
@@ -132,23 +132,11 @@ public class CreateTableExecutor {
}
}
- private Tablespace getTablespaceHandler(@Nullable String tableSpaceName, @Nullable URI tableUri)
- throws UndefinedTablespaceException {
-
+ private Tablespace getTablespaceHandler(@Nullable String tableSpaceName, @Nullable URI tableUri) {
if (tableSpaceName != null) {
- Optional<Tablespace> ts = (Optional<Tablespace>) TablespaceManager.getByName(tableSpaceName);
- if (ts.isPresent()) {
- return ts.get();
- } else {
- throw new UndefinedTablespaceException(tableSpaceName);
- }
+ return TablespaceManager.getByName(tableSpaceName);
} else if (tableUri != null) {
- Optional<Tablespace> ts = TablespaceManager.get(tableUri);
- if (ts.isPresent()) {
- return ts.get();
- } else {
- throw new UndefinedTablespaceException(tableUri.toString());
- }
+ return TablespaceManager.get(tableUri);
} else {
return TablespaceManager.getDefault();
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
index c5d5838..15abf9e 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java
@@ -311,7 +311,7 @@ public class DDLExecutor {
if (purge) {
try {
- TablespaceManager.get(tableDesc.getUri()).get().purgeTable(tableDesc);
+ TablespaceManager.get(tableDesc.getUri()).purgeTable(tableDesc);
} catch (IOException e) {
throw new InternalError(e.getMessage());
}
@@ -355,7 +355,7 @@ public class DDLExecutor {
new UnsupportedException("table truncation on an external table '" + eachTableName + "'"));
}
- Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace space = TablespaceManager.get(tableDesc.getUri());
if (space instanceof FileTablespace) {
tableDescList.add(tableDesc);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
index ac40c4f..e520cdb 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultFileScanner.java
@@ -102,7 +102,7 @@ public class NonForwardQueryResultFileScanner implements NonForwardQueryResultSc
}
private void initSeqScanExec() throws IOException, TajoException {
- Tablespace tablespace = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace tablespace = TablespaceManager.get(tableDesc.getUri());
List<Fragment> fragments = Lists.newArrayList();
if (tableDesc.hasPartition()) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
index ffdb3f0..d5341d8 100644
--- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
+++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java
@@ -458,7 +458,7 @@ public class QueryExecutor {
String queryId = nodeUniqName + "_" + System.currentTimeMillis();
URI finalOutputUri = insertNode.getUri();
- Tablespace space = TablespaceManager.get(finalOutputUri).get();
+ Tablespace space = TablespaceManager.get(finalOutputUri);
TableMeta tableMeta = new TableMeta(insertNode.getStorageType(), insertNode.getOptions());
tableMeta.putOption(StorageConstants.INSERT_DIRECTLY, Boolean.TRUE.toString());
@@ -564,7 +564,7 @@ public class QueryExecutor {
TableDesc tableDesc = PlannerUtil.getTableDesc(catalog, plan.getRootBlock().getRoot());
if (tableDesc != null) {
- Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace space = TablespaceManager.get(tableDesc.getUri());
FormatProperty formatProperty = space.getFormatProperty(tableDesc.getMeta());
if (!formatProperty.isInsertable()) {
@@ -603,7 +603,7 @@ public class QueryExecutor {
TableDesc tableDesc = PlannerUtil.getTableDesc(planner.getCatalog(), rootNode.getChild());
if (tableDesc != null) {
- Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace space = TablespaceManager.get(tableDesc.getUri());
space.rewritePlan(context, plan);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java
index 1ec45d1..f06d28c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java
@@ -470,7 +470,7 @@ public class Query implements EventHandler<QueryEvent> {
QueryContext context = query.context.getQueryContext();
if (lastStage != null && context.hasOutputTableUri()) {
- Tablespace space = TablespaceManager.get(context.getOutputTableUri()).get();
+ Tablespace space = TablespaceManager.get(context.getOutputTableUri());
try {
LogicalRootNode rootNode = lastStage.getMasterPlan().getLogicalPlan().getRootBlock().getRoot();
space.rollbackTable(rootNode.getChild());
@@ -493,7 +493,7 @@ public class Query implements EventHandler<QueryEvent> {
// If there is not tabledesc, it is a select query without insert or ctas.
// In this case, we should use default tablespace.
- Tablespace space = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, "")).get();
+ Tablespace space = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, ""));
Path finalOutputDir = space.commitTable(
query.context.getQueryContext(),
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
index 1313dad..46e48e6 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java
@@ -322,7 +322,7 @@ public class QueryMasterTask extends CompositeService {
optimizer.optimize(queryContext, plan);
// when a given uri is null, TablespaceManager.get will return the default tablespace.
- space = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, "")).get();
+ space = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, ""));
space.rewritePlan(queryContext, plan);
initStagingDir();
@@ -379,7 +379,7 @@ public class QueryMasterTask extends CompositeService {
URI stagingDir;
try {
- Tablespace tablespace = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, "")).get();
+ Tablespace tablespace = TablespaceManager.get(queryContext.get(QueryVars.OUTPUT_TABLE_URI, ""));
TableDesc desc = PlannerUtil.getOutputTableDesc(plan);
FormatProperty formatProperty = tablespace.getFormatProperty(desc.getMeta());
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
index 3ce86b1..bddf198 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Repartitioner.java
@@ -113,7 +113,7 @@ public class Repartitioner {
// if table has no data, tablespace will return empty FileFragment.
// So, we need to handle FileFragment by its size.
// If we don't check its size, it can cause IndexOutOfBoundsException.
- Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace space = TablespaceManager.get(tableDesc.getUri());
List<Fragment> fileFragments = space.getSplits(scans[i].getCanonicalName(), tableDesc, null);
if (fileFragments.size() > 0) {
fragments[i] = fileFragments.get(0);
@@ -378,7 +378,7 @@ public class Repartitioner {
Path[] partitionScanPaths = null;
TableDesc tableDesc = masterContext.getTableDesc(eachScan);
- Tablespace space = TablespaceManager.get(tableDesc.getUri()).get();
+ Tablespace space = TablespaceManager.get(tableDesc.getUri());
if (eachScan.getType() == NodeType.PARTITIONS_SCAN) {
@@ -507,7 +507,7 @@ public class Repartitioner {
Path[] partitionScanPaths = null;
- Tablespace space = TablespaceManager.get(desc.getUri()).get();
+ Tablespace space = TablespaceManager.get(desc.getUri());
if (scan.getType() == NodeType.PARTITIONS_SCAN) {
PartitionedTableScanNode partitionScan = (PartitionedTableScanNode) scan;
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
index 125c83c..282edcc 100644
--- a/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
+++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/Stage.java
@@ -1132,7 +1132,7 @@ public class Stage implements EventHandler<StageEvent> {
TableDesc table = stage.context.getTableDesc(scan);
Collection<Fragment> fragments;
- Tablespace tablespace = TablespaceManager.get(scan.getTableDesc().getUri()).get();
+ Tablespace tablespace = TablespaceManager.get(scan.getTableDesc().getUri());
// Depending on scanner node's type, it creates fragments. If scan is for
// a partitioned table, It will creates lots fragments for all partitions.
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-core/src/main/java/org/apache/tajo/worker/TaskImpl.java
----------------------------------------------------------------------
diff --git a/tajo-core/src/main/java/org/apache/tajo/worker/TaskImpl.java b/tajo-core/src/main/java/org/apache/tajo/worker/TaskImpl.java
index 4e3a8bf..a8e874c 100644
--- a/tajo-core/src/main/java/org/apache/tajo/worker/TaskImpl.java
+++ b/tajo-core/src/main/java/org/apache/tajo/worker/TaskImpl.java
@@ -142,7 +142,7 @@ public class TaskImpl implements Task {
this.sortComp = new BaseTupleComparator(finalSchema, sortNode.getSortKeys());
}
} else {
- Path outFilePath = ((FileTablespace) TablespaceManager.get(queryContext.getStagingDir().toUri()).get())
+ Path outFilePath = ((FileTablespace) TablespaceManager.get(queryContext.getStagingDir().toUri()))
.getAppenderFilePath(getId(), queryContext.getStagingDir());
LOG.info("Output File Path: " + outFilePath);
context.setOutputPath(outFilePath);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/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 a1fa857..85d5d51 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
@@ -33,6 +33,9 @@ import org.apache.hadoop.fs.Path;
import org.apache.tajo.TajoConstants;
import org.apache.tajo.catalog.MetadataProvider;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.exception.TajoRuntimeException;
+import org.apache.tajo.exception.UndefinedTablespaceException;
+import org.apache.tajo.exception.UndefinedTablespaceHandlerException;
import org.apache.tajo.exception.UnsupportedException;
import org.apache.tajo.storage.fragment.Fragment;
import org.apache.tajo.util.JavaResourceUtil;
@@ -276,10 +279,11 @@ public class TablespaceManager implements StorageService {
public static final String KEY_SPACES = "spaces";
private static Tablespace initializeTableSpace(String spaceName, URI uri, JSONObject spaceDesc) {
- Class<? extends Tablespace> clazz = TABLE_SPACE_HANDLERS.get(UriUtil.getScheme(uri));
+ final String scheme = UriUtil.getScheme(uri);
+ Class<? extends Tablespace> clazz = TABLE_SPACE_HANDLERS.get(scheme);
if (clazz == null) {
- throw new RuntimeException("Not found Tablespace handler for " + uri.toString());
+ throw new TajoRuntimeException(new UndefinedTablespaceHandlerException(scheme));
}
try {
@@ -319,6 +323,18 @@ public class TablespaceManager implements StorageService {
return Optional.fromNullable(existing);
}
+ @VisibleForTesting
+ public static Optional<Tablespace> removeTablespaceForTest(String name) {
+ Tablespace existing = null;
+ synchronized (SPACES_URIS_MAP) {
+ URI uri = SPACES_URIS_MAP.remove(name);
+ if (uri != null) {
+ existing = TABLE_SPACES.remove(uri);
+ }
+ }
+ return Optional.fromNullable(existing);
+ }
+
public Iterable<String> getSupportSchemes() {
return TABLE_SPACE_HANDLERS.keySet();
}
@@ -330,10 +346,10 @@ public class TablespaceManager implements StorageService {
* @param <T> Tablespace class type
* @return Tablespace. If uri is null, the default tablespace will be returned.
*/
- public static <T extends Tablespace> Optional<T> get(@Nullable String uri) {
+ public static <T extends Tablespace> T get(@Nullable String uri) {
if (uri == null || uri.isEmpty()) {
- return (Optional<T>) Optional.of(getDefault());
+ return getDefault();
}
Tablespace lastOne = null;
@@ -345,7 +361,17 @@ public class TablespaceManager implements StorageService {
lastOne = entry.getValue();
}
}
- return (Optional<T>) Optional.fromNullable(lastOne);
+
+ if (lastOne == null) {
+ lastOne = initializeTableSpace(UUID.randomUUID().toString(), URI.create(uri), new JSONObject());
+ try {
+ lastOne.init(systemConf);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ return (T) lastOne;
}
/**
@@ -355,11 +381,11 @@ public class TablespaceManager implements StorageService {
* @param <T> Tablespace class type
* @return Tablespace. If uri is null, the default tablespace will be returned.
*/
- public static <T extends Tablespace> Optional<T> get(@Nullable URI uri) {
+ public static <T extends Tablespace> T get(@Nullable URI uri) {
if (uri == null) {
- return (Optional<T>) Optional.of(getDefault());
+ return getDefault();
} else {
- return (Optional<T>) get(uri.toString());
+ return (T) get(uri.toString());
}
}
@@ -369,19 +395,19 @@ public class TablespaceManager implements StorageService {
* @return
*/
public static <T extends Tablespace> T getDefault() {
- return (T) getByName(DEFAULT_TABLESPACE_NAME).get();
+ return (T) getByName(DEFAULT_TABLESPACE_NAME);
}
public static <T extends Tablespace> T getLocalFs() {
- return (T) get(LOCAL_FS_URI).get();
+ return (T) get(LOCAL_FS_URI);
}
- public static Optional<? extends Tablespace> getByName(String name) {
+ public static <T extends Tablespace> T getByName(String name) {
URI uri = SPACES_URIS_MAP.get(name);
if (uri != null) {
- return Optional.of(TABLE_SPACES.get(uri));
+ return (T) TABLE_SPACES.get(uri);
} else {
- return Optional.absent();
+ throw new TajoRuntimeException(new UndefinedTablespaceException(name));
}
}
@@ -398,13 +424,13 @@ public class TablespaceManager implements StorageService {
@Override
public URI getTableURI(@Nullable String spaceName, String databaseName, String tableName) {
- Tablespace space = spaceName == null ? getDefault() : getByName(spaceName).get();
+ Tablespace space = spaceName == null ? getDefault() : getByName(spaceName);
return space.getTableUri(databaseName, tableName);
}
@Override
public long getTableVolumn(URI tableUri) throws UnsupportedException {
- return get(tableUri).get().getTableVolume(tableUri);
+ return get(tableUri).getTableVolume(tableUri);
}
public static Iterable<Tablespace> getAllTablespaces() {
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-common/src/main/resources/storage-default.json
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-common/src/main/resources/storage-default.json b/tajo-storage/tajo-storage-common/src/main/resources/storage-default.json
index 3ede2d4..a24f301 100644
--- a/tajo-storage/tajo-storage-common/src/main/resources/storage-default.json
+++ b/tajo-storage/tajo-storage-common/src/main/resources/storage-default.json
@@ -1,24 +1,36 @@
{
"storages": {
- "hdfs": {
- "handler": "org.apache.tajo.storage.FileTablespace",
- "default-format": "text"
- },
"file": {
"handler": "org.apache.tajo.storage.FileTablespace",
"default-format": "text"
},
- "s3": {
- "handler": "org.apache.tajo.storage.FileTablespace",
- "default-format": "text"
- },
"hbase:zk": {
"handler": "org.apache.tajo.storage.hbase.HBaseTablespace",
"default-format": "hbase"
},
+ "hdfs": {
+ "handler": "org.apache.tajo.storage.FileTablespace",
+ "default-format": "text"
+ },
"jdbc:postgresql": {
"handler": "org.apache.tajo.storage.pgsql.PgSQLTablespace",
"default-format": "rowstore"
+ },
+ "s3": {
+ "handler": "org.apache.tajo.storage.FileTablespace",
+ "default-format": "text"
+ },
+ "s3a": {
+ "handler": "org.apache.tajo.storage.FileTablespace",
+ "default-format": "text"
+ },
+ "s3n": {
+ "handler": "org.apache.tajo.storage.FileTablespace",
+ "default-format": "text"
+ },
+ "swift": {
+ "handler": "org.apache.tajo.storage.FileTablespace",
+ "default-format": "text"
}
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBasePutAppender.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBasePutAppender.java b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBasePutAppender.java
index 7943134..20b1a08 100644
--- a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBasePutAppender.java
+++ b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBasePutAppender.java
@@ -47,7 +47,7 @@ public class HBasePutAppender extends AbstractHBaseAppender {
public void init() throws IOException {
super.init();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.get(uri).get();
+ HBaseTablespace space = (HBaseTablespace) TablespaceManager.get(uri);
HConnection hconn = space.getConnection();
htable = hconn.getTable(columnMapping.getHbaseTableName());
htable.setAutoFlushTo(false);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
index 90f7aa0..55d27a1 100644
--- a/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
+++ b/tajo-storage/tajo-storage-hbase/src/main/java/org/apache/tajo/storage/hbase/HBaseScanner.java
@@ -144,7 +144,7 @@ public class HBaseScanner implements Scanner {
rowKeyDelimiter = columnMapping.getRowKeyDelimiter();
rowKeyFieldIndexes = columnMapping.getRowKeyFieldIndexes();
- HBaseTablespace space = (HBaseTablespace) TablespaceManager.get(fragment.getUri()).get();
+ HBaseTablespace space = (HBaseTablespace) TablespaceManager.get(fragment.getUri());
hbaseConf = space.getHbaseConf();
initScanner();
}
@@ -192,7 +192,7 @@ public class HBaseScanner implements Scanner {
}
if (htable == null) {
- HConnection hconn = ((HBaseTablespace) TablespaceManager.get(fragment.getUri()).get()).getConnection();
+ HConnection hconn = ((HBaseTablespace) TablespaceManager.get(fragment.getUri())).getConnection();
htable = hconn.getTable(fragment.getHbaseTableName());
}
scanner = htable.getScanner(scan);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestHBaseTableSpace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestHBaseTableSpace.java b/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestHBaseTableSpace.java
index 56ca9be..913c586 100644
--- a/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestHBaseTableSpace.java
+++ b/tajo-storage/tajo-storage-hbase/src/test/java/org/apache/tajo/storage/hbase/TestHBaseTableSpace.java
@@ -58,8 +58,8 @@ public class TestHBaseTableSpace {
@Test
public void testTablespaceHandler() throws Exception {
- assertTrue((TablespaceManager.getByName("cluster1").get()) instanceof HBaseTablespace);
- assertTrue((TablespaceManager.get(URI.create("hbase:zk://host1:2171")).get())
+ assertTrue((TablespaceManager.getByName("cluster1")) instanceof HBaseTablespace);
+ assertTrue((TablespaceManager.get(URI.create("hbase:zk://host1:2171")))
instanceof HBaseTablespace);
}
@@ -73,7 +73,7 @@ public class TestHBaseTableSpace {
EvalNode evalNodeA = new BinaryEval(EvalType.AND, evalNode1, evalNode2);
scanNode.setQual(evalNodeA);
- HBaseTablespace storageManager = (HBaseTablespace) TablespaceManager.getByName("cluster1").get();
+ HBaseTablespace storageManager = (HBaseTablespace) TablespaceManager.getByName("cluster1");
List<Set<EvalNode>> indexEvals =
storageManager.findIndexablePredicateSet(scanNode.getQual(), new Column[]{rowkeyColumn});
assertNotNull(indexEvals);
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileAppender.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileAppender.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileAppender.java
index efe2bfd..eeeadcb 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileAppender.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileAppender.java
@@ -58,13 +58,7 @@ public abstract class FileAppender implements Appender {
throw new IllegalArgumentException("Configuration must be an instance of TajoConf");
}
- Optional<FileTablespace> spaceResult = TablespaceManager.get(workDir.toUri());
-
- if (!spaceResult.isPresent()) {
- throw new IllegalStateException("No TableSpace for " + workDir.toUri());
- }
-
- FileTablespace space = spaceResult.get();
+ FileTablespace space = TablespaceManager.get(workDir.toUri());
this.path = space.getAppenderFilePath(taskAttemptId, workDir);
} else {
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileTablespace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileTablespace.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileTablespace.java
index af981bb..1b0952e 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileTablespace.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/FileTablespace.java
@@ -720,12 +720,7 @@ public class FileTablespace extends Tablespace {
// for temporarily written in the storage directory
stagingDir = fs.makeQualified(new Path(stagingRootPath, queryId));
} else {
- Optional<Tablespace> spaceResult = TablespaceManager.get(outputPath);
- if (!spaceResult.isPresent()) {
- throw new IOException("No registered Tablespace for " + outputPath);
- }
-
- Tablespace space = spaceResult.get();
+ Tablespace space = TablespaceManager.get(outputPath);
if (space.getProperty().isMovable()) { // checking if this tablespace allows MOVE operation
// If this space allows move operation, the staging directory will be underneath the final output table uri.
stagingDir = fs.makeQualified(StorageUtil.concatPath(outputPath, TMP_STAGING_DIR_PREFIX, queryId));
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/HashShuffleAppenderManager.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/HashShuffleAppenderManager.java b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/HashShuffleAppenderManager.java
index 1d32291..b118044 100644
--- a/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/HashShuffleAppenderManager.java
+++ b/tajo-storage/tajo-storage-hdfs/src/main/java/org/apache/tajo/storage/HashShuffleAppenderManager.java
@@ -85,7 +85,7 @@ public class HashShuffleAppenderManager {
fs.mkdirs(dataFile.getParent());
}
- FileTablespace space = (FileTablespace) TablespaceManager.get(dataFile.toUri()).get();
+ FileTablespace space = (FileTablespace) TablespaceManager.get(dataFile.toUri());
FileAppender appender = (FileAppender) space.getAppender(meta, outSchema, dataFile);
appender.enableStats();
appender.init();
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
index f536514..627e4ed 100644
--- a/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
+++ b/tajo-storage/tajo-storage-hdfs/src/test/java/org/apache/tajo/storage/TestFileTablespace.java
@@ -282,10 +282,10 @@ public class TestFileTablespace {
existingTs = TablespaceManager.addTableSpaceForTest(distTablespace);
/* Distributed FileSystem */
- space = (FileTablespace) TablespaceManager.get(uri).get();
+ space = (FileTablespace) TablespaceManager.get(uri);
assertEquals(cluster.getFileSystem().getUri(), space.getFileSystem().getUri());
- space = (FileTablespace) TablespaceManager.getByName("testGetFileTablespace").get();
+ space = (FileTablespace) TablespaceManager.getByName("testGetFileTablespace");
assertEquals(cluster.getFileSystem().getUri(), space.getFileSystem().getUri());
} finally {
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLJdbcTableSpace.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLJdbcTableSpace.java b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLJdbcTableSpace.java
index cf4fe12..05b26e8 100644
--- a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLJdbcTableSpace.java
+++ b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLJdbcTableSpace.java
@@ -18,6 +18,7 @@
package org.apache.tajo.storage.pgsql;
+import com.google.common.base.Optional;
import net.minidev.json.JSONObject;
import org.apache.tajo.catalog.MetadataProvider;
import org.apache.tajo.catalog.TableDesc;
@@ -44,31 +45,31 @@ public class TestPgSQLJdbcTableSpace {
@Test(timeout = 1000)
public void testTablespaceHandler() throws Exception {
- assertTrue((TablespaceManager.getByName("pgsql_cluster").get()) instanceof PgSQLTablespace);
- assertEquals("pgsql_cluster", (TablespaceManager.getByName("pgsql_cluster").get().getName()));
+ assertTrue((TablespaceManager.getByName("pgsql_cluster")) instanceof PgSQLTablespace);
+ assertEquals("pgsql_cluster", (TablespaceManager.getByName("pgsql_cluster").getName()));
- assertTrue((TablespaceManager.get(jdbcUrl).get()) instanceof PgSQLTablespace);
- assertTrue((TablespaceManager.get(jdbcUrl + "&table=tb1").get()) instanceof PgSQLTablespace);
+ assertTrue((TablespaceManager.get(jdbcUrl)) instanceof PgSQLTablespace);
+ assertTrue((TablespaceManager.get(jdbcUrl + "&table=tb1")) instanceof PgSQLTablespace);
- assertEquals(jdbcUrl, TablespaceManager.get(jdbcUrl).get().getUri().toASCIIString());
- assertTrue(TablespaceManager.get(jdbcUrl).get().getMetadataProvider() instanceof PgSQLMetadataProvider);
+ assertEquals(jdbcUrl, TablespaceManager.get(jdbcUrl).getUri().toASCIIString());
+ assertTrue(TablespaceManager.get(jdbcUrl).getMetadataProvider() instanceof PgSQLMetadataProvider);
}
@Test(timeout = 1000, expected = TajoRuntimeException.class)
public void testCreateTable() throws IOException, TajoException {
- Tablespace space = TablespaceManager.getByName("pgsql_cluster").get();
+ Tablespace space = TablespaceManager.getByName("pgsql_cluster");
space.createTable(null, false);
}
@Test(timeout = 1000, expected = TajoRuntimeException.class)
public void testDropTable() throws IOException, TajoException {
- Tablespace space = TablespaceManager.getByName("pgsql_cluster").get();
+ Tablespace space = TablespaceManager.getByName("pgsql_cluster");
space.purgeTable(null);
}
@Test(timeout = 1000)
public void testGetSplits() throws IOException, TajoException {
- Tablespace space = TablespaceManager.getByName("pgsql_cluster").get();
+ Tablespace space = TablespaceManager.getByName("pgsql_cluster");
MetadataProvider provider = space.getMetadataProvider();
TableDesc table = provider.getTableDesc(null, "lineitem");
List<Fragment> fragments = space.getSplits("lineitem", table, null);
@@ -111,8 +112,6 @@ public class TestPgSQLJdbcTableSpace {
public static JSONObject getJsonTablespace(Map<String, String> connProperties)
throws IOException {
- String uri = PgSQLTestServer.getInstance().getJdbcUrl().split("\\?")[0];
-
JSONObject configElements = new JSONObject();
configElements.put(JdbcTablespace.CONFIG_KEY_MAPPED_DATABASE, PgSQLTestServer.DATABASE_NAME);
@@ -124,4 +123,15 @@ public class TestPgSQLJdbcTableSpace {
return configElements;
}
+
+ @Test
+ public void testTemporaryTablespace() {
+ Optional<Tablespace> ts = TablespaceManager.removeTablespaceForTest("pgsql_cluster");
+ assertTrue(ts.isPresent());
+
+ Tablespace tempTs = TablespaceManager.get(jdbcUrl);
+ assertNotNull(tempTs);
+
+ TablespaceManager.addTableSpaceForTest(ts.get());
+ }
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLMetadataProvider.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLMetadataProvider.java b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLMetadataProvider.java
index 2221f94..2af4179 100644
--- a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLMetadataProvider.java
+++ b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLMetadataProvider.java
@@ -39,28 +39,28 @@ public class TestPgSQLMetadataProvider {
@Test
public void testGetTablespaceName() throws Exception {
- Tablespace tablespace = TablespaceManager.get(jdbcUrl).get();
+ Tablespace tablespace = TablespaceManager.get(jdbcUrl);
MetadataProvider provider = tablespace.getMetadataProvider();
assertEquals("pgsql_cluster", provider.getTablespaceName());
}
@Test
public void testGetDatabaseName() throws Exception {
- Tablespace tablespace = TablespaceManager.get(jdbcUrl).get();
+ Tablespace tablespace = TablespaceManager.get(jdbcUrl);
MetadataProvider provider = tablespace.getMetadataProvider();
assertEquals("tpch", provider.getDatabaseName());
}
@Test
public void testGetSchemas() throws Exception {
- Tablespace tablespace = TablespaceManager.get(jdbcUrl).get();
+ Tablespace tablespace = TablespaceManager.get(jdbcUrl);
MetadataProvider provider = tablespace.getMetadataProvider();
assertTrue(provider.getSchemas().isEmpty());
}
@Test
public void testGetTables() throws Exception {
- Tablespace tablespace = TablespaceManager.get(jdbcUrl).get();
+ Tablespace tablespace = TablespaceManager.get(jdbcUrl);
MetadataProvider provider = tablespace.getMetadataProvider();
final Set<String> expected = Sets.newHashSet(PgSQLTestServer.TPCH_TABLES);
@@ -72,7 +72,7 @@ public class TestPgSQLMetadataProvider {
@Test
public void testGetTableDescriptor() throws Exception {
- Tablespace tablespace = TablespaceManager.get(jdbcUrl).get();
+ Tablespace tablespace = TablespaceManager.get(jdbcUrl);
MetadataProvider provider = tablespace.getMetadataProvider();
for (String tableName : PgSQLTestServer.TPCH_TABLES) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/4a962885/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLQueryTests.java
----------------------------------------------------------------------
diff --git a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLQueryTests.java b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLQueryTests.java
index 9655968..5b52105 100644
--- a/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLQueryTests.java
+++ b/tajo-storage/tajo-storage-pgsql/src/test/java/org/apache/tajo/storage/pgsql/TestPgSQLQueryTests.java
@@ -26,7 +26,6 @@ import org.apache.tajo.storage.TablespaceManager;
import org.junit.BeforeClass;
import org.junit.Test;
-import java.io.IOException;
import java.util.HashMap;
import java.util.Map;