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/08/13 13:52:42 UTC
[5/8] tajo git commit: TAJO-1748: Refine client APIs to throw
specific exceptions.
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/OracleStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/OracleStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/OracleStore.java
index 4b7e6a3..1911507 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/OracleStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/OracleStore.java
@@ -18,19 +18,18 @@
package org.apache.tajo.catalog.store;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.tajo.exception.TajoException;
+
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.tajo.catalog.exception.CatalogException;
-import org.apache.tajo.exception.InternalException;
-
public class OracleStore extends AbstractDBStore {
private static final String CATALOG_DRIVER = "oracle.jdbc.OracleDriver";
- public OracleStore(Configuration conf) throws InternalException {
+ public OracleStore(Configuration conf) {
super(conf);
}
@@ -50,7 +49,7 @@ public class OracleStore extends AbstractDBStore {
}
@Override
- protected void createDatabaseDependants() throws CatalogException {
+ protected void createDatabaseDependants() {
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/PostgreSQLStore.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/PostgreSQLStore.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/PostgreSQLStore.java
index 6089fdd..df2ddde 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/PostgreSQLStore.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/PostgreSQLStore.java
@@ -18,19 +18,17 @@
package org.apache.tajo.catalog.store;
+import org.apache.hadoop.conf.Configuration;
+
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.tajo.catalog.exception.CatalogException;
-import org.apache.tajo.exception.InternalException;
-
public class PostgreSQLStore extends AbstractDBStore {
private static final String CATALOG_DRIVER = "org.postgresql.Driver";
- public PostgreSQLStore(Configuration conf) throws InternalException {
+ public PostgreSQLStore(Configuration conf) {
super(conf);
}
@@ -50,7 +48,7 @@ public class PostgreSQLStore extends AbstractDBStore {
}
@Override
- protected void createDatabaseDependants() throws CatalogException {
+ protected void createDatabaseDependants() {
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
index 9d767a0..c36426e 100644
--- a/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
+++ b/tajo-catalog/tajo-catalog-server/src/main/java/org/apache/tajo/catalog/store/XMLCatalogSchemaManager.java
@@ -18,27 +18,14 @@
package org.apache.tajo.catalog.store;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.sql.Connection;
-import java.sql.DatabaseMetaData;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.tajo.catalog.CatalogConstants;
+import org.apache.tajo.catalog.CatalogUtil;
+import org.apache.tajo.catalog.store.object.*;
+import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.TajoInternalError;
+import org.apache.tajo.util.TUtil;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
@@ -48,15 +35,16 @@ import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.tajo.catalog.CatalogConstants;
-import org.apache.tajo.catalog.CatalogUtil;
-import org.apache.tajo.catalog.exception.CatalogException;
-import org.apache.tajo.catalog.store.object.*;
-import org.apache.tajo.exception.TajoInternalError;
-import org.apache.tajo.util.TUtil;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.sql.*;
+import java.util.*;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
public class XMLCatalogSchemaManager {
protected final Log LOG = LogFactory.getLog(getClass());
@@ -76,8 +64,7 @@ public class XMLCatalogSchemaManager {
}
}
- protected String getDropSQL(DatabaseObjectType type, String name)
- throws CatalogException {
+ protected String getDropSQL(DatabaseObjectType type, String name) {
SQLObject foundDropQuery = null;
String sqlStatement = "DROP " + type.toString() + " " + name;
@@ -101,7 +88,7 @@ public class XMLCatalogSchemaManager {
return sqlStatement;
}
- public void dropBaseSchema(Connection conn) throws CatalogException {
+ public void dropBaseSchema(Connection conn) {
if (!isLoaded()) {
throw new TajoInternalError("Schema files are not loaded yet.");
}
@@ -271,7 +258,7 @@ public class XMLCatalogSchemaManager {
return result;
}
- public void createBaseSchema(Connection conn) throws CatalogException {
+ public void createBaseSchema(Connection conn) {
Statement stmt;
if (!isLoaded()) {
@@ -347,7 +334,7 @@ public class XMLCatalogSchemaManager {
CatalogUtil.closeQuietly(stmt);
}
- public boolean catalogAlreadyExists(Connection conn) throws CatalogException {
+ public boolean catalogAlreadyExists(Connection conn) {
boolean result = false;
try {
List<String> constants = TUtil.newList();
@@ -375,7 +362,7 @@ public class XMLCatalogSchemaManager {
return result;
}
- public boolean isInitialized(Connection conn) throws CatalogException {
+ public boolean isInitialized(Connection conn) {
if (!isLoaded()) {
throw new TajoInternalError("Database schema files are not loaded.");
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
index e2a096a..1d628f2 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestCatalog.java
@@ -22,7 +22,6 @@ import com.google.common.collect.Sets;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.TajoConstants;
import org.apache.tajo.catalog.dictionary.InfoSchemaMetadataDictionary;
-import org.apache.tajo.catalog.exception.UndefinedFunctionException;
import org.apache.tajo.catalog.partition.PartitionDesc;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
@@ -33,7 +32,9 @@ import org.apache.tajo.catalog.store.*;
import org.apache.tajo.common.TajoDataTypes;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.conf.TajoConf;
+import org.apache.tajo.exception.TajoException;
import org.apache.tajo.exception.TajoInternalError;
+import org.apache.tajo.exception.UndefinedFunctionException;
import org.apache.tajo.function.Function;
import org.apache.tajo.util.CommonTestingUtil;
import org.apache.tajo.util.KeyValueSet;
@@ -141,11 +142,11 @@ public class TestCatalog {
//////////////////////////////////////////////////////////////////////////////
assertFalse(catalog.existTablespace("space1"));
- assertTrue(catalog.createTablespace("space1", "hdfs://xxx.com/warehouse"));
+ catalog.createTablespace("space1", "hdfs://xxx.com/warehouse");
assertTrue(catalog.existTablespace("space1"));
assertFalse(catalog.existTablespace("space2"));
- assertTrue(catalog.createTablespace("space2", "hdfs://yyy.com/warehouse"));
+ catalog.createTablespace("space2", "hdfs://yyy.com/warehouse");
assertTrue(catalog.existTablespace("space2"));
//////////////////////////////////////////////////////////////////////////////
@@ -199,32 +200,32 @@ public class TestCatalog {
//////////////////////////////////////////////////////////////////////////////
// Clean up
//////////////////////////////////////////////////////////////////////////////
- assertTrue(catalog.dropTablespace("space1"));
+ catalog.dropTablespace("space1");
assertFalse(catalog.existTablespace("space1"));
- assertTrue(catalog.dropTablespace("space2"));
+ catalog.dropTablespace("space2");
assertFalse(catalog.existTablespace("space2"));
}
@Test
public void testCreateAndDropDatabases() throws Exception {
assertFalse(catalog.existDatabase("testCreateAndDropDatabases"));
- assertTrue(catalog.createDatabase("testCreateAndDropDatabases", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("testCreateAndDropDatabases", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("testCreateAndDropDatabases"));
- assertTrue(catalog.dropDatabase("testCreateAndDropDatabases"));
+ catalog.dropDatabase("testCreateAndDropDatabases");
}
@Test
public void testCreateAndDropDatabaseWithCharacterSensitivity() throws Exception {
assertFalse(catalog.existDatabase("TestDatabase1"));
assertFalse(catalog.existDatabase("testDatabase1"));
- assertTrue(catalog.createDatabase("TestDatabase1", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("TestDatabase1", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("TestDatabase1"));
assertFalse(catalog.existDatabase("testDatabase1"));
- assertTrue(catalog.createDatabase("testDatabase1", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("testDatabase1", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("TestDatabase1"));
assertTrue(catalog.existDatabase("testDatabase1"));
- assertTrue(catalog.dropDatabase("TestDatabase1"));
- assertTrue(catalog.dropDatabase("testDatabase1"));
+ catalog.dropDatabase("TestDatabase1");
+ catalog.dropDatabase("testDatabase1");
}
@Test
@@ -236,7 +237,7 @@ public class TestCatalog {
for (int i = 0; i < NUM; i++) {
String databaseName = namePrefix + i;
assertFalse(catalog.existDatabase(databaseName));
- assertTrue(catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase(databaseName));
createdDatabases.add(databaseName);
}
@@ -252,7 +253,7 @@ public class TestCatalog {
Collections.shuffle(createdDatabases);
for (String tobeDropped : createdDatabases) {
assertTrue(catalog.existDatabase(tobeDropped));
- assertTrue(catalog.dropDatabase(tobeDropped));
+ catalog.dropDatabase(tobeDropped);
assertFalse(catalog.existDatabase(tobeDropped));
}
}
@@ -273,16 +274,16 @@ public class TestCatalog {
@Test
public void testCreateAndDropTable() throws Exception {
- assertTrue(catalog.createDatabase("tmpdb1", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("tmpdb1", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("tmpdb1"));
- assertTrue(catalog.createDatabase("tmpdb2", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("tmpdb2", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("tmpdb2"));
TableDesc table1 = createMockupTable("tmpdb1", "table1");
- assertTrue(catalog.createTable(table1));
+ catalog.createTable(table1);
TableDesc table2 = createMockupTable("tmpdb2", "table2");
- assertTrue(catalog.createTable(table2));
+ catalog.createTable(table2);
Set<String> tmpdb1 = Sets.newHashSet(catalog.getAllTableNames("tmpdb1"));
assertEquals(1, tmpdb1.size());
@@ -293,21 +294,21 @@ public class TestCatalog {
assertEquals(1, tmpdb2.size());
assertTrue(tmpdb2.contains("table2"));
- assertTrue(catalog.dropDatabase("tmpdb1"));
+ catalog.dropDatabase("tmpdb1");
assertFalse(catalog.existDatabase("tmpdb1"));
tmpdb2 = Sets.newHashSet(catalog.getAllTableNames("tmpdb2"));
assertEquals(1, tmpdb2.size());
assertTrue(tmpdb2.contains("table2"));
- assertTrue(catalog.dropDatabase("tmpdb2"));
+ catalog.dropDatabase("tmpdb2");
assertFalse(catalog.existDatabase("tmpdb2"));
}
@Test
public void testCreateAndDropTableWithCharacterSensivity() throws Exception {
String databaseName = "TestDatabase1";
- assertTrue(catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase(databaseName));
String tableName = "TestTable1";
@@ -322,7 +323,7 @@ public class TestCatalog {
new TableMeta("TEXT", new KeyValueSet()),
path.toUri(), true);
- assertTrue(catalog.createTable(table));
+ catalog.createTable(table);
tableName = "testTable1";
schema = new Schema();
@@ -336,9 +337,9 @@ public class TestCatalog {
new TableMeta("TEXT", new KeyValueSet()),
path.toUri(), true);
- assertTrue(catalog.createTable(table));
+ catalog.createTable(table);
- assertTrue(catalog.dropDatabase(databaseName));
+ catalog.dropDatabase(databaseName);
}
static String dbPrefix = "db_";
@@ -347,7 +348,7 @@ public class TestCatalog {
static final int TABLE_NUM_PER_DB = 3;
static final int TOTAL_TABLE_NUM = DB_NUM * TABLE_NUM_PER_DB;
- private Map<String, List<String>> createBaseDatabaseAndTables() throws IOException {
+ private Map<String, List<String>> createBaseDatabaseAndTables() throws IOException, TajoException {
Map<String, List<String>> createdDatabaseAndTablesMap = new HashMap<String, List<String>>();
@@ -357,12 +358,12 @@ public class TestCatalog {
String databaseName = dbPrefix + dbIdx;
if (!catalog.existDatabase(databaseName)) {
- assertTrue(catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase(databaseName, TajoConstants.DEFAULT_TABLESPACE_NAME);
}
String tableName = tablePrefix + tableId;
TableDesc table = createMockupTable(databaseName, tableName);
- assertTrue(catalog.createTable(table));
+ catalog.createTable(table);
TUtil.putToNestedList(createdDatabaseAndTablesMap, databaseName, tableName);
}
@@ -438,7 +439,7 @@ public class TestCatalog {
/**
* It asserts the equality between an original table desc and a restored table desc.
*/
- private static void assertSchemaEquality(String tableName, Schema schema) throws IOException {
+ private static void assertSchemaEquality(String tableName, Schema schema) throws IOException, TajoException {
Path path = new Path(CommonTestingUtil.getTestDir(), tableName);
TableDesc tableDesc = new TableDesc(
CatalogUtil.buildFQName(DEFAULT_DATABASE_NAME, tableName),
@@ -577,30 +578,30 @@ public class TestCatalog {
}
@Test
- public void testCreateSameTables() throws IOException {
- assertTrue(catalog.createDatabase("tmpdb3", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ public void testCreateSameTables() throws IOException, TajoException {
+ catalog.createDatabase("tmpdb3", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("tmpdb3"));
- assertTrue(catalog.createDatabase("tmpdb4", TajoConstants.DEFAULT_TABLESPACE_NAME));
+ catalog.createDatabase("tmpdb4", TajoConstants.DEFAULT_TABLESPACE_NAME);
assertTrue(catalog.existDatabase("tmpdb4"));
TableDesc table1 = createMockupTable("tmpdb3", "table1");
- assertTrue(catalog.createTable(table1));
+ catalog.createTable(table1);
TableDesc table2 = createMockupTable("tmpdb3", "table2");
- assertTrue(catalog.createTable(table2));
+ catalog.createTable(table2);
assertTrue(catalog.existsTable("tmpdb3", "table1"));
assertTrue(catalog.existsTable("tmpdb3", "table2"));
TableDesc table3 = createMockupTable("tmpdb4", "table1");
- assertTrue(catalog.createTable(table3));
+ catalog.createTable(table3);
TableDesc table4 = createMockupTable("tmpdb4", "table2");
- assertTrue(catalog.createTable(table4));
+ catalog.createTable(table4);
assertTrue(catalog.existsTable("tmpdb4", "table1"));
assertTrue(catalog.existsTable("tmpdb4", "table2"));
- assertTrue(catalog.dropTable("tmpdb3.table1"));
- assertTrue(catalog.dropTable("tmpdb3.table2"));
- assertTrue(catalog.dropTable("tmpdb4.table1"));
- assertTrue(catalog.dropTable("tmpdb4.table2"));
+ catalog.dropTable("tmpdb3.table1");
+ catalog.dropTable("tmpdb3.table2");
+ catalog.dropTable("tmpdb4.table1");
+ catalog.dropTable("tmpdb4.table2");
assertFalse(catalog.existsTable("tmpdb3.table1"));
assertFalse(catalog.existsTable("tmpdb3.table2"));
@@ -612,7 +613,7 @@ public class TestCatalog {
public void testAddAndDelIndex() throws Exception {
TableDesc desc = prepareTable();
prepareIndexDescs();
- assertTrue(catalog.createTable(desc));
+ catalog.createTable(desc);
assertFalse(catalog.existIndexByName(DEFAULT_DATABASE_NAME, desc1.getName()));
assertFalse(catalog.existIndexByColumnNames(DEFAULT_DATABASE_NAME, "indexed", new String[]{"id"}));
@@ -1111,7 +1112,7 @@ public class TestCatalog {
FunctionDesc meta = new FunctionDesc("testint", TestIntFunc.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.INT4));
- assertTrue(catalog.createFunction(meta));
+ catalog.createFunction(meta);
// UPGRADE TO INT4 SUCCESS==> LOOK AT SECOND PARAM BELOW
FunctionDesc retrieved = catalog.getFunction("testint", CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.INT2));
@@ -1127,7 +1128,7 @@ public class TestCatalog {
FunctionDesc meta = new FunctionDesc("testintinvalid", TestIntFunc.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.INT4));
- assertTrue(catalog.createFunction(meta));
+ catalog.createFunction(meta);
//UPGRADE TO INT8 WILL FAIL ==> LOOK AT SECOND PARAM BELOW
catalog.getFunction("testintinvalid", CatalogUtil.newSimpleDataTypeArray(Type.INT4, Type.INT8));
@@ -1139,7 +1140,7 @@ public class TestCatalog {
FunctionDesc meta = new FunctionDesc("testfloat", TestFloatFunc.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.FLOAT8, Type.INT4));
- assertTrue(catalog.createFunction(meta));
+ catalog.createFunction(meta);
//UPGRADE TO FLOAT 8 SUCCESS==> LOOK AT FIRST PARAM BELOW
FunctionDesc retrieved = catalog.getFunction("testfloat",
@@ -1156,7 +1157,7 @@ public class TestCatalog {
FunctionDesc meta = new FunctionDesc("testfloatinvalid", TestFloatFunc.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.FLOAT8, Type.INT4));
- assertTrue(catalog.createFunction(meta));
+ catalog.createFunction(meta);
// UPGRADE TO DECIMAL WILL FAIL ==> LOOK AT FIRST PARAM BELOW
catalog.getFunction("testfloatinvalid", CatalogUtil.newSimpleDataTypeArray(Type.NUMERIC, Type.INT4));
@@ -1168,7 +1169,7 @@ public class TestCatalog {
FunctionDesc meta = new FunctionDesc("testany", TestAnyParamFunc.class, FunctionType.GENERAL,
CatalogUtil.newSimpleDataType(Type.INT4),
CatalogUtil.newSimpleDataTypeArray(Type.ANY));
- assertTrue(catalog.createFunction(meta));
+ catalog.createFunction(meta);
FunctionDesc retrieved = catalog.getFunction("testany", CatalogUtil.newSimpleDataTypeArray(Type.INT1));
assertEquals(retrieved.getFunctionName(), "testany");
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java
----------------------------------------------------------------------
diff --git a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java
index 4ddf7ab..d8f894e 100644
--- a/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java
+++ b/tajo-catalog/tajo-catalog-server/src/test/java/org/apache/tajo/catalog/TestLinkedMetadataManager.java
@@ -24,12 +24,11 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import org.apache.hadoop.fs.Path;
import org.apache.tajo.TajoConstants;
-import org.apache.tajo.catalog.exception.UndefinedTablespaceException;
+import org.apache.tajo.exception.*;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.common.TajoDataTypes.Type;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.error.Errors;
-import org.apache.tajo.exception.TajoInternalError;
import org.apache.tajo.util.CommonTestingUtil;
import org.apache.tajo.util.KeyValueSet;
import org.junit.AfterClass;
@@ -153,7 +152,7 @@ public class TestLinkedMetadataManager {
static CatalogService catalog;
@BeforeClass
- public static void setUp() throws IOException {
+ public static void setUp() throws IOException, DuplicateTablespaceException, DuplicateDatabaseException {
TajoConf conf = new TajoConf();
conf.setVar(TajoConf.ConfVars.CATALOG_ADDRESS, "127.0.0.1:0");
@@ -227,7 +226,7 @@ public class TestLinkedMetadataManager {
assertEquals(Sets.newHashSet("table1", "table2"), Sets.newHashSet(catalog.getAllTableNames("space1")));
}
- @Test
+ @Test(expected = InsufficientPrivilegeException.class)
public void testCreateTable() throws Exception {
TableDesc tb = new TableDesc(
"space1.errortable",
@@ -235,22 +234,12 @@ public class TestLinkedMetadataManager {
new TableMeta("x", new KeyValueSet()),
URI.create("file:///"));
- try {
- catalog.createTable(tb);
- fail();
- } catch (TajoInternalError e) {
- assertEquals(Errors.ResultCode.INTERNAL_ERROR, e.getErrorCode());
- }
+ catalog.createTable(tb);
}
- @Test
+ @Test(expected = InsufficientPrivilegeException.class)
public void testDropTable() throws Exception {
- try {
- catalog.dropTable("space1.table1");
- fail();
- } catch (TajoInternalError e) {
- assertEquals(Errors.ResultCode.INTERNAL_ERROR, e.getErrorCode());
- }
+ catalog.dropTable("space1.table1");
}
@Test
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
index eadd4df..affd128 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/TajoCli.java
@@ -33,8 +33,10 @@ import org.apache.tajo.cli.tsql.commands.*;
import org.apache.tajo.client.*;
import org.apache.tajo.conf.TajoConf;
import org.apache.tajo.conf.TajoConf.ConfVars;
+import org.apache.tajo.exception.ExceptionUtil;
import org.apache.tajo.exception.ReturnStateUtil;
import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.DefaultTajoException;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.service.ServiceTrackerFactory;
import org.apache.tajo.util.FileUtil;
@@ -444,7 +446,7 @@ public class TajoCli {
}
private int executeParsedResults(Collection<ParsedResult> parsedResults) throws Exception {
- int exitCode;
+ int exitCode = 0;
for (ParsedResult parsedResult : parsedResults) {
if (parsedResult.getType() == StatementType.META) {
exitCode = executeMetaCommand(parsedResult.getStatement());
@@ -457,10 +459,10 @@ public class TajoCli {
}
}
- return 0;
+ return exitCode;
}
- public int executeMetaCommand(String line) throws Exception {
+ public int executeMetaCommand(String line) {
String [] metaCommands = line.split(";");
for (String metaCommand : metaCommands) {
String arguments [] = metaCommand.split(" ");
@@ -474,8 +476,8 @@ public class TajoCli {
try {
invoked.invoke(arguments);
- } catch (Exception e) {
- onError(null, e);
+ } catch (Throwable t) {
+ onError(t);
return -1;
} finally {
context.getOutput().flush();
@@ -493,11 +495,8 @@ public class TajoCli {
long startTime = System.currentTimeMillis();
ClientProtos.SubmitQueryResponse response = client.executeQueryWithJson(json);
- if (response == null) {
- onError("response is null", null);
-
- } else if (ReturnStateUtil.isSuccess(response.getState())) {
+ if (ReturnStateUtil.isSuccess(response.getState())) {
switch (response.getResultType()) {
case FETCH:
QueryId queryId = new QueryId(response.getQueryId());
@@ -511,9 +510,7 @@ public class TajoCli {
}
} else {
- if (ReturnStateUtil.isError(response.getState())) {
- onError(response.getState().getMessage(), null);
- }
+ onError((Throwable) ExceptionUtil.toTajoExceptionCommon(response.getState()));
}
}
@@ -523,33 +520,33 @@ public class TajoCli {
ClientProtos.SubmitQueryResponse response = null;
try{
response = client.executeQuery(statement);
- } catch(Throwable te){
- onError(null, te);
+ } catch(Throwable t){
+ onError(t);
}
- if (response != null) {
- if (ReturnStateUtil.isSuccess(response.getState())) {
+ if (ReturnStateUtil.isSuccess(response.getState())) {
- switch (response.getResultType()) {
- case FETCH:
- QueryId queryId = new QueryId(response.getQueryId());
- waitForQueryCompleted(queryId);
- break;
- case ENCLOSED:
- localQueryCompleted(response, startTime);
- break;
- default:
- displayFormatter.printMessage(sout, "OK");
- }
+ switch (response.getResultType()) {
- } else {
- if (ReturnStateUtil.isError(response.getState())) {
- onError(response.getState().getMessage(), null);
- }
+ case FETCH:
+ QueryId queryId = new QueryId(response.getQueryId());
+ waitForQueryCompleted(queryId);
+ break;
+
+ case ENCLOSED:
+ localQueryCompleted(response, startTime);
+ break;
+
+ default:
+ displayFormatter.printMessage(sout, "OK");
}
+
+ } else {
+ onError((Throwable) ExceptionUtil.toTajoExceptionCommon(response.getState()));
}
+
return wasError ? -1 : 0;
}
@@ -570,7 +567,7 @@ public class TajoCli {
displayFormatter.printResult(sout, sin, desc, responseTime, res);
}
} catch (Throwable t) {
- onError(null, t);
+ onError(t);
} finally {
if (res != null) {
try {
@@ -637,7 +634,7 @@ public class TajoCli {
}
}
} catch (Throwable t) {
- onError(null, t);
+ onError(t);
} finally {
if (res != null) {
try {
@@ -667,19 +664,13 @@ public class TajoCli {
sout.println("Invalid command " + command + ". Try \\? for help.");
}
- private void onError(String message, Throwable t) {
+ private void onError(Throwable t) {
+ Preconditions.checkNotNull(t);
+
wasError = true;
- if (t == null) {
- displayFormatter.printErrorMessage(sout, message);
- } else {
- if (t instanceof SQLException) {
- displayFormatter.printErrorMessage(sout, t.getMessage());
- } else {
- displayFormatter.printErrorMessage(sout, t);
- }
- }
- if (reconnect && (t instanceof InvalidClientSessionException ||
- (message != null && message.startsWith("org.apache.tajo.session.InvalidSessionException")))) {
+ displayFormatter.printErrorMessage(sout, t.getMessage());
+
+ if (reconnect && (t instanceof InvalidClientSessionException)) {
try {
((SessionConnection)client).reconnect();
} catch (Exception e) {
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/ConnectDatabaseCommand.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/ConnectDatabaseCommand.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/ConnectDatabaseCommand.java
index 3682a74..819f848 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/ConnectDatabaseCommand.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/ConnectDatabaseCommand.java
@@ -18,9 +18,11 @@
package org.apache.tajo.cli.tsql.commands;
+import com.google.common.base.Preconditions;
import com.google.protobuf.ServiceException;
import org.apache.tajo.cli.tsql.TajoCli;
import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.UndefinedDatabaseException;
import java.sql.SQLException;
@@ -37,28 +39,28 @@ public class ConnectDatabaseCommand extends TajoShellCommand {
@Override
public void invoke(String[] cmd) throws Exception {
- if (cmd.length == 1) {
+
+ if (cmd.length == 1) { // no given database name
+
context.getOutput().write(String.format("You are now connected to database \"%s\" as user \"%s\".%n",
client.getCurrentDatabase(), client.getUserInfo().getUserName()));
+
} else if (cmd.length == 2) {
- String databaseName = cmd[1];
- databaseName = databaseName.replace("\"", "");
- if (!client.existDatabase(databaseName)) {
- context.getOutput().write("Database '" + databaseName + "' not found\n");
- } else {
- try {
- if (client.selectDatabase(databaseName)) {
- context.setCurrentDatabase(client.getCurrentDatabase());
- context.getOutput().write(String.format("You are now connected to database \"%s\" as user \"%s\".%n",
- context.getCurrentDatabase(), client.getUserInfo().getUserName()));
- }
- } catch (TajoException se) {
- if (se.getMessage() != null) {
- context.getOutput().write(se.getMessage());
- } else {
- context.getOutput().write(String.format("cannot connect the database \"%s\"", databaseName));
- }
- }
+ final String databaseName = cmd[1].replace("\"", "");
+
+ try {
+ client.selectDatabase(databaseName);
+ Preconditions.checkState(databaseName.equals(client.getCurrentDatabase()));
+
+ context.setCurrentDatabase(client.getCurrentDatabase());
+ context.getOutput().write(String.format(
+ "You are now connected to database \"%s\" as user \"%s\".%n",
+ context.getCurrentDatabase(),
+ client.getUserInfo().getUserName())
+ );
+
+ } catch (TajoException se) {
+ context.getOutput().write("ERROR: " + se.getMessage());
}
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescTableCommand.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescTableCommand.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescTableCommand.java
index 4b7006d..b17a336 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescTableCommand.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/DescTableCommand.java
@@ -28,6 +28,7 @@ import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
import org.apache.tajo.catalog.proto.CatalogProtos.SortSpecProto;
import org.apache.tajo.cli.tsql.TajoCli;
+import org.apache.tajo.exception.TajoException;
import org.apache.tajo.util.FileUtil;
import org.apache.tajo.util.StringUtils;
@@ -45,7 +46,7 @@ public class DescTableCommand extends TajoShellCommand {
}
@Override
- public void invoke(String[] cmd) throws Exception {
+ public void invoke(String[] cmd) throws TajoException {
if (cmd.length == 2) {
String tableName = cmd[1];
tableName = tableName.replace("\"", "");
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/TajoShellCommand.java
----------------------------------------------------------------------
diff --git a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/TajoShellCommand.java b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/TajoShellCommand.java
index 2ac5854..22fa829 100644
--- a/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/TajoShellCommand.java
+++ b/tajo-cli/src/main/java/org/apache/tajo/cli/tsql/commands/TajoShellCommand.java
@@ -28,8 +28,11 @@ public abstract class TajoShellCommand {
return new String[] {};
}
public abstract void invoke(String [] command) throws Exception;
+
public abstract String getUsage();
+
public abstract String getDescription();
+
public void printHelp() {
context.getOutput().print(getCommand());
context.getOutput().print(" - ");
@@ -78,10 +81,6 @@ public abstract class TajoShellCommand {
}
}
- protected void printCenter(String message) {
- printCenter(message, maxColumn, true);
- }
-
protected void print(char c, int count) {
for(int i = 0; i < count; i++) {
context.getOutput().print(c);
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClient.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClient.java b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClient.java
index bc63f84..7acc9b9 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClient.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClient.java
@@ -22,15 +22,13 @@ import org.apache.tajo.annotation.Nullable;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.exception.*;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
-import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.exception.*;
import java.io.Closeable;
import java.net.URI;
-import java.sql.SQLException;
import java.util.List;
public interface CatalogAdminClient extends Closeable {
@@ -39,15 +37,14 @@ public interface CatalogAdminClient extends Closeable {
*
* @param databaseName The database name to be created. This name is case sensitive.
* @return True if created successfully.
- * @throws java.sql.SQLException
+ * @throws DuplicateDatabaseException
*/
- boolean createDatabase(final String databaseName) throws DuplicateDatabaseException;
+ void createDatabase(final String databaseName) throws DuplicateDatabaseException;
/**
* Does the database exist?
*
* @param databaseName The database name to be checked. This name is case sensitive.
* @return True if so.
- * @throws java.sql.SQLException
*/
boolean existDatabase(final String databaseName);
/**
@@ -55,9 +52,9 @@ public interface CatalogAdminClient extends Closeable {
*
* @param databaseName The database name to be dropped. This name is case sensitive.
* @return True if the database is dropped successfully.
- * @throws java.sql.SQLException
+ * @throws UndefinedDatabaseException
*/
- boolean dropDatabase(final String databaseName) throws UndefinedDatabaseException;
+ void dropDatabase(final String databaseName) throws UndefinedDatabaseException, InsufficientPrivilegeException;
List<String> getAllDatabaseNames();
@@ -78,10 +75,11 @@ public interface CatalogAdminClient extends Closeable {
* @param path The external table location
* @param meta Table meta
* @return the created table description.
- * @throws java.sql.SQLException
+ * @throws DuplicateTableException
*/
TableDesc createExternalTable(final String tableName, final Schema schema, final URI path,
- final TableMeta meta) throws DuplicateTableException;
+ final TableMeta meta)
+ throws DuplicateTableException, UnavailableTableLocationException, InsufficientPrivilegeException;
/**
* Create an external table.
@@ -93,20 +91,20 @@ public interface CatalogAdminClient extends Closeable {
* @param meta Table meta
* @param partitionMethodDesc Table partition description
* @return the created table description.
- * @throws java.sql.SQLException
+ * @throws DuplicateTableException
*/
TableDesc createExternalTable(final String tableName, final Schema schema, final URI path,
final TableMeta meta, final PartitionMethodDesc partitionMethodDesc)
- throws DuplicateTableException;
+ throws DuplicateTableException, InsufficientPrivilegeException, UnavailableTableLocationException;
/**
* Drop a table
*
* @param tableName The table name to be dropped. This name is case sensitive.
* @return True if the table is dropped successfully.
- * @throws java.sql.SQLException
+ * @throws InsufficientPrivilegeException
*/
- boolean dropTable(final String tableName) throws UndefinedTableException;
+ void dropTable(final String tableName) throws UndefinedTableException, InsufficientPrivilegeException;
/**
* Drop a table.
@@ -114,9 +112,11 @@ public interface CatalogAdminClient extends Closeable {
* @param tableName The table name to be dropped. This name is case sensitive.
* @param purge If purge is true, this call will remove the entry in catalog as well as the table contents.
* @return True if the table is dropped successfully.
- * @throws java.sql.SQLException
+ * @throws UndefinedTableException
+ * @throws InsufficientPrivilegeException
*/
- boolean dropTable(final String tableName, final boolean purge) throws UndefinedTableException;
+ void dropTable(final String tableName, final boolean purge) throws UndefinedTableException,
+ InsufficientPrivilegeException;
/**
* Get a list of table names.
@@ -124,7 +124,6 @@ public interface CatalogAdminClient extends Closeable {
* @param databaseName The database name to show all tables. This name is case sensitive.
* If it is null, this method will show all tables
* in the current database of this session.
- * @throws java.sql.SQLException
*/
List<String> getTableList(@Nullable final String databaseName);
@@ -133,23 +132,23 @@ public interface CatalogAdminClient extends Closeable {
*
* @param tableName The table name to get. This name is case sensitive.
* @return Table description
- * @throws java.sql.SQLException
+ * @throws UndefinedTableException
*/
TableDesc getTableDesc(final String tableName) throws UndefinedTableException;
List<CatalogProtos.FunctionDescProto> getFunctions(final String functionName);
- IndexDescProto getIndex(final String indexName) throws SQLException;
+ IndexDescProto getIndex(final String indexName);
- boolean existIndex(final String indexName) throws SQLException;
+ boolean existIndex(final String indexName);
- List<IndexDescProto> getIndexes(final String tableName) throws SQLException;
+ List<IndexDescProto> getIndexes(final String tableName);
- boolean hasIndexes(final String tableName) throws SQLException;
+ boolean hasIndexes(final String tableName);
- IndexDescProto getIndex(final String tableName, final String[] columnNames) throws SQLException;
+ IndexDescProto getIndex(final String tableName, final String[] columnNames);
- boolean existIndex(final String tableName, final String[] columnName) throws SQLException;
+ boolean existIndex(final String tableName, final String[] columnName);
- boolean dropIndex(final String indexName) throws SQLException;
+ boolean dropIndex(final String indexName);
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
index d4d8a86..af1278d 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java
@@ -24,25 +24,24 @@ import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.exception.*;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
import org.apache.tajo.catalog.proto.CatalogProtos.*;
-import org.apache.tajo.error.Errors;
+import org.apache.tajo.error.Errors.ResultCode;
+import org.apache.tajo.exception.*;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.ipc.ClientProtos.DropTableRequest;
import org.apache.tajo.ipc.ClientProtos.GetIndexWithColumnsRequest;
import org.apache.tajo.rpc.NettyClientBase;
-import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos;
+import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListResponse;
import java.io.IOException;
import java.net.URI;
-import java.sql.SQLException;
import java.util.List;
+import static org.apache.tajo.exception.ExceptionUtil.throwsIfThisError;
import static org.apache.tajo.exception.ReturnStateUtil.*;
-import static org.apache.tajo.exception.SQLExceptionUtil.throwIfError;
import static org.apache.tajo.ipc.TajoMasterClientProtocol.TajoMasterClientProtocolService.BlockingInterface;
public class CatalogAdminClientImpl implements CatalogAdminClient {
@@ -53,19 +52,16 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
}
@Override
- public boolean createDatabase(final String databaseName) throws DuplicateDatabaseException {
+ public void createDatabase(final String databaseName) throws DuplicateDatabaseException {
- final BlockingInterface stub = conn.getTMStub();
- try {
- PrimitiveProtos.ReturnState state = stub.createDatabase(null, conn.getSessionedString(databaseName));
- if (isThisError(state, Errors.ResultCode.DUPLICATE_DATABASE)) {
- throw new DuplicateDatabaseException(state);
- }
+ try {
+ final BlockingInterface stub = conn.getTMStub();
+ final ReturnState state = stub.createDatabase(null, conn.getSessionedString(databaseName));
+ throwsIfThisError(state, DuplicateDatabaseException.class);
ensureOk(state);
- return true;
} catch (ServiceException e) {
throw new RuntimeException(e);
@@ -75,27 +71,33 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
@Override
public boolean existDatabase(final String databaseName) {
- final BlockingInterface stub = conn.getTMStub();
-
try {
- return isSuccess(stub.existDatabase(null, conn.getSessionedString(databaseName)));
+ final BlockingInterface stub = conn.getTMStub();
+ final ReturnState state = stub.existDatabase(null, conn.getSessionedString(databaseName));
+
+ if (isThisError(state, ResultCode.UNDEFINED_DATABASE)) {
+ return false;
+ }
+ ensureOk(state);
+ return true;
+
} catch (ServiceException e) {
throw new RuntimeException(e);
}
}
@Override
- public boolean dropDatabase(final String databaseName) throws UndefinedDatabaseException {
-
- final BlockingInterface stub = conn.getTMStub();
+ public void dropDatabase(final String databaseName) throws UndefinedDatabaseException {
try {
- PrimitiveProtos.ReturnState state = stub.dropDatabase(null, conn.getSessionedString(databaseName));
- if (isThisError(state, Errors.ResultCode.UNDEFINED_DATABASE)) {
+ final BlockingInterface stub = conn.getTMStub();
+ final ReturnState state = stub.dropDatabase(null, conn.getSessionedString(databaseName));
+
+ if (isThisError(state, ResultCode.UNDEFINED_DATABASE)) {
throw new UndefinedDatabaseException(state);
}
ensureOk(state);
- return true;
+
} catch (ServiceException e) {
throw new RuntimeException(e);
}
@@ -117,14 +119,14 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
final BlockingInterface stub = conn.getTMStub();
- PrimitiveProtos.ReturnState state;
+ ReturnState state;
try {
state = stub.existTable(null, conn.getSessionedString(tableName));
} catch (ServiceException e) {
throw new RuntimeException(e);
}
- if (isThisError(state, Errors.ResultCode.UNDEFINED_TABLE)) {
+ if (isThisError(state, ResultCode.UNDEFINED_TABLE)) {
return false;
}
@@ -134,19 +136,19 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
@Override
public TableDesc createExternalTable(String tableName, Schema schema, URI path, TableMeta meta)
- throws DuplicateTableException {
+ throws DuplicateTableException, UnavailableTableLocationException, InsufficientPrivilegeException {
return createExternalTable(tableName, schema, path, meta, null);
}
public TableDesc createExternalTable(final String tableName, final Schema schema, final URI path,
final TableMeta meta, final PartitionMethodDesc partitionMethodDesc)
- throws DuplicateTableException {
+ throws DuplicateTableException, InsufficientPrivilegeException, UnavailableTableLocationException {
- NettyClientBase client = conn.getTajoMasterConnection();
+ final NettyClientBase client = conn.getTajoMasterConnection();
conn.checkSessionAndGet(client);
- BlockingInterface tajoMasterService = client.getStub();
+ final BlockingInterface tajoMasterService = client.getStub();
- ClientProtos.CreateTableRequest.Builder builder = ClientProtos.CreateTableRequest.newBuilder();
+ final ClientProtos.CreateTableRequest.Builder builder = ClientProtos.CreateTableRequest.newBuilder();
builder.setSessionId(conn.sessionId);
builder.setName(tableName);
builder.setSchema(schema.getProto());
@@ -164,21 +166,22 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
throw new RuntimeException(e);
}
- if (isThisError(res.getState(), Errors.ResultCode.DUPLICATE_TABLE)) {
- throw new DuplicateTableException(res.getState());
- }
+ throwsIfThisError(res.getState(), DuplicateTableException.class);
+ throwsIfThisError(res.getState(), InsufficientPrivilegeException.class);
+ throwsIfThisError(res.getState(), UnavailableTableLocationException.class);
ensureOk(res.getState());
return CatalogUtil.newTableDesc(res.getTable());
}
@Override
- public boolean dropTable(String tableName) throws UndefinedTableException {
- return dropTable(tableName, false);
+ public void dropTable(String tableName) throws UndefinedTableException, InsufficientPrivilegeException {
+ dropTable(tableName, false);
}
@Override
- public boolean dropTable(final String tableName, final boolean purge) throws UndefinedTableException {
+ public void dropTable(final String tableName, final boolean purge)
+ throws UndefinedTableException, InsufficientPrivilegeException {
final BlockingInterface stub = conn.getTMStub();
final DropTableRequest request = DropTableRequest.newBuilder()
@@ -188,19 +191,17 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
.build();
- PrimitiveProtos.ReturnState state;
+ ReturnState state;
try {
state = stub.dropTable(null, request);
} catch (ServiceException e) {
throw new RuntimeException(e);
}
- if (isThisError(state, Errors.ResultCode.UNDEFINED_TABLE)) {
- throw new UndefinedTableException(state);
- }
+ throwsIfThisError(state, UndefinedTableException.class);
+ throwsIfThisError(state, InsufficientPrivilegeException.class);
ensureOk(state);
- return true;
}
@Override
@@ -231,7 +232,7 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
throw new RuntimeException(e);
}
- if (isThisError(res.getState(), Errors.ResultCode.UNDEFINED_TABLE)) {
+ if (isThisError(res.getState(), ResultCode.UNDEFINED_TABLE)) {
throw new UndefinedTableException(res.getState());
}
@@ -257,7 +258,7 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
}
@Override
- public IndexDescProto getIndex(final String indexName) throws SQLException {
+ public IndexDescProto getIndex(final String indexName) {
final BlockingInterface stub = conn.getTMStub();
IndexResponse res;
@@ -267,12 +268,12 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
throw new RuntimeException(e);
}
- throwIfError(res.getState());
+ ensureOk(res.getState());
return res.getIndexDesc();
}
@Override
- public boolean existIndex(final String indexName) throws SQLException {
+ public boolean existIndex(final String indexName){
final BlockingInterface stub = conn.getTMStub();
try {
@@ -283,7 +284,7 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
}
@Override
- public List<IndexDescProto> getIndexes(final String tableName) throws SQLException {
+ public List<IndexDescProto> getIndexes(final String tableName) {
final BlockingInterface stub = conn.getTMStub();
IndexListResponse response;
@@ -294,12 +295,12 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
throw new RuntimeException(e);
}
- throwIfError(response.getState());
+ ensureOk(response.getState());
return response.getIndexDescList();
}
@Override
- public boolean hasIndexes(final String tableName) throws SQLException {
+ public boolean hasIndexes(final String tableName) {
final BlockingInterface stub = conn.getTMStub();
try {
@@ -310,7 +311,7 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
}
@Override
- public IndexDescProto getIndex(final String tableName, final String[] columnNames) throws SQLException {
+ public IndexDescProto getIndex(final String tableName, final String[] columnNames) {
final BlockingInterface stub = conn.getTMStub();
GetIndexWithColumnsRequest.Builder builder = GetIndexWithColumnsRequest.newBuilder();
@@ -327,12 +328,12 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
throw new RuntimeException(e);
}
- throwIfError(response.getState());
+ ensureOk(response.getState());
return response.getIndexDesc();
}
@Override
- public boolean existIndex(final String tableName, final String[] columnName) throws SQLException {
+ public boolean existIndex(final String tableName, final String[] columnName) {
final BlockingInterface stub = conn.getTMStub();
GetIndexWithColumnsRequest.Builder builder = GetIndexWithColumnsRequest.newBuilder();
@@ -350,7 +351,7 @@ public class CatalogAdminClientImpl implements CatalogAdminClient {
}
@Override
- public boolean dropIndex(final String indexName) throws SQLException {
+ public boolean dropIndex(final String indexName) {
final BlockingInterface stub = conn.getTMStub();
try {
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/ClientExceptionUtil.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/ClientExceptionUtil.java b/tajo-client/src/main/java/org/apache/tajo/client/ClientExceptionUtil.java
deleted file mode 100644
index 2ecc078..0000000
--- a/tajo-client/src/main/java/org/apache/tajo/client/ClientExceptionUtil.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/**
- * 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.client;
-
-import com.google.common.collect.Maps;
-import org.apache.tajo.catalog.exception.*;
-import org.apache.tajo.error.Errors.ResultCode;
-import org.apache.tajo.exception.*;
-import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState;
-
-import java.lang.reflect.Constructor;
-import java.util.Map;
-
-import static org.apache.tajo.error.Errors.ResultCode.*;
-import static org.apache.tajo.exception.ReturnStateUtil.isError;
-
-/**
- * Exception related utilities. Especially, it provides a way to recover @{link ReturnState} into TajoException.
- */
-public class ClientExceptionUtil {
-
- static Map<ResultCode, Class<? extends TajoExceptionInterface>> EXCEPTIONS = Maps.newHashMap();
-
- static {
-
- // General Errors
- ADD_EXCEPTION(INTERNAL_ERROR, TajoInternalError.class);
- ADD_EXCEPTION(FEATURE_NOT_SUPPORTED, UnsupportedException.class);
-
- ADD_EXCEPTION(UNDEFINED_TABLESPACE, UndefinedTablespaceException.class);
- ADD_EXCEPTION(UNDEFINED_DATABASE, UndefinedDatabaseException.class);
- // ADD_EXCEPTION(UNDEFINED_SCHEMA, );
- ADD_EXCEPTION(UNDEFINED_TABLE, UndefinedTableException.class);
- ADD_EXCEPTION(UNDEFINED_COLUMN, UndefinedColumnException.class);
- ADD_EXCEPTION(UNDEFINED_FUNCTION, UndefinedFunctionException.class);
- ADD_EXCEPTION(UNDEFINED_PARTITION, UndefinedPartitionException.class);
- ADD_EXCEPTION(UNDEFINED_OPERATOR, UndefinedOperatorException.class);
-
- ADD_EXCEPTION(DUPLICATE_TABLESPACE, DuplicateTableException.class);
- ADD_EXCEPTION(DUPLICATE_DATABASE, DuplicateDatabaseException.class);
- // ADD_EXCEPTION(DUPLICATE_SCHEMA, );
- ADD_EXCEPTION(DUPLICATE_TABLE, DuplicateTableException.class);
- ADD_EXCEPTION(DUPLICATE_COLUMN, DuplicateColumnException.class);
- // ADD_EXCEPTION(DUPLICATE_ALIAS, );
- ADD_EXCEPTION(DUPLICATE_INDEX, DuplicateIndexException.class);
- ADD_EXCEPTION(DUPLICATE_PARTITION, DuplicatePartitionException.class);
-
- ADD_EXCEPTION(AMBIGUOUS_TABLE, AmbiguousTableException.class);
- ADD_EXCEPTION(AMBIGUOUS_COLUMN, AmbiguousColumnException.class);
- }
-
- private static void ADD_EXCEPTION(ResultCode code, Class<? extends TajoExceptionInterface> cls) {
- EXCEPTIONS.put(code, cls);
- }
-
- public static void throwIfError(ReturnState state) throws TajoException {
- if (isError(state)) {
- throw toTajoException(state);
- }
- }
-
- public static TajoException toTajoException(ReturnState state) {
-
- if (state.getReturnCode() == ResultCode.INTERNAL_ERROR) {
- throw new TajoInternalError(state);
-
- } else if (EXCEPTIONS.containsKey(state.getReturnCode())) {
- Object exception = null;
- try {
- Class clazz = EXCEPTIONS.get(state.getReturnCode());
- Constructor c = clazz.getConstructor(ReturnState.class);
- exception = c.newInstance(new Object[]{state});
- } catch (Throwable t) {
- throw new TajoInternalError(t);
- }
-
- if (exception instanceof TajoException) {
- return (TajoException) exception;
- } else if (exception instanceof TajoRuntimeException) {
- throw ((TajoRuntimeException) exception);
- } else {
- throw ((TajoError) exception);
- }
-
- } else {
- throw new TajoInternalError("Unregistred Exception (" + state.getReturnCode().name() +"): "
- + state.getMessage());
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/QueryClient.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/QueryClient.java b/tajo-client/src/main/java/org/apache/tajo/client/QueryClient.java
index 966bddf..ad9bfc5 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/QueryClient.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/QueryClient.java
@@ -20,10 +20,12 @@ package org.apache.tajo.client;
import org.apache.tajo.QueryId;
import org.apache.tajo.auth.UserRoleInfo;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
+import org.apache.tajo.exception.UndefinedDatabaseException;
import org.apache.tajo.exception.NoSuchSessionVariableException;
+import org.apache.tajo.exception.QueryNotFoundException;
import org.apache.tajo.exception.TajoException;
import org.apache.tajo.ipc.ClientProtos;
+import org.apache.tajo.ipc.ClientProtos.GetQueryResultResponse;
import org.apache.tajo.ipc.ClientProtos.QueryHistoryProto;
import org.apache.tajo.ipc.ClientProtos.QueryInfoProto;
import org.apache.tajo.ipc.ClientProtos.SubmitQueryResponse;
@@ -31,7 +33,6 @@ import org.apache.tajo.jdbc.TajoMemoryResultSet;
import java.io.Closeable;
import java.sql.ResultSet;
-import java.sql.SQLException;
import java.util.List;
import java.util.Map;
@@ -60,19 +61,19 @@ public interface QueryClient extends Closeable {
*/
void closeQuery(final QueryId queryId);
- void closeNonForwardQuery(final QueryId queryId) throws SQLException;
+ void closeNonForwardQuery(final QueryId queryId);
String getCurrentDatabase();
- Boolean selectDatabase(final String databaseName) throws UndefinedDatabaseException;
+ void selectDatabase(final String databaseName) throws UndefinedDatabaseException;
- Map<String, String> updateSessionVariables(final Map<String, String> variables) throws NoSuchSessionVariableException;
+ Map<String, String> updateSessionVariables(final Map<String, String> variables);
- Map<String, String> unsetSessionVariables(final List<String> variables) throws NoSuchSessionVariableException;
+ Map<String, String> unsetSessionVariables(final List<String> variables);
String getSessionVariable(final String varname) throws NoSuchSessionVariableException;
- Boolean existSessionVariable(final String varname);
+ boolean existSessionVariable(final String varname);
Map<String, String> getAllSessionVariables();
@@ -97,29 +98,29 @@ public interface QueryClient extends Closeable {
ResultSet executeJsonQueryAndGetResult(final String json) throws TajoException;
- QueryStatus getQueryStatus(QueryId queryId);
+ QueryStatus getQueryStatus(QueryId queryId) throws QueryNotFoundException;
- ResultSet getQueryResult(QueryId queryId) throws SQLException;
+ ResultSet getQueryResult(QueryId queryId) throws TajoException;
- ResultSet createNullResultSet(QueryId queryId) throws SQLException;
+ ResultSet createNullResultSet(QueryId queryId);
- ClientProtos.GetQueryResultResponse getResultResponse(QueryId queryId) throws SQLException;
+ GetQueryResultResponse getResultResponse(QueryId queryId) throws TajoException;
- TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws SQLException;
+ TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws TajoException;
boolean updateQuery(final String sql) throws TajoException;
boolean updateQueryWithJson(final String json) throws TajoException;
- List<ClientProtos.BriefQueryInfo> getRunningQueryList() throws SQLException;
+ List<ClientProtos.BriefQueryInfo> getRunningQueryList();
List<ClientProtos.BriefQueryInfo> getFinishedQueryList();
- List<ClientProtos.WorkerResourceInfo> getClusterInfo() throws SQLException;
+ List<ClientProtos.WorkerResourceInfo> getClusterInfo();
- QueryStatus killQuery(final QueryId queryId);
+ QueryStatus killQuery(final QueryId queryId) throws QueryNotFoundException;
- QueryInfoProto getQueryInfo(final QueryId queryId) throws SQLException;
+ QueryInfoProto getQueryInfo(final QueryId queryId) throws QueryNotFoundException;
- QueryHistoryProto getQueryHistory(final QueryId queryId) throws SQLException;
+ QueryHistoryProto getQueryHistory(final QueryId queryId) throws QueryNotFoundException;
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java b/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
index 02110c0..20e56ac 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java
@@ -21,16 +21,17 @@ package org.apache.tajo.client;
import com.google.protobuf.ServiceException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.tajo.*;
+import org.apache.tajo.QueryId;
+import org.apache.tajo.QueryIdFactory;
+import org.apache.tajo.SessionVars;
import org.apache.tajo.TajoIdProtos.SessionIdProto;
+import org.apache.tajo.TajoProtos;
import org.apache.tajo.auth.UserRoleInfo;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
-import org.apache.tajo.exception.NoSuchSessionVariableException;
-import org.apache.tajo.exception.SQLExceptionUtil;
-import org.apache.tajo.exception.TajoException;
+import org.apache.tajo.client.v2.exception.ClientUnableToConnectException;
+import org.apache.tajo.exception.*;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.ipc.QueryMasterClientProtocol;
import org.apache.tajo.ipc.TajoMasterClientProtocol.TajoMasterClientProtocolService.BlockingInterface;
@@ -38,20 +39,20 @@ import org.apache.tajo.jdbc.FetchResultSet;
import org.apache.tajo.jdbc.TajoMemoryResultSet;
import org.apache.tajo.rpc.NettyClientBase;
import org.apache.tajo.rpc.RpcClientManager;
+import org.apache.tajo.util.NetUtils;
import org.apache.tajo.util.ProtoUtil;
import java.net.ConnectException;
import java.net.InetSocketAddress;
import java.sql.ResultSet;
-import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
+import static org.apache.tajo.exception.ExceptionUtil.throwIfError;
+import static org.apache.tajo.exception.ExceptionUtil.throwsIfThisError;
import static org.apache.tajo.exception.ReturnStateUtil.ensureOk;
import static org.apache.tajo.exception.ReturnStateUtil.isSuccess;
-import static org.apache.tajo.exception.ReturnStateUtil.returnError;
-import static org.apache.tajo.exception.SQLExceptionUtil.throwIfError;
import static org.apache.tajo.ipc.ClientProtos.*;
import static org.apache.tajo.ipc.QueryMasterClientProtocol.QueryMasterClientProtocolService;
@@ -118,17 +119,17 @@ public class QueryClientImpl implements QueryClient {
}
@Override
- public Boolean selectDatabase(String databaseName) throws UndefinedDatabaseException {
- return conn.selectDatabase(databaseName);
+ public void selectDatabase(String databaseName) throws UndefinedDatabaseException {
+ conn.selectDatabase(databaseName);
}
@Override
- public Map<String, String> updateSessionVariables(Map<String, String> variables) throws NoSuchSessionVariableException {
+ public Map<String, String> updateSessionVariables(Map<String, String> variables) {
return conn.updateSessionVariables(variables);
}
@Override
- public Map<String, String> unsetSessionVariables(List<String> variables) throws NoSuchSessionVariableException {
+ public Map<String, String> unsetSessionVariables(List<String> variables) {
return conn.unsetSessionVariables(variables);
}
@@ -138,7 +139,7 @@ public class QueryClientImpl implements QueryClient {
}
@Override
- public Boolean existSessionVariable(String varname) {
+ public boolean existSessionVariable(String varname) {
return conn.existSessionVariable(varname);
}
@@ -184,7 +185,7 @@ public class QueryClientImpl implements QueryClient {
public ResultSet executeQueryAndGetResult(String sql) throws TajoException {
ClientProtos.SubmitQueryResponse response = executeQuery(sql);
- ensureOk(response.getState());
+ throwIfError(response.getState());
QueryId queryId = new QueryId(response.getQueryId());
@@ -202,7 +203,7 @@ public class QueryClientImpl implements QueryClient {
public ResultSet executeJsonQueryAndGetResult(final String json) throws TajoException {
ClientProtos.SubmitQueryResponse response = executeQueryWithJson(json);
- ensureOk(response.getState());
+ throwIfError(response.getState());
QueryId queryId = new QueryId(response.getQueryId());
@@ -216,7 +217,7 @@ public class QueryClientImpl implements QueryClient {
}
}
- public ResultSet getQueryResultAndWait(QueryId queryId) {
+ public ResultSet getQueryResultAndWait(QueryId queryId) throws QueryNotFoundException {
if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) {
return createNullResultSet(queryId);
@@ -254,12 +255,11 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(t);
}
- ensureOk(res.getState());
return res;
}
@Override
- public QueryStatus getQueryStatus(QueryId queryId) {
+ public QueryStatus getQueryStatus(QueryId queryId) throws QueryNotFoundException {
final BlockingInterface stub = conn.getTMStub();
final GetQueryStatusRequest request = GetQueryStatusRequest.newBuilder()
@@ -274,19 +274,20 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(t);
}
+ throwsIfThisError(res.getState(), QueryNotFoundException.class);
ensureOk(res.getState());
return new QueryStatus(res);
}
@Override
- public ResultSet getQueryResult(QueryId queryId) {
+ public ResultSet getQueryResult(QueryId queryId) throws QueryNotFoundException {
if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) {
return createNullResultSet(queryId);
}
GetQueryResultResponse response = getResultResponse(queryId);
- ensureOk(response.getState());
+
TableDesc tableDesc = CatalogUtil.newTableDesc(response.getTableDesc());
return new FetchResultSet(this, tableDesc.getLogicalSchema(), queryId, defaultFetchRows);
}
@@ -297,7 +298,7 @@ public class QueryClientImpl implements QueryClient {
}
@Override
- public GetQueryResultResponse getResultResponse(QueryId queryId) {
+ public GetQueryResultResponse getResultResponse(QueryId queryId) throws QueryNotFoundException {
if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) {
return null;
}
@@ -315,12 +316,13 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(t);
}
+ throwsIfThisError(response.getState(), QueryNotFoundException.class);
ensureOk(response.getState());
return response;
}
@Override
- public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws SQLException {
+ public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws TajoException {
final BlockingInterface stub = conn.getTMStub();
final GetQueryResultDataRequest request = GetQueryResultDataRequest.newBuilder()
@@ -359,7 +361,7 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- ClientExceptionUtil.throwIfError(response.getState());
+ throwIfError(response.getState());
conn.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
return true;
@@ -378,12 +380,12 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- ClientExceptionUtil.throwIfError(response.getState());
+ throwIfError(response.getState());
return true;
}
@Override
- public List<ClientProtos.BriefQueryInfo> getRunningQueryList() throws SQLException {
+ public List<ClientProtos.BriefQueryInfo> getRunningQueryList() {
final BlockingInterface stmb = conn.getTMStub();
@@ -394,7 +396,7 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- throwIfError(res.getState());
+ ensureOk(res.getState());
return res.getQueryListList();
}
@@ -415,7 +417,7 @@ public class QueryClientImpl implements QueryClient {
}
@Override
- public List<ClientProtos.WorkerResourceInfo> getClusterInfo() throws SQLException {
+ public List<ClientProtos.WorkerResourceInfo> getClusterInfo() {
final BlockingInterface stub = conn.getTMStub();
final GetClusterInfoRequest request = GetClusterInfoRequest.newBuilder()
@@ -429,18 +431,18 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- throwIfError(res.getState());
+ ensureOk(res.getState());
return res.getWorkerListList();
}
@Override
- public QueryStatus killQuery(final QueryId queryId) {
+ public QueryStatus killQuery(final QueryId queryId) throws QueryNotFoundException {
final BlockingInterface stub = conn.getTMStub();
QueryStatus status = getQueryStatus(queryId);
/* send a kill to the TM */
- QueryIdRequest request = buildQueryIdRequest(queryId);
+ final QueryIdRequest request = buildQueryIdRequest(queryId);
try {
stub.killQuery(null, request);
} catch (ServiceException e) {
@@ -475,7 +477,7 @@ public class QueryClientImpl implements QueryClient {
return this.maxRows;
}
- public QueryInfoProto getQueryInfo(final QueryId queryId) throws SQLException {
+ public QueryInfoProto getQueryInfo(final QueryId queryId) throws QueryNotFoundException {
final BlockingInterface stub = conn.getTMStub();
final QueryIdRequest request = buildQueryIdRequest(queryId);
@@ -487,11 +489,12 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- throwIfError(res.getState());
+ throwsIfThisError(res.getState(), QueryNotFoundException.class);
+ ensureOk(res.getState());
return res.getQueryInfo();
}
- public QueryHistoryProto getQueryHistory(final QueryId queryId) throws SQLException {
+ public QueryHistoryProto getQueryHistory(final QueryId queryId) throws QueryNotFoundException {
final QueryInfoProto queryInfo = getQueryInfo(queryId);
if (queryInfo.getHostNameOfQM() == null || queryInfo.getQueryMasterClientPort() == 0) {
@@ -504,6 +507,7 @@ public class QueryClientImpl implements QueryClient {
RpcClientManager manager = RpcClientManager.getInstance();
NettyClientBase qmClient = null;
+
try {
qmClient = manager.newClient(
@@ -516,6 +520,7 @@ public class QueryClientImpl implements QueryClient {
false
);
+
conn.checkSessionAndGet(conn.getTajoMasterConnection());
QueryIdRequest request = QueryIdRequest.newBuilder()
@@ -531,19 +536,18 @@ public class QueryClientImpl implements QueryClient {
throw new RuntimeException(e);
}
- throwIfError(res.getState());
+ ensureOk(res.getState());
return res.getQueryHistory();
+ } catch (NoSuchMethodException | ClassNotFoundException e) {
+ throw new TajoInternalError(e);
} catch (ConnectException e) {
- throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
- } catch (ClassNotFoundException e) {
- throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
- } catch (NoSuchMethodException e) {
- throw SQLExceptionUtil.makeUnableToEstablishConnection(e);
- } catch (SQLException e) {
- throw e;
+ throw new TajoRuntimeException(
+ new ClientUnableToConnectException(NetUtils.normalizeInetSocketAddress(qmAddress)));
} finally {
- qmClient.close();
+ if (qmClient != null) {
+ qmClient.close();
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
index a97cb33..105830f 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java
@@ -26,10 +26,10 @@ import org.apache.tajo.TajoIdProtos;
import org.apache.tajo.annotation.NotNull;
import org.apache.tajo.annotation.Nullable;
import org.apache.tajo.auth.UserRoleInfo;
-import org.apache.tajo.catalog.exception.UndefinedDatabaseException;
+import org.apache.tajo.exception.ExceptionUtil;
+import org.apache.tajo.exception.UndefinedDatabaseException;
import org.apache.tajo.client.v2.exception.ClientConnectionException;
import org.apache.tajo.exception.NoSuchSessionVariableException;
-import org.apache.tajo.exception.SQLExceptionUtil;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.ipc.ClientProtos.SessionUpdateResponse;
import org.apache.tajo.ipc.ClientProtos.UpdateSessionVariableRequest;
@@ -61,7 +61,6 @@ import java.util.concurrent.atomic.AtomicInteger;
import static org.apache.tajo.error.Errors.ResultCode.NO_SUCH_SESSION_VARIABLE;
import static org.apache.tajo.error.Errors.ResultCode.UNDEFINED_DATABASE;
import static org.apache.tajo.exception.ReturnStateUtil.*;
-import static org.apache.tajo.exception.SQLExceptionUtil.throwIfError;
import static org.apache.tajo.exception.SQLExceptionUtil.toSQLException;
import static org.apache.tajo.ipc.ClientProtos.CreateSessionRequest;
import static org.apache.tajo.ipc.ClientProtos.CreateSessionResponse;
@@ -226,7 +225,7 @@ public class SessionConnection implements Closeable {
return Collections.unmodifiableMap(sessionVarsCache);
}
- public Map<String, String> unsetSessionVariables(final List<String> variables) throws NoSuchSessionVariableException {
+ public Map<String, String> unsetSessionVariables(final List<String> variables) {
final BlockingInterface stub = getTMStub();
final UpdateSessionVariableRequest request = UpdateSessionVariableRequest.newBuilder()
@@ -241,10 +240,6 @@ public class SessionConnection implements Closeable {
throw new RuntimeException(e);
}
- if (isThisError(response.getState(), NO_SUCH_SESSION_VARIABLE)) {
- throw new NoSuchSessionVariableException(response.getState());
- }
-
ensureOk(response.getState());
updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars()));
return Collections.unmodifiableMap(sessionVarsCache);
@@ -285,7 +280,7 @@ public class SessionConnection implements Closeable {
return response.getValue();
}
- public Boolean existSessionVariable(final String varname) {
+ public boolean existSessionVariable(final String varname) {
ReturnState state;
try {
@@ -319,27 +314,19 @@ public class SessionConnection implements Closeable {
return ProtoUtil.convertToMap(response.getValue());
}
- public Boolean selectDatabase(final String dbName) throws UndefinedDatabaseException {
+ public void selectDatabase(final String dbName) throws UndefinedDatabaseException {
- BlockingInterface stub = getTMStub();
- boolean selected;
try {
- ReturnState state = stub.selectDatabase(null, getSessionedString(dbName));
-
- if (isThisError(state, UNDEFINED_DATABASE)) {
- throw new UndefinedDatabaseException(dbName);
- }
+ final BlockingInterface stub = getTMStub();
+ final ReturnState state = stub.selectDatabase(null, getSessionedString(dbName));
- selected = ensureOk(state);
+ ExceptionUtil.throwsIfThisError(state, UndefinedDatabaseException.class);
+ ensureOk(state);
+ this.baseDatabase = dbName;
} catch (ServiceException e) {
throw new RuntimeException(e);
}
-
- if (selected) {
- this.baseDatabase = dbName;
- }
- return selected;
}
@Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
index 8c167a4..a6c07ea 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java
@@ -26,11 +26,10 @@ import org.apache.tajo.annotation.ThreadSafe;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
import org.apache.tajo.catalog.TableMeta;
-import org.apache.tajo.catalog.exception.*;
import org.apache.tajo.catalog.partition.PartitionMethodDesc;
import org.apache.tajo.catalog.proto.CatalogProtos;
-import org.apache.tajo.exception.TajoException;
import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto;
+import org.apache.tajo.exception.*;
import org.apache.tajo.ipc.ClientProtos.*;
import org.apache.tajo.jdbc.TajoMemoryResultSet;
import org.apache.tajo.service.ServiceTracker;
@@ -96,7 +95,7 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
queryClient.closeQuery(queryId);
}
- public void closeNonForwardQuery(final QueryId queryId) throws SQLException {
+ public void closeNonForwardQuery(final QueryId queryId) {
queryClient.closeNonForwardQuery(queryId);
}
@@ -116,23 +115,23 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
return queryClient.executeJsonQueryAndGetResult(json);
}
- public QueryStatus getQueryStatus(QueryId queryId) {
+ public QueryStatus getQueryStatus(QueryId queryId) throws QueryNotFoundException {
return queryClient.getQueryStatus(queryId);
}
- public ResultSet getQueryResult(QueryId queryId) throws SQLException {
+ public ResultSet getQueryResult(QueryId queryId) throws TajoException {
return queryClient.getQueryResult(queryId);
}
- public ResultSet createNullResultSet(QueryId queryId) throws SQLException {
+ public ResultSet createNullResultSet(QueryId queryId) {
return TajoClientUtil.createNullResultSet(queryId);
}
- public GetQueryResultResponse getResultResponse(QueryId queryId) throws SQLException {
+ public GetQueryResultResponse getResultResponse(QueryId queryId) throws TajoException {
return queryClient.getResultResponse(queryId);
}
- public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws SQLException {
+ public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws TajoException {
return queryClient.fetchNextQueryResult(queryId, fetchRowNum);
}
@@ -144,11 +143,11 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
return queryClient.updateQueryWithJson(json);
}
- public QueryStatus killQuery(final QueryId queryId) {
+ public QueryStatus killQuery(final QueryId queryId) throws QueryNotFoundException {
return queryClient.killQuery(queryId);
}
- public List<BriefQueryInfo> getRunningQueryList() throws SQLException {
+ public List<BriefQueryInfo> getRunningQueryList() {
return queryClient.getRunningQueryList();
}
@@ -156,15 +155,15 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
return queryClient.getFinishedQueryList();
}
- public List<WorkerResourceInfo> getClusterInfo() throws SQLException {
+ public List<WorkerResourceInfo> getClusterInfo() {
return queryClient.getClusterInfo();
}
- public QueryInfoProto getQueryInfo(final QueryId queryId) throws SQLException {
+ public QueryInfoProto getQueryInfo(final QueryId queryId) throws QueryNotFoundException {
return queryClient.getQueryInfo(queryId);
}
- public QueryHistoryProto getQueryHistory(final QueryId queryId) throws SQLException {
+ public QueryHistoryProto getQueryHistory(final QueryId queryId) throws QueryNotFoundException {
return queryClient.getQueryHistory(queryId);
}
@@ -180,16 +179,18 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
// CatalogClient wrappers
/*------------------------------------------------------------------------*/
- public boolean createDatabase(final String databaseName) throws DuplicateDatabaseException {
- return catalogClient.createDatabase(databaseName);
+ public void createDatabase(final String databaseName) throws DuplicateDatabaseException {
+ catalogClient.createDatabase(databaseName);
}
public boolean existDatabase(final String databaseName) {
return catalogClient.existDatabase(databaseName);
}
- public boolean dropDatabase(final String databaseName) throws UndefinedDatabaseException {
- return catalogClient.dropDatabase(databaseName);
+ public void dropDatabase(final String databaseName) throws UndefinedDatabaseException,
+ InsufficientPrivilegeException {
+
+ catalogClient.dropDatabase(databaseName);
}
public List<String> getAllDatabaseNames() {
@@ -200,23 +201,28 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
return catalogClient.existTable(tableName);
}
- public TableDesc createExternalTable(final String tableName, final Schema schema, final URI path,
- final TableMeta meta) throws DuplicateTableException {
+ public TableDesc createExternalTable(final String tableName,
+ final Schema schema,
+ final URI path,
+ final TableMeta meta)
+ throws DuplicateTableException, UnavailableTableLocationException, InsufficientPrivilegeException {
+
return catalogClient.createExternalTable(tableName, schema, path, meta);
}
public TableDesc createExternalTable(final String tableName, final Schema schema, final URI path,
final TableMeta meta, final PartitionMethodDesc partitionMethodDesc)
- throws DuplicateTableException {
+ throws DuplicateTableException, UnavailableTableLocationException, InsufficientPrivilegeException {
return catalogClient.createExternalTable(tableName, schema, path, meta, partitionMethodDesc);
}
- public boolean dropTable(final String tableName) throws UndefinedTableException {
- return dropTable(tableName, false);
+ public void dropTable(final String tableName) throws UndefinedTableException, InsufficientPrivilegeException {
+ dropTable(tableName, false);
}
- public boolean dropTable(final String tableName, final boolean purge) throws UndefinedTableException {
- return catalogClient.dropTable(tableName, purge);
+ public void dropTable(final String tableName, final boolean purge) throws UndefinedTableException,
+ InsufficientPrivilegeException {
+ catalogClient.dropTable(tableName, purge);
}
public List<String> getTableList(@Nullable final String databaseName) {
@@ -232,37 +238,37 @@ public class TajoClientImpl extends SessionConnection implements TajoClient, Que
}
@Override
- public IndexDescProto getIndex(String indexName) throws SQLException {
+ public IndexDescProto getIndex(String indexName) {
return catalogClient.getIndex(indexName);
}
@Override
- public boolean existIndex(String indexName) throws SQLException {
+ public boolean existIndex(String indexName) {
return catalogClient.existIndex(indexName);
}
@Override
- public List<IndexDescProto> getIndexes(String tableName) throws SQLException {
+ public List<IndexDescProto> getIndexes(String tableName) {
return catalogClient.getIndexes(tableName);
}
@Override
- public boolean hasIndexes(String tableName) throws SQLException {
+ public boolean hasIndexes(String tableName) {
return catalogClient.hasIndexes(tableName);
}
@Override
- public IndexDescProto getIndex(String tableName, String[] columnNames) throws SQLException {
+ public IndexDescProto getIndex(String tableName, String[] columnNames) {
return catalogClient.getIndex(tableName, columnNames);
}
@Override
- public boolean existIndex(String tableName, String[] columnName) throws SQLException {
+ public boolean existIndex(String tableName, String[] columnName) {
return catalogClient.existIndex(tableName, columnName);
}
@Override
- public boolean dropIndex(String indexName) throws SQLException {
+ public boolean dropIndex(String indexName) {
return catalogClient.dropIndex(indexName);
}
}
http://git-wip-us.apache.org/repos/asf/tajo/blob/903151ea/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java
----------------------------------------------------------------------
diff --git a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java
index c79b756..3f30f97 100644
--- a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java
+++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientUtil.java
@@ -25,6 +25,7 @@ import org.apache.tajo.TajoProtos;
import org.apache.tajo.catalog.CatalogUtil;
import org.apache.tajo.catalog.Schema;
import org.apache.tajo.catalog.TableDesc;
+import org.apache.tajo.exception.QueryNotFoundException;
import org.apache.tajo.ipc.ClientProtos;
import org.apache.tajo.jdbc.FetchResultSet;
import org.apache.tajo.jdbc.TajoMemoryResultSet;
@@ -58,7 +59,7 @@ public class TajoClientUtil {
return !isQueryWaitingForSchedule(state) && !isQueryRunning(state);
}
- public static QueryStatus waitCompletion(QueryClient client, QueryId queryId) {
+ public static QueryStatus waitCompletion(QueryClient client, QueryId queryId) throws QueryNotFoundException {
QueryStatus status = client.getQueryStatus(queryId);
while(!isQueryComplete(status.getState())) {