merging master
Project: http://git-wip-us.apache.org/repos/asf/tajo/repo Commit: http://git-wip-us.apache.org/repos/asf/tajo/commit/3eac1578 Tree: http://git-wip-us.apache.org/repos/asf/tajo/tree/3eac1578 Diff: http://git-wip-us.apache.org/repos/asf/tajo/diff/3eac1578 Branch: refs/heads/index_support Commit: 3eac157874a952942248cd880d33ed13335d2265 Parents: a7c2fd9 Author: Jihoon Son <[email protected]> Authored: Wed Jul 22 19:20:54 2015 +0900 Committer: Jihoon Son <[email protected]> Committed: Wed Jul 22 19:20:54 2015 +0900 ---------------------------------------------------------------------- .../tajo/catalog/AbstractCatalogClient.java | 9 +++- .../tajo/master/TajoMasterClientService.java | 49 ++++++++++++-------- .../apache/tajo/master/exec/DDLExecutor.java | 8 ++-- .../java/org/apache/tajo/querymaster/Query.java | 3 +- .../planner/physical/TestSortIntersectExec.java | 3 +- .../apache/tajo/engine/query/TestIndexScan.java | 3 +- 6 files changed, 47 insertions(+), 28 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java ---------------------------------------------------------------------- diff --git a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java index e935312..402df0f 100644 --- a/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java +++ b/tajo-catalog/tajo-catalog-client/src/main/java/org/apache/tajo/catalog/AbstractCatalogClient.java @@ -34,6 +34,7 @@ import org.apache.tajo.conf.TajoConf; import org.apache.tajo.error.Errors.ResultCode; import org.apache.tajo.exception.ReturnStateUtil; import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.NullProto; +import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.ReturnState; import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListResponse; import org.apache.tajo.util.ProtoUtil; import org.apache.tajo.util.TUtil; @@ -509,7 +510,13 @@ public abstract class AbstractCatalogClient implements CatalogService, Closeable try { final BlockingInterface stub = getStub(); - return isSuccess(stub.createIndex(null, index.getProto())); + final ReturnState state = stub.createIndex(null, index.getProto()); + if (isSuccess(state)) { + return true; + } else { + // TODO + return false; + } } catch (ServiceException e) { throw new RuntimeException(e); http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java index aee9f01..c1afbc9 100644 --- a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java @@ -55,14 +55,16 @@ import org.apache.tajo.querymaster.QueryJobEvent; import org.apache.tajo.rpc.BlockingRpcServer; import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.*; import org.apache.tajo.session.Session; -import org.apache.tajo.util.IPCUtil; import org.apache.tajo.util.KeyValueSet; import org.apache.tajo.util.NetUtils; import org.apache.tajo.util.ProtoUtil; import java.io.IOException; import java.net.InetSocketAddress; -import java.util.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; import static org.apache.tajo.TajoConstants.DEFAULT_DATABASE_NAME; import static org.apache.tajo.exception.ReturnStateUtil.*; @@ -953,7 +955,7 @@ public class TajoMasterClientService extends AbstractService { return errUndefinedIndexName(indexName); } } catch (Throwable t) { - throw new ServiceException(t); + return returnError(t); } } @@ -974,14 +976,15 @@ public class TajoMasterClientService extends AbstractService { tableName = request.getValue(); } - GetIndexesResponse.Builder builder = GetIndexesResponse.newBuilder(); + IndexListResponse.Builder builder = IndexListResponse.newBuilder().setState(OK); for (IndexDesc index : catalog.getAllIndexesByTable(databaseName, tableName)) { - builder.addIndexes(index.getProto()); + builder.addIndexDesc(index.getProto()); } - builder.setResult(IPCUtil.buildOkRequestResult()); return builder.build(); } catch (Throwable t) { - throw new ServiceException(t); + return IndexListResponse.newBuilder() + .setState(returnError(t)) + .build(); } } @@ -1007,7 +1010,7 @@ public class TajoMasterClientService extends AbstractService { return errUndefinedIndex(tableName); } } catch (Throwable t) { - throw new ServiceException(t); + return returnError(t); } } @@ -1030,12 +1033,15 @@ public class TajoMasterClientService extends AbstractService { String[] columnNames = new String[request.getColumnNamesCount()]; columnNames = request.getColumnNamesList().toArray(columnNames); - GetIndexWithColumnsResponse.Builder builder = GetIndexWithColumnsResponse.newBuilder(); - builder.setResult(IPCUtil.buildOkRequestResult()); - builder.setIndexDesc(catalog.getIndexByColumnNames(databaseName, tableName, columnNames).getProto()); - return builder.build(); + return IndexResponse.newBuilder() + .setState(OK) + .setIndexDesc(catalog.getIndexByColumnNames(databaseName, tableName, columnNames).getProto()) + .build(); + } catch (Throwable t) { - throw new ServiceException(t); + return IndexResponse.newBuilder() + .setState(returnError(t)) + .build(); } } @@ -1057,10 +1063,13 @@ public class TajoMasterClientService extends AbstractService { } String[] columnNames = new String[request.getColumnNamesCount()]; columnNames = request.getColumnNamesList().toArray(columnNames); - return catalog.existIndexByColumnNames(databaseName, tableName, columnNames) ? - ProtoUtil.TRUE : ProtoUtil.FALSE; + if (catalog.existIndexByColumnNames(databaseName, tableName, columnNames)) { + return OK; + } else { + return errUndefinedIndex(tableName, request.getColumnNamesList()); + } } catch (Throwable t) { - throw new ServiceException(t); + return returnError(t); } } @@ -1070,6 +1079,7 @@ public class TajoMasterClientService extends AbstractService { try { context.getSessionManager().touch(request.getSessionId().getId()); Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + QueryContext queryContext = new QueryContext(conf, session); String indexName, databaseName; if (CatalogUtil.isFQTableName(request.getValue())) { @@ -1080,10 +1090,11 @@ public class TajoMasterClientService extends AbstractService { databaseName = session.getCurrentDatabase(); indexName = request.getValue(); } - return catalog.dropIndex(databaseName, indexName) ? - ProtoUtil.TRUE : ProtoUtil.FALSE; + catalog.dropIndex(databaseName, indexName); + + return OK; } catch (Throwable t) { - throw new ServiceException(t); + return returnError(t); } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/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 c7dc6ef..96c0812 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 @@ -135,7 +135,7 @@ public class DDLExecutor { } if (catalog.existIndexByName(databaseName, simpleIndexName)) { - throw new AlreadyExistsIndexException(simpleIndexName); + throw new DuplicateIndexException(simpleIndexName); } ScanNode scanNode = PlannerUtil.findTopNode(createIndexNode, NodeType.SCAN); @@ -152,7 +152,7 @@ public class DDLExecutor { LOG.info("Index " + qualifiedIndexName + " is created for the table " + scanNode.getTableName() + "."); } else { LOG.info("Index creation " + qualifiedIndexName + " is failed."); - throw new CatalogException("Cannot create index \"" + qualifiedIndexName + "\"."); + throw new TajoInternalError("Cannot create index \"" + qualifiedIndexName + "\"."); } } @@ -168,14 +168,14 @@ public class DDLExecutor { } if (!catalog.existIndexByName(databaseName, simpleIndexName)) { - throw new NoSuchIndexException(simpleIndexName); + throw new UndefinedIndexException(simpleIndexName); } IndexDesc desc = catalog.getIndexByName(databaseName, simpleIndexName); if (!catalog.dropIndex(databaseName, simpleIndexName)) { LOG.info("Cannot drop index \"" + simpleIndexName + "\"."); - throw new CatalogException("Cannot drop index \"" + simpleIndexName + "\"."); + throw new TajoInternalError("Cannot drop index \"" + simpleIndexName + "\"."); } Path indexPath = new Path(desc.getIndexPath()); http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/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 99c8194..1f86917 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 @@ -45,6 +45,7 @@ import org.apache.tajo.engine.planner.global.ExecutionBlock; import org.apache.tajo.engine.planner.global.ExecutionBlockCursor; import org.apache.tajo.engine.planner.global.ExecutionQueue; import org.apache.tajo.engine.planner.global.MasterPlan; +import org.apache.tajo.exception.TajoInternalError; import org.apache.tajo.plan.logical.*; import org.apache.tajo.engine.query.QueryContext; import org.apache.tajo.master.event.*; @@ -566,7 +567,7 @@ public class Query implements EventHandler<QueryEvent> { LOG.info("Index " + qualifiedIndexName + " is created for the table " + scanNode.getTableName() + "."); } else { LOG.info("Index creation " + qualifiedIndexName + " is failed."); - throw new CatalogException("Cannot create index \"" + qualifiedIndexName + "\"."); + throw new TajoInternalError("Cannot create index \"" + qualifiedIndexName + "\"."); } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortIntersectExec.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortIntersectExec.java b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortIntersectExec.java index 3372651..66426df 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortIntersectExec.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/planner/physical/TestSortIntersectExec.java @@ -23,7 +23,6 @@ import org.apache.tajo.LocalTajoTestingUtility; import org.apache.tajo.TajoTestingCluster; import org.apache.tajo.algebra.Expr; import org.apache.tajo.catalog.*; -import org.apache.tajo.catalog.proto.CatalogProtos; import org.apache.tajo.common.TajoDataTypes; import org.apache.tajo.conf.TajoConf; import org.apache.tajo.datum.Datum; @@ -141,7 +140,7 @@ public class TestSortIntersectExec { analyzer = new SQLAnalyzer(); planner = new LogicalPlanner(catalog, TablespaceManager.getInstance()); - optimizer = new LogicalOptimizer(conf); + optimizer = new LogicalOptimizer(conf, catalog); } @After http://git-wip-us.apache.org/repos/asf/tajo/blob/3eac1578/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java ---------------------------------------------------------------------- diff --git a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java index 3a4ff6f..75127d2 100644 --- a/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java +++ b/tajo-core/src/test/java/org/apache/tajo/engine/query/TestIndexScan.java @@ -27,13 +27,14 @@ import org.junit.Test; import org.junit.experimental.categories.Category; import java.sql.ResultSet; +import java.sql.SQLException; import java.util.HashMap; import java.util.Map; @Category(IntegrationTest.class) public class TestIndexScan extends QueryTestCaseBase { - public TestIndexScan() throws ServiceException { + public TestIndexScan() throws ServiceException, SQLException { super(TajoConstants.DEFAULT_DATABASE_NAME); Map<String,String> sessionVars = new HashMap<String, String>(); sessionVars.put(SessionVars.INDEX_ENABLED.keyname(), "true");
