http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java ---------------------------------------------------------------------- diff --cc tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java index e6566dc,e73a032..79ba71f --- a/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java +++ b/tajo-client/src/main/java/org/apache/tajo/client/CatalogAdminClientImpl.java @@@ -26,12 -26,13 +26,20 @@@ import org.apache.tajo.catalog.TableDes import org.apache.tajo.catalog.TableMeta; import org.apache.tajo.catalog.partition.PartitionMethodDesc; import org.apache.tajo.catalog.proto.CatalogProtos; ++<<<<<<< HEAD +import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto; +import org.apache.tajo.ipc.ClientProtos; +import org.apache.tajo.ipc.ClientProtos.*; +import org.apache.tajo.jdbc.SQLStates; ++======= + import org.apache.tajo.catalog.proto.CatalogProtos.FunctionDescProto; + import org.apache.tajo.catalog.proto.CatalogProtos.TableResponse; + import org.apache.tajo.exception.SQLExceptionUtil; + import org.apache.tajo.ipc.ClientProtos; + import org.apache.tajo.ipc.ClientProtos.DropTableRequest; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.rpc.NettyClientBase; - import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos; + import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListResponse; import java.io.IOException; import java.net.URI; @@@ -113,11 -133,18 +140,26 @@@ public class CatalogAdminClientImpl imp if (partitionMethodDesc != null) { builder.setPartition(partitionMethodDesc.getProto()); } ++<<<<<<< HEAD + ClientProtos.TableResponse res = tajoMasterService.createExternalTable(null, builder.build()); + if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) { + return CatalogUtil.newTableDesc(res.getTableDesc()); + } else { + throw new SQLException(res.getResult().getErrorMessage(), SQLStates.ER_NO_SUCH_TABLE.getState()); ++======= + + TableResponse res; + try { + res = tajoMasterService.createExternalTable(null, builder.build()); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + if (isSuccess(res.getState())) { + return CatalogUtil.newTableDesc(res.getTable()); + } else { + throw SQLExceptionUtil.toSQLException(res.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } @@@ -158,120 -187,36 +202,152 @@@ } @Override ++<<<<<<< HEAD + public TableDesc getTableDesc(final String tableName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + + SessionedStringProto.Builder builder = SessionedStringProto.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setValue(tableName); + ClientProtos.TableResponse res = tajoMasterService.getTableDesc(null, builder.build()); + if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) { + return CatalogUtil.newTableDesc(res.getTableDesc()); + } else { + throw new ServiceException(new SQLException(res.getResult().getErrorMessage(), + SQLStates.ER_NO_SUCH_TABLE.getState())); ++======= + public TableDesc getTableDesc(final String tableName) throws SQLException { + + final BlockingInterface stub = conn.getTMStub(); + + TableResponse res; + try { + res = stub.getTableDesc(null, conn.getSessionedString(tableName)); + } catch (ServiceException e) { + throw new RuntimeException(e); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + + throwIfError(res.getState()); + return CatalogUtil.newTableDesc(res.getTable()); } @Override ++<<<<<<< HEAD + public List<CatalogProtos.FunctionDescProto> getFunctions(final String functionName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + + String paramFunctionName = functionName == null ? "" : functionName; + ClientProtos.FunctionResponse res = tajoMasterService.getFunctionList(null, + connection.convertSessionedString(paramFunctionName)); + if (res.getResult().getResultCode() == ClientProtos.ResultCode.OK) { + return res.getFunctionsList(); + } else { + throw new ServiceException(res.getResult().getErrorMessage()); + } + } + + @Override + public IndexDescProto getIndex(final String indexName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + return tajoMasterService.getIndexWithName(null, + connection.convertSessionedString(indexName)); + } + + @Override + public boolean existIndex(final String indexName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + return tajoMasterService.existIndexWithName(null, + connection.convertSessionedString(indexName)).getValue(); + } + + @Override + public List<IndexDescProto> getIndexes(final String tableName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + GetIndexesResponse response = tajoMasterService.getIndexesForTable(null, + connection.convertSessionedString(tableName)); + if (response.getResult().getResultCode() == ResultCode.OK) { + return response.getIndexesList(); + } else { + throw new ServiceException(response.getResult().getErrorMessage()); + } + } + + @Override + public boolean hasIndexes(final String tableName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + return tajoMasterService.existIndexesForTable(null, + connection.convertSessionedString(tableName)).getValue(); + } + + @Override + public IndexDescProto getIndex(final String tableName, final String[] columnNames) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + GetIndexWithColumnsRequest.Builder builder = GetIndexWithColumnsRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setTableName(tableName); + for (String eachColumnName : columnNames) { + builder.addColumnNames(eachColumnName); + } + GetIndexWithColumnsResponse response = tajoMasterService.getIndexWithColumns(null, builder.build()); + if (response.getResult().getResultCode() == ResultCode.OK) { + return response.getIndexDesc(); + } else { + throw new ServiceException(response.getResult().getErrorMessage()); + } + } + + @Override + public boolean existIndex(final String tableName, final String[] columnName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + GetIndexWithColumnsRequest.Builder builder = GetIndexWithColumnsRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setTableName(tableName); + for (String eachColumnName : columnName) { + builder.addColumnNames(eachColumnName); + } + return tajoMasterService.existIndexWithColumns(null, builder.build()).getValue(); + } + + @Override + public boolean dropIndex(final String indexName) throws ServiceException { + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + BlockingInterface tajoMasterService = client.getStub(); + return tajoMasterService.dropIndex(null, + connection.convertSessionedString(indexName)).getValue(); ++======= + public List<FunctionDescProto> getFunctions(final String functionName) throws SQLException { + + final BlockingInterface stub = conn.getTMStub(); + + String paramFunctionName = functionName == null ? "" : functionName; + CatalogProtos.FunctionListResponse res; + try { + res = stub.getFunctionList(null, conn.getSessionedString(paramFunctionName)); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + throwIfError(res.getState()); + return res.getFunctionList(); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } @Override
http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java ---------------------------------------------------------------------- diff --cc tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java index 71e3179,80a49c2..04098fc --- a/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java +++ b/tajo-client/src/main/java/org/apache/tajo/client/QueryClientImpl.java @@@ -152,41 -144,23 +144,55 @@@ public class QueryClientImpl implement } @Override - public ClientProtos.SubmitQueryResponse executeQuery(final String sql) throws ServiceException { - NettyClientBase client = connection.getTajoMasterConnection(); - connection.checkSessionAndGet(client); + public ClientProtos.SubmitQueryResponse executeQuery(final String sql) throws SQLException { ++<<<<<<< HEAD + final QueryRequest.Builder builder = QueryRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setQuery(sql); + builder.setIsJson(false); + TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + SubmitQueryResponse response = tajoMasterService.submitQuery(null, builder.build()); + if (response.getResult().getResultCode() == ResultCode.OK) { + connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); ++======= + final BlockingInterface stub = conn.getTMStub(); + final QueryRequest request = buildQueryRequest(sql, false); + + SubmitQueryResponse response; + try { + response = stub.submitQuery(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + if (isSuccess(response.getState())) { + conn.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + return response; + +//<<<<<<< HEAD +// connection.checkSessionAndGet(client); +// +// final QueryRequest.Builder builder = QueryRequest.newBuilder(); +// builder.setSessionId(connection.sessionId); +// builder.setQuery(sql); +// builder.setIsJson(false); +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// +// +// +// } +// }.withRetries(); +//======= +// SubmitQueryResponse response = tajoMasterService.submitQuery(null, builder.build()); +// if (response.getResultCode() == ResultCode.OK) { +// connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); +// } +// return response; +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 } @Override @@@ -206,17 -176,10 +208,21 @@@ } @Override - public ResultSet executeQueryAndGetResult(String sql) throws ServiceException, IOException { + public ResultSet executeQueryAndGetResult(String sql) throws SQLException { ClientProtos.SubmitQueryResponse response = executeQuery(sql); ++<<<<<<< HEAD + + if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) { + if (response.getResult().hasErrorMessage()) { + throw new ServiceException(response.getResult().getErrorMessage()); + } else if (response.getResult().hasErrorTrace()) { + throw new ServiceException(response.getResult().getErrorTrace()); + } + } ++======= + throwIfError(response.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 QueryId queryId = new QueryId(response.getQueryId()); @@@ -242,16 -205,12 +248,19 @@@ } @Override - public ResultSet executeJsonQueryAndGetResult(final String json) throws ServiceException, IOException { + public ResultSet executeJsonQueryAndGetResult(final String json) throws SQLException { ClientProtos.SubmitQueryResponse response = executeQueryWithJson(json); ++<<<<<<< HEAD + + if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) { + throw new ServiceException(response.getResult().getErrorTrace()); + } ++======= + throwIfError(response.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 QueryId queryId = new QueryId(response.getQueryId()); - if (response.getIsForwarded()) { if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) { @@@ -361,161 -315,67 +365,195 @@@ } @Override - public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) - throws ServiceException { + public TajoMemoryResultSet fetchNextQueryResult(final QueryId queryId, final int fetchRowNum) throws SQLException { ++<<<<<<< HEAD + try { +//<<<<<<< HEAD +// final ServerCallable<ClientProtos.SerializedResultSet> callable = +// new ServerCallable<ClientProtos.SerializedResultSet>(connection.manager, connection.getTajoMasterAddr(), +// TajoMasterClientProtocol.class, false) { +// +// public ClientProtos.SerializedResultSet call(NettyClientBase client) throws ServiceException { +// +// connection.checkSessionAndGet(client); +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// +// GetQueryResultDataRequest.Builder builder = GetQueryResultDataRequest.newBuilder(); +// builder.setSessionId(connection.sessionId); +// builder.setQueryId(queryId.getProto()); +// builder.setFetchRowNum(fetchRowNum); +// try { +// GetQueryResultDataResponse response = tajoMasterService.getQueryResultData(null, builder.build()); +// if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) { +// abort(); +// throw new ServiceException(response.getResult().getErrorMessage()); +// } +// +// return response.getResultSet(); +// } catch (ServiceException e) { +// abort(); +// throw e; +// } catch (Throwable t) { +// throw new ServiceException(t.getMessage(), t); +// } +// } +// }; +// +// ClientProtos.SerializedResultSet serializedResultSet = callable.withRetries(); +//======= + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + + GetQueryResultDataRequest.Builder builder = GetQueryResultDataRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setQueryId(queryId.getProto()); + builder.setFetchRowNum(fetchRowNum); + + GetQueryResultDataResponse response = tajoMasterService.getQueryResultData(null, builder.build()); + if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) { + throw new ServiceException(response.getResult().getErrorMessage()); + } + + ClientProtos.SerializedResultSet resultSet = response.getResultSet(); +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 ++======= + final BlockingInterface stub = conn.getTMStub(); + final GetQueryResultDataRequest request = GetQueryResultDataRequest.newBuilder() + .setSessionId(conn.sessionId) + .setQueryId(queryId.getProto()) + .setFetchRowNum(fetchRowNum) + .build(); + ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 - return new TajoMemoryResultSet(queryId, - new Schema(resultSet.getSchema()), - resultSet.getSerializedTuplesList(), - resultSet.getSerializedTuplesCount(), - getClientSideSessionVars()); + GetQueryResultDataResponse response; + try { + response = stub.getQueryResultData(null, request); } catch (ServiceException e) { - throw e; - } catch (Throwable e) { - throw new ServiceException(e.getMessage(), e); + throw new RuntimeException(e); } + + throwIfError(response.getState()); + + ClientProtos.SerializedResultSet resultSet = response.getResultSet(); + return new TajoMemoryResultSet(queryId, + new Schema(resultSet.getSchema()), + resultSet.getSerializedTuplesList(), + resultSet.getSerializedTuplesCount(), + getClientSideSessionVars()); } @Override - public boolean updateQuery(final String sql) throws ServiceException { + public boolean updateQuery(final String sql) throws SQLException { - NettyClientBase client = connection.getTajoMasterConnection(); - connection.checkSessionAndGet(client); - TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); - - QueryRequest.Builder builder = QueryRequest.newBuilder(); - builder.setSessionId(connection.sessionId); - builder.setQuery(sql); - builder.setIsJson(false); - ClientProtos.UpdateQueryResponse response = tajoMasterService.updateQuery(null, builder.build()); + final BlockingInterface stub = conn.getTMStub(); + final QueryRequest request = buildQueryRequest(sql, false); ++<<<<<<< HEAD +//<<<<<<< HEAD +// connection.checkSessionAndGet(client); +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// +// QueryRequest.Builder builder = QueryRequest.newBuilder(); +// builder.setSessionId(connection.sessionId); +// builder.setQuery(sql); +// builder.setIsJson(false); +// ClientProtos.UpdateQueryResponse response = tajoMasterService.updateQuery(null, builder.build()); +// +// if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) { +// connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); +// return true; +// } else { +// if (response.getResult().hasErrorMessage()) { +// System.err.println("ERROR: " + response.getResult().getErrorMessage()); +// } +// return false; +// } +//======= + if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) { + connection.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + return true; + } else { + if (response.getResult().hasErrorMessage()) { + LOG.error("ERROR: " + response.getResult().getErrorMessage()); +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 + } + return false; ++======= + UpdateQueryResponse response; + try { + response = stub.updateQuery(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + + throwIfError(response.getState()); + conn.updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + + return true; } @Override - public boolean updateQueryWithJson(final String json) throws ServiceException { + public boolean updateQueryWithJson(final String json) throws SQLException { ++<<<<<<< HEAD +//<<<<<<< HEAD +// return new ServerCallable<Boolean>(connection.manager, connection.getTajoMasterAddr(), +// TajoMasterClientProtocol.class, false) { +// +// public Boolean call(NettyClientBase client) throws ServiceException { +// +// connection.checkSessionAndGet(client); +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// +// QueryRequest.Builder builder = QueryRequest.newBuilder(); +// builder.setSessionId(connection.sessionId); +// builder.setQuery(json); +// builder.setIsJson(true); +// ClientProtos.UpdateQueryResponse response = tajoMasterService.updateQuery(null, builder.build()); +// if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) { +// return true; +// } else { +// if (response.getResult().hasErrorMessage()) { +// System.err.println("ERROR: " + response.getResult().getErrorMessage()); +// } +// return false; +// } +//======= + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + + QueryRequest.Builder builder = QueryRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setQuery(json); + builder.setIsJson(true); + ClientProtos.UpdateQueryResponse response = tajoMasterService.updateQuery(null, builder.build()); + if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) { + return true; + } else { + if (response.getResult().hasErrorMessage()) { + LOG.error("ERROR: " + response.getResult().getErrorMessage()); +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 + } + return false; ++======= + final BlockingInterface stub = conn.getTMStub(); + final QueryRequest request = buildQueryRequest(json, true); + + UpdateQueryResponse response; + try { + response = stub.updateQuery(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + + throwIfError(response.getState()); + return true; } @Override @@@ -606,46 -471,23 +649,63 @@@ return this.maxRows; } ++<<<<<<< HEAD + public QueryInfoProto getQueryInfo(final QueryId queryId) throws ServiceException { +//<<<<<<< HEAD +// return new ServerCallable<QueryInfoProto>(connection.manager, connection.getTajoMasterAddr(), +// TajoMasterClientProtocol.class, false) { +// public QueryInfoProto call(NettyClientBase client) throws ServiceException { +// connection.checkSessionAndGet(client); +// +// QueryIdRequest.Builder builder = QueryIdRequest.newBuilder(); +// builder.setSessionId(connection.sessionId); +// builder.setQueryId(queryId.getProto()); +// +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// GetQueryInfoResponse res = tajoMasterService.getQueryInfo(null,builder.build()); +// if (res.getResult().getResultCode() == ResultCode.OK) { +// return res.getQueryInfo(); +// } else { +// abort(); +// throw new ServiceException(res.getResult().getErrorMessage()); +// } +// } +// }.withRetries(); +//======= + NettyClientBase client = connection.getTajoMasterConnection(); + connection.checkSessionAndGet(client); + + QueryIdRequest.Builder builder = QueryIdRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setQueryId(queryId.getProto()); + + TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + GetQueryInfoResponse res = tajoMasterService.getQueryInfo(null,builder.build()); + if (res.getResult().getResultCode() == ResultCode.OK) { + return res.getQueryInfo(); + } else { + throw new ServiceException(res.getResult().getErrorMessage()); + } +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 ++======= + public QueryInfoProto getQueryInfo(final QueryId queryId) throws SQLException { + + final BlockingInterface stub = conn.getTMStub(); + final QueryIdRequest request = buildQueryIdRequest(queryId); + + GetQueryInfoResponse res; + try { + res = stub.getQueryInfo(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + throwIfError(res.getState()); + return res.getQueryInfo(); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } - public QueryHistoryProto getQueryHistory(final QueryId queryId) throws ServiceException { + public QueryHistoryProto getQueryHistory(final QueryId queryId) throws SQLException { final QueryInfoProto queryInfo = getQueryInfo(queryId); if (queryInfo.getHostNameOfQM() == null || queryInfo.getQueryMasterClientPort() == 0) { @@@ -655,41 -498,63 +716,89 @@@ queryInfo.getHostNameOfQM(), queryInfo.getQueryMasterClientPort()); RpcClientManager manager = RpcClientManager.getInstance(); - NettyClientBase queryMasterClient; - try { - queryMasterClient = manager.newClient(qmAddress, QueryMasterClientProtocol.class, false, - manager.getRetries(), manager.getTimeoutSeconds(), TimeUnit.SECONDS, false); - } catch (Exception e) { - throw new ServiceException(e); - } + NettyClientBase qmClient = null; try { ++<<<<<<< HEAD + connection.checkSessionAndGet(connection.getTajoMasterConnection()); + +//<<<<<<< HEAD +// QueryMasterClientProtocolService.BlockingInterface queryMasterService = client.getStub(); +// GetQueryHistoryResponse res = queryMasterService.getQueryHistory(null,builder.build()); +// if (res.getResult().getResultCode() == ResultCode.OK) { +// return res.getQueryHistory(); +// } else { +// abort(); +// throw new ServiceException(res.getResult().getErrorMessage()); +// } +//======= + QueryIdRequest.Builder builder = QueryIdRequest.newBuilder(); + builder.setSessionId(connection.sessionId); + builder.setQueryId(queryId.getProto()); + + QueryMasterClientProtocolService.BlockingInterface queryMasterService = queryMasterClient.getStub(); + GetQueryHistoryResponse res = queryMasterService.getQueryHistory(null, builder.build()); + if (res.getResult().getResultCode() == ResultCode.OK) { + return res.getQueryHistory(); + } else { + throw new ServiceException(res.getResult().getErrorMessage()); +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 ++======= + + qmClient = manager.newClient( + qmAddress, + QueryMasterClientProtocol.class, + false, + manager.getRetries(), + manager.getTimeoutSeconds(), + TimeUnit.SECONDS, + false + ); + + conn.checkSessionAndGet(conn.getTajoMasterConnection()); + + QueryIdRequest request = QueryIdRequest.newBuilder() + .setSessionId(conn.sessionId) + .setQueryId(queryId.getProto()) + .build(); + + QueryMasterClientProtocolService.BlockingInterface stub = qmClient.getStub(); + GetQueryHistoryResponse res; + try { + res = stub.getQueryHistory(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + + throwIfError(res.getState()); + return res.getQueryHistory(); + + } 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; } finally { - queryMasterClient.close(); + qmClient.close(); } } + + private QueryIdRequest buildQueryIdRequest(QueryId queryId) { + return ClientProtos.QueryIdRequest.newBuilder() + .setSessionId(SessionIdProto.newBuilder().setId(getSessionId())) + .setQueryId(queryId.getProto()) + .build(); + } + + private QueryRequest buildQueryRequest(String query, boolean json) { + return QueryRequest.newBuilder() + .setSessionId(conn.sessionId) + .setQuery(query) + .setIsJson(json) + .build(); + } } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/QueryStatus.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java ---------------------------------------------------------------------- diff --cc tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java index fece670,788d193..ad6dbd5 --- a/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java +++ b/tajo-client/src/main/java/org/apache/tajo/client/SessionConnection.java @@@ -161,86 -185,67 +185,130 @@@ public class SessionConnection implemen NettyClientBase client = getTajoMasterConnection(); checkSessionAndGet(client); - TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); - return tajoMasterService.getCurrentDatabase(null, sessionId).getValue(); + BlockingInterface tajoMasterService = client.getStub(); + + StringResponse response; + try { + response = tajoMasterService.getCurrentDatabase(null, sessionId); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + throwIfError(response.getState()); + return response.getValue(); } ++<<<<<<< HEAD + public Map<String, String> updateSessionVariables(final Map<String, String> variables) throws ServiceException { +//<<<<<<< HEAD +// return new ServerCallable<Map<String, String>>(manager, getTajoMasterAddr(), +// TajoMasterClientProtocol.class, false) { +// +// public Map<String, String> call(NettyClientBase client) throws ServiceException { +// checkSessionAndGet(client); +// +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// KeyValueSet keyValueSet = new KeyValueSet(); +// keyValueSet.putAll(variables); +// ClientProtos.UpdateSessionVariableRequest request = ClientProtos.UpdateSessionVariableRequest.newBuilder() +// .setSessionId(sessionId) +// .setSessionVars(keyValueSet.getProto()).build(); +// +// SessionUpdateResponse response = tajoMasterService.updateSessionVariables(null, request); +// +// if (response.getResult().getResultCode() == ResultCode.OK) { +// updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); +// return Collections.unmodifiableMap(sessionVarsCache); +// } else { +// throw new ServiceException(response.getResult().getErrorMessage()); +// } +// } +// }.withRetries(); +// } +//======= ++======= + public Map<String, String> updateSessionVariables(final Map<String, String> variables) throws SQLException { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 NettyClientBase client = getTajoMasterConnection(); checkSessionAndGet(client); +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 - TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + BlockingInterface tajoMasterService = client.getStub(); KeyValueSet keyValueSet = new KeyValueSet(); keyValueSet.putAll(variables); - ClientProtos.UpdateSessionVariableRequest request = ClientProtos.UpdateSessionVariableRequest.newBuilder() + UpdateSessionVariableRequest request = UpdateSessionVariableRequest.newBuilder() .setSessionId(sessionId) .setSessionVars(keyValueSet.getProto()).build(); - SessionUpdateResponse response = tajoMasterService.updateSessionVariables(null, request); + SessionUpdateResponse response; ++<<<<<<< HEAD + if (response.getResult().getResultCode() == ResultCode.OK) { + updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + return Collections.unmodifiableMap(sessionVarsCache); + } else { + throw new ServiceException(response.getResult().getErrorMessage()); ++======= + try { + response = tajoMasterService.updateSessionVariables(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); + } + + if (isSuccess(response.getState())) { + updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + return Collections.unmodifiableMap(sessionVarsCache); + } else { + throw toSQLException(response.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } - public Map<String, String> unsetSessionVariables(final List<String> variables) throws ServiceException { - NettyClientBase client = getTajoMasterConnection(); - checkSessionAndGet(client); + public Map<String, String> unsetSessionVariables(final List<String> variables) throws SQLException { ++<<<<<<< HEAD +//<<<<<<< HEAD +// if (response.getResult().getResultCode() == ResultCode.OK) { +// updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); +// return Collections.unmodifiableMap(sessionVarsCache); +// } else { +// throw new ServiceException(response.getResult().getErrorMessage()); +// } +// } +// }.withRetries(); +//======= + TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + ClientProtos.UpdateSessionVariableRequest request = ClientProtos.UpdateSessionVariableRequest.newBuilder() ++======= + final BlockingInterface stub = getTMStub(); + final UpdateSessionVariableRequest request = UpdateSessionVariableRequest.newBuilder() ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 .setSessionId(sessionId) - .addAllUnsetVariables(variables).build(); + .addAllUnsetVariables(variables) + .build(); - SessionUpdateResponse response = tajoMasterService.updateSessionVariables(null, request); + SessionUpdateResponse response; + try { + response = stub.updateSessionVariables(null, request); + } catch (ServiceException e) { + throw new RuntimeException(e); + } ++<<<<<<< HEAD + if (response.getResult().getResultCode() == ResultCode.OK) { + updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + return Collections.unmodifiableMap(sessionVarsCache); + } else { + throw new ServiceException(response.getResult().getErrorMessage()); ++======= + if (isSuccess(response.getState())) { + updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); + return Collections.unmodifiableMap(sessionVarsCache); + } else { + throw toSQLException(response.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 } void updateSessionVarsCache(Map<String, String> variables) { @@@ -343,18 -361,24 +424,32 @@@ builder.setBaseDatabaseName(baseDatabase); } - CreateSessionResponse response = tajoMasterService.createSession(null, builder.build()); ++<<<<<<< HEAD + if (response.getResult().getResultCode() == ResultCode.OK) { ++======= + CreateSessionResponse response = null; + + try { + response = tajoMasterService.createSession(null, builder.build()); + } catch (ServiceException se) { + throw new RuntimeException(se); + } + + if (isSuccess(response.getState())) { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 sessionId = response.getSessionId(); updateSessionVarsCache(ProtoUtil.convertToMap(response.getSessionVars())); if (LOG.isDebugEnabled()) { LOG.debug(String.format("Got session %s as a user '%s'.", sessionId.getId(), userInfo.getUserName())); } - } else { ++<<<<<<< HEAD + throw new InvalidClientSessionException(response.getResult().getErrorMessage()); ++======= + throw SQLExceptionUtil.toSQLException(response.getState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } } @@@ -368,21 -392,12 +463,25 @@@ NettyClientBase client = getTajoMasterConnection(); +//<<<<<<< HEAD +// // create new session +// TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); +// CreateSessionResponse response = tajoMasterService.createSession(null, builder.build()); +// if (response.getResult().getResultCode() != ResultCode.OK) { +// return false; +// } +//======= // create new session - TajoMasterClientProtocolService.BlockingInterface tajoMasterService = client.getStub(); + BlockingInterface tajoMasterService = client.getStub(); CreateSessionResponse response = tajoMasterService.createSession(null, builder.build()); ++<<<<<<< HEAD + if (response.getResult().getResultCode() != ResultCode.OK) { ++======= + if (isError(response.getState())) { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 return false; } +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 // Invalidate some session variables in client cache sessionId = response.getSessionId(); @@@ -424,10 -419,9 +523,14 @@@ .setSessionId(sessionId) .setSessionVars(keyValueSet.getProto()).build(); ++<<<<<<< HEAD + if (tajoMasterService.updateSessionVariables(null, request).getResult().getResultCode() != ResultCode.OK) { ++======= + if (isError(tajoMasterService.updateSessionVariables(null, request).getState())) { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 tajoMasterService.removeSession(null, sessionId); return false; +//>>>>>>> 9b3824b5f0c64af42bfcf0a6bb8d3555c22c5746 } LOG.info(String.format("Reconnected to session %s as a user '%s'.", sessionId.getId(), userInfo.getUserName())); return true; http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java ---------------------------------------------------------------------- diff --cc tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java index a7e94aa,c81fafc..be3c37f --- a/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java +++ b/tajo-client/src/main/java/org/apache/tajo/client/TajoClientImpl.java @@@ -226,42 -224,7 +225,42 @@@ public class TajoClientImpl extends Ses return catalogClient.getTableDesc(tableName); } - public List<CatalogProtos.FunctionDescProto> getFunctions(final String functionName) throws ServiceException { + public List<CatalogProtos.FunctionDescProto> getFunctions(final String functionName) throws SQLException { return catalogClient.getFunctions(functionName); } + + @Override + public IndexDescProto getIndex(String indexName) throws ServiceException { + return catalogClient.getIndex(indexName); + } + + @Override + public boolean existIndex(String indexName) throws ServiceException { + return catalogClient.existIndex(indexName); + } + + @Override + public List<IndexDescProto> getIndexes(String tableName) throws ServiceException { + return catalogClient.getIndexes(tableName); + } + + @Override + public boolean hasIndexes(String tableName) throws ServiceException { + return catalogClient.hasIndexes(tableName); + } + + @Override + public IndexDescProto getIndex(String tableName, String[] columnNames) throws ServiceException { + return catalogClient.getIndex(tableName, columnNames); + } + + @Override + public boolean existIndex(String tableName, String[] columnName) throws ServiceException { + return catalogClient.existIndex(tableName, columnName); + } + + @Override + public boolean dropIndex(String indexName) throws ServiceException { + return catalogClient.dropIndex(indexName); + } } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/proto/ClientProtos.proto ---------------------------------------------------------------------- diff --cc tajo-client/src/main/proto/ClientProtos.proto index 59ff63f,021cfe7..ed5939c --- a/tajo-client/src/main/proto/ClientProtos.proto +++ b/tajo-client/src/main/proto/ClientProtos.proto @@@ -206,16 -194,6 +192,19 @@@ message DropTableRequest optional bool purge = 3 [default = false]; } - message TableResponse { - required RequestResult result = 1; - optional TableDescProto tableDesc = 2; - } - - message FunctionResponse { - required RequestResult result = 1; - repeated FunctionDescProto functions = 2; - } - ++//<<<<<<< HEAD ++//message TableResponse { ++// required RequestResult result = 1; ++// optional TableDescProto tableDesc = 2; ++//} ++// ++//message FunctionResponse { ++// required RequestResult result = 1; ++// repeated FunctionDescProto functions = 2; ++//} ++// ++//======= ++//>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 message QueryInfoProto { required string queryId = 1; optional string sql = 2; http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-client/src/main/proto/TajoMasterClientProtocol.proto ---------------------------------------------------------------------- diff --cc tajo-client/src/main/proto/TajoMasterClientProtocol.proto index 9c7755a,1dcf1ac..edf98cd --- a/tajo-client/src/main/proto/TajoMasterClientProtocol.proto +++ b/tajo-client/src/main/proto/TajoMasterClientProtocol.proto @@@ -63,18 -65,9 +65,18 @@@ service TajoMasterClientProtocolServic // Table Management APIs rpc createExternalTable(CreateTableRequest) returns (TableResponse); - rpc existTable(SessionedStringProto) returns (BoolProto); - rpc dropTable(DropTableRequest) returns (BoolProto); - rpc getTableList(SessionedStringProto) returns (StringListProto); + rpc existTable(SessionedStringProto) returns (ReturnState); + rpc dropTable(DropTableRequest) returns (ReturnState); + rpc getTableList(SessionedStringProto) returns (StringListResponse); rpc getTableDesc(SessionedStringProto) returns (TableResponse); - rpc getFunctionList(SessionedStringProto) returns (FunctionResponse); + rpc getFunctionList(SessionedStringProto) returns (FunctionListResponse); + + // Index Management APIs + rpc getIndexWithName(SessionedStringProto) returns (IndexDescProto); + rpc existIndexWithName(SessionedStringProto) returns (BoolProto); + rpc getIndexesForTable(SessionedStringProto) returns (GetIndexesResponse); + rpc existIndexesForTable(SessionedStringProto) returns (BoolProto); + rpc getIndexWithColumns(GetIndexWithColumnsRequest) returns (GetIndexWithColumnsResponse); + rpc existIndexWithColumns(GetIndexWithColumnsRequest) returns (BoolProto); + rpc dropIndex(SessionedStringProto) returns (BoolProto); } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/SessionVars.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/conf/TajoConf.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java ---------------------------------------------------------------------- diff --cc tajo-common/src/main/java/org/apache/tajo/util/TUtil.java index bbd78dd,66e8acc..f24be61 --- a/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java +++ b/tajo-common/src/main/java/org/apache/tajo/util/TUtil.java @@@ -270,11 -268,12 +270,20 @@@ public class TUtil return element.getClassName() + ":" + element.getMethodName() + "(" + element.getLineNumber() +")"; } + public static URI stringToURI(String str) { + try { + return new URI(str); + } catch (URISyntaxException e) { + throw new RuntimeException("Cannot convert " + str + " to the URI type", e); + } + } ++ + public static <T> T checkTypeAndGet(Object instance, Class<T> type) { + if (!type.isInstance(instance)) { + throw new IllegalArgumentException(instance.getClass().getSimpleName() + + " must be a " + type.getSimpleName() + " type"); + + } + return (T) instance; + } } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java index 20e8bb8,e433e4f..0b1e585 --- a/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java +++ b/tajo-core/src/main/java/org/apache/tajo/engine/parser/SQLAnalyzer.java @@@ -27,12 -27,8 +27,14 @@@ import org.antlr.v4.runtime.tree.Termin import org.apache.tajo.SessionVars; import org.apache.tajo.algebra.*; import org.apache.tajo.algebra.Aggregation.GroupType; +import org.apache.tajo.algebra.CreateIndex.IndexMethodSpec; import org.apache.tajo.algebra.LiteralValue.LiteralType; ++<<<<<<< HEAD +import org.apache.tajo.algebra.Sort.SortSpec; +import org.apache.tajo.catalog.CatalogUtil; ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.engine.parser.SQLParser.*; - import org.apache.tajo.plan.util.PlannerUtil; import org.apache.tajo.storage.StorageConstants; import org.apache.tajo.util.StringUtils; http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/engine/planner/PhysicalPlannerImpl.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java index 91fce57,00d346a..6bec409 --- a/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/GlobalEngine.java @@@ -39,7 -39,7 +39,11 @@@ import org.apache.tajo.conf.TajoConf import org.apache.tajo.engine.parser.SQLAnalyzer; import org.apache.tajo.engine.parser.SQLSyntaxError; import org.apache.tajo.engine.query.QueryContext; ++<<<<<<< HEAD +import org.apache.tajo.ipc.ClientProtos.ResultCode; ++======= + import org.apache.tajo.exception.ExceptionUtil; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.master.TajoMaster.MasterContext; import org.apache.tajo.master.exec.DDLExecutor; import org.apache.tajo.master.exec.QueryExecutor; @@@ -48,10 -48,7 +52,14 @@@ import org.apache.tajo.plan.logical.Ins import org.apache.tajo.plan.logical.LogicalRootNode; import org.apache.tajo.plan.logical.NodeType; import org.apache.tajo.plan.util.PlannerUtil; ++<<<<<<< HEAD +import org.apache.tajo.plan.verifier.LogicalPlanVerifier; +import org.apache.tajo.plan.verifier.PreLogicalPlanVerifier; +import org.apache.tajo.plan.verifier.VerificationState; +import org.apache.tajo.plan.verifier.VerifyException; ++======= + import org.apache.tajo.plan.verifier.*; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.session.Session; import org.apache.tajo.storage.TablespaceManager; import org.apache.tajo.util.CommonTestingUtil; @@@ -196,12 -195,7 +208,16 @@@ public class GlobalEngine extends Abstr responseBuilder.setUserName(queryContext.get(SessionVars.USERNAME)); responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); responseBuilder.setIsForwarded(true); ++<<<<<<< HEAD + String errorMessage = t.getMessage(); + if (t.getMessage() == null) { + errorMessage = t.getClass().getName(); + } + responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + errorMessage, StringUtils.stringifyException(t))); ++======= + responseBuilder.setState(ReturnStateUtil.returnError(t)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 return responseBuilder.build(); } } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java index 76bfb95,6fbe968..7d88b34 --- a/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/TajoMasterClientService.java @@@ -32,12 -31,13 +31,17 @@@ import org.apache.hadoop.service.Abstra import org.apache.tajo.QueryId; import org.apache.tajo.QueryIdFactory; import org.apache.tajo.TajoIdProtos; - import org.apache.tajo.TajoProtos; + import org.apache.tajo.TajoProtos.QueryState; import org.apache.tajo.catalog.*; - import org.apache.tajo.catalog.exception.NoSuchDatabaseException; + import org.apache.tajo.catalog.exception.UndefinedDatabaseException; import org.apache.tajo.catalog.partition.PartitionMethodDesc; import org.apache.tajo.catalog.proto.CatalogProtos; ++<<<<<<< HEAD +import org.apache.tajo.catalog.proto.CatalogProtos.IndexDescProto; ++======= + import org.apache.tajo.catalog.proto.CatalogProtos.FunctionListResponse; + import org.apache.tajo.catalog.proto.CatalogProtos.TableResponse; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.conf.TajoConf; import org.apache.tajo.conf.TajoConf.ConfVars; import org.apache.tajo.engine.query.QueryContext; @@@ -55,13 -54,8 +58,9 @@@ import org.apache.tajo.plan.logical.Par import org.apache.tajo.plan.logical.ScanNode; import org.apache.tajo.querymaster.QueryJobEvent; import org.apache.tajo.rpc.BlockingRpcServer; - import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.BoolProto; - import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringListProto; - import org.apache.tajo.rpc.protocolrecords.PrimitiveProtos.StringProto; - import org.apache.tajo.session.InvalidSessionException; - import org.apache.tajo.session.NoSuchSessionVariableException; + 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; @@@ -148,17 -134,14 +139,28 @@@ public class TajoMasterClientService ex String sessionId = context.getSessionManager().createSession(request.getUsername(), databaseName); CreateSessionResponse.Builder builder = CreateSessionResponse.newBuilder(); ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); + builder.setSessionId(TajoIdProtos.SessionIdProto.newBuilder().setId(sessionId).build()); + builder.setSessionVars(ProtoUtil.convertFromMap(context.getSessionManager().getAllVariables(sessionId))); + return builder.build(); + } catch (NoSuchDatabaseException nsde) { + CreateSessionResponse.Builder builder = CreateSessionResponse.newBuilder(); + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, nsde.getMessage(), null)); + return builder.build(); + } catch (InvalidSessionException e) { + CreateSessionResponse.Builder builder = CreateSessionResponse.newBuilder(); + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, e.getMessage(), null)); ++======= + builder.setState(OK); + builder.setSessionId(TajoIdProtos.SessionIdProto.newBuilder().setId(sessionId).build()); + builder.setSessionVars(ProtoUtil.convertFromMap(context.getSessionManager().getAllVariables(sessionId))); + return builder.build(); + + } catch (Throwable t) { + CreateSessionResponse.Builder builder = CreateSessionResponse.newBuilder(); + builder.setState(returnError(t)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 return builder.build(); } } @@@ -171,25 -154,16 +173,31 @@@ context.getSessionManager().removeSession(request.getId()); } - return BOOL_TRUE; + return OK; } ++<<<<<<< HEAD + public SessionUpdateResponse buildSessionUpdateOnSuccess(Map<String, String> variables) { + SessionUpdateResponse.Builder builder = SessionUpdateResponse.newBuilder(); + builder.setResult(IPCUtil.buildOkRequestResult()); + builder.setSessionVars(new KeyValueSet(variables).getProto()); + return builder.build(); + } ++======= + @Override + public SessionUpdateResponse updateSessionVariables(RpcController controller, + UpdateSessionVariableRequest request) + throws ServiceException { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 - public SessionUpdateResponse buildSessionUpdateOnError(String message) { SessionUpdateResponse.Builder builder = SessionUpdateResponse.newBuilder(); ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, message, null)); + return builder.build(); + } ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 - @Override - public SessionUpdateResponse updateSessionVariables(RpcController controller, UpdateSessionVariableRequest request) - throws ServiceException { try { String sessionId = request.getSessionId().getId(); for (KeyValueProto kv : request.getSessionVars().getKeyvalList()) { @@@ -283,16 -274,18 +308,29 @@@ if(LOG.isDebugEnabled()) { LOG.debug("Query [" + request.getQuery() + "] is submitted"); } + return context.getGlobalEngine().executeQuery(session, request.getQuery(), request.getIsJson()); + } catch (Exception e) { ++<<<<<<< HEAD + LOG.error(e.getMessage(), e); + SubmitQueryResponse.Builder responseBuilder = ClientProtos.SubmitQueryResponse.newBuilder(); + responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); + responseBuilder.setIsForwarded(true); + responseBuilder.setUserName(context.getConf().getVar(ConfVars.USERNAME)); + responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + e.getMessage() == null ? "Internal Error" : ExceptionUtils.getStackTrace(e), null)); + return responseBuilder.build(); ++======= + + return ClientProtos.SubmitQueryResponse.newBuilder() + .setState(returnError(e)) + .setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()) + .setIsForwarded(true) + .setUserName(context.getConf().getVar(ConfVars.USERNAME)) + .build(); + ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } @@@ -302,19 -296,13 +341,25 @@@ try { Session session = context.getSessionManager().getSession(request.getSessionId().getId()); QueryContext queryContext = new QueryContext(conf, session); + context.getGlobalEngine().updateQuery(queryContext, request.getQuery(), request.getIsJson()); + builder.setState(OK); ++<<<<<<< HEAD + UpdateQueryResponse.Builder responseBuilder = UpdateQueryResponse.newBuilder(); + try { + context.getGlobalEngine().updateQuery(queryContext, request.getQuery(), request.getIsJson()); + return responseBuilder.setResult(IPCUtil.buildOkRequestResult()).build(); + } catch (Exception e) { + responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + e.getMessage() == null ? ExceptionUtils.getStackTrace(e) : null, null)); + return responseBuilder.build(); + } ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } catch (Throwable t) { - throw new ServiceException(t); + builder.setState(returnError(t)); } + return builder.build(); } @Override @@@ -450,8 -443,8 +500,13 @@@ builder.setQueryId(request.getQueryId()); if (queryId.equals(QueryIdFactory.NULL_QUERY_ID)) { ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); + builder.setState(TajoProtos.QueryState.QUERY_SUCCEEDED); ++======= + builder.setState(OK); + builder.setQueryState(QueryState.QUERY_SUCCEEDED); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } else { QueryInProgress queryInProgress = context.getQueryJobManager().getQueryInProgress(queryId); @@@ -464,8 -457,8 +519,13 @@@ } if (queryInfo != null) { ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); + builder.setState(queryInfo.getQueryState()); ++======= + builder.setState(OK); + builder.setQueryState(queryInfo.getQueryState()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 boolean isCreateTable = queryInfo.getQueryContext().isCreateTable(); boolean isInsert = queryInfo.getQueryContext().isInsert(); @@@ -485,11 -478,10 +545,18 @@@ } else { Session session = context.getSessionManager().getSession(request.getSessionId().getId()); if (session.getNonForwardQueryResultScanner(queryId) != null) { ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); + builder.setState(TajoProtos.QueryState.QUERY_SUCCEEDED); + } else { + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + "No such query: " + queryId.toString(), null)); ++======= + builder.setState(OK); + builder.setQueryState(QueryState.QUERY_SUCCEEDED); + } else { + builder.setState(errNoSuchQueryId(queryId)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } } @@@ -541,18 -533,16 +608,26 @@@ resultSetBuilder.addAllSerializedTuples(rows); builder.setResultSet(resultSetBuilder.build()); ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); ++======= + builder.setState(OK); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 LOG.info("Send result to client for " + request.getSessionId().getId() + "," + queryId + ", " + rows.size() + " rows"); } catch (Throwable t) { - LOG.error(t.getMessage(), t); builder.setResultSet(resultSetBuilder.build()); // required field ++<<<<<<< HEAD + String errorMessage = t.getMessage() == null ? t.getClass().getName() : t.getMessage(); + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + errorMessage, org.apache.hadoop.util.StringUtils.stringifyException(t))); ++======= + builder.setState(returnError(t)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + return builder.build(); } @@@ -591,11 -584,10 +669,18 @@@ if (queryInfo != null) { builder.setQueryInfo(queryInfo.getProto()); } ++<<<<<<< HEAD + builder.setResult(IPCUtil.buildOkRequestResult()); + } catch (Throwable t) { + LOG.warn(t.getMessage(), t); + builder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + org.apache.hadoop.util.StringUtils.stringifyException(t), null)); ++======= + builder.setState(OK); + + } catch (Throwable t) { + builder.setState(returnError(t)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } return builder.build(); @@@ -777,9 -779,8 +872,14 @@@ if (!request.hasValue()) { return TableResponse.newBuilder() ++<<<<<<< HEAD + .setResult( + IPCUtil.buildRequestResult(ResultCode.ERROR, "table name is required.", null) + ).build(); ++======= + .setState(errInvalidRpcCall("Table name is required")) + .build(); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } Session session = context.getSessionManager().getSession(request.getSessionId().getId()); @@@ -797,13 -798,12 +897,22 @@@ if (catalog.existsTable(databaseName, tableName)) { return TableResponse.newBuilder() ++<<<<<<< HEAD + .setResult(IPCUtil.buildOkRequestResult()) + .setTableDesc(catalog.getTableDesc(databaseName, tableName).getProto()) + .build(); + } else { + return TableResponse.newBuilder() + .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + "ERROR: no such a table: " + request.getValue(), null)) ++======= + .setState(OK) + .setTable(catalog.getTableDesc(databaseName, tableName).getProto()) + .build(); + } else { + return TableResponse.newBuilder() + .setState(errUndefinedTable(request.getValue())) ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 .build(); } } catch (Throwable t) { @@@ -832,26 -832,26 +941,49 @@@ partitionDesc = new PartitionMethodDesc(request.getPartition()); } ++<<<<<<< HEAD + TableDesc desc; + try { + desc = context.getGlobalEngine().getDDLExecutor().createTable(queryContext, request.getName(), + null, meta.getStoreType(), schema, meta, path.toUri(), true, partitionDesc, false); + } catch (Exception e) { + return TableResponse.newBuilder() + .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, e.getMessage(), null)) + .build(); + } + + return TableResponse.newBuilder() + .setResult(IPCUtil.buildOkRequestResult()) + .setTableDesc(desc.getProto()).build(); + } catch (InvalidSessionException ise) { + return TableResponse.newBuilder() + .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, ise.getMessage(), null)) + .build(); + } catch (IOException ioe) { + return TableResponse.newBuilder() + .setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, ioe.getMessage(), null)) ++======= + TableDesc desc = context.getGlobalEngine().getDDLExecutor().createTable( + queryContext, + request.getName(), + null, + meta.getStoreType(), + schema, + meta, + path.toUri(), + true, + partitionDesc, + false + ); + + return TableResponse.newBuilder() + .setState(OK) + .setTable(desc.getProto()).build(); + + } catch (Throwable t) { + return TableResponse.newBuilder() + .setState(returnError(t)) ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 .build(); } } @@@ -891,185 -892,14 +1024,192 @@@ } } } ++<<<<<<< HEAD + return FunctionResponse.newBuilder() + .setResult(IPCUtil.buildOkRequestResult()) + .addAllFunctions(functionProtos) ++======= + return FunctionListResponse.newBuilder() + .setState(OK) + .addAllFunction(functionProtos) ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 .build(); + } catch (Throwable t) { - throw new ServiceException(t); + return FunctionListResponse.newBuilder().setState(returnError(t)).build(); } } + + @Override + public IndexDescProto getIndexWithName(RpcController controller, SessionedStringProto request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String indexName, databaseName; + if (CatalogUtil.isFQTableName(request.getValue())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); + databaseName = splitted[0]; + indexName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + indexName = request.getValue(); + } + return catalog.getIndexByName(databaseName, indexName).getProto(); + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public BoolProto existIndexWithName(RpcController controller, SessionedStringProto request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String indexName, databaseName; + if (CatalogUtil.isFQTableName(request.getValue())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); + databaseName = splitted[0]; + indexName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + indexName = request.getValue(); + } + return catalog.existIndexByName(databaseName, indexName) ? + ProtoUtil.TRUE : ProtoUtil.FALSE; + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public GetIndexesResponse getIndexesForTable(RpcController controller, SessionedStringProto request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String tableName, databaseName; + if (CatalogUtil.isFQTableName(request.getValue())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); + databaseName = splitted[0]; + tableName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + tableName = request.getValue(); + } + + GetIndexesResponse.Builder builder = GetIndexesResponse.newBuilder(); + for (IndexDesc index : catalog.getAllIndexesByTable(databaseName, tableName)) { + builder.addIndexes(index.getProto()); + } + builder.setResult(IPCUtil.buildOkRequestResult()); + return builder.build(); + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public BoolProto existIndexesForTable(RpcController controller, SessionedStringProto request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String tableName, databaseName; + if (CatalogUtil.isFQTableName(request.getValue())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); + databaseName = splitted[0]; + tableName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + tableName = request.getValue(); + } + return catalog.existIndexesByTable(databaseName, tableName) ? + ProtoUtil.TRUE : ProtoUtil.FALSE; + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public GetIndexWithColumnsResponse getIndexWithColumns(RpcController controller, GetIndexWithColumnsRequest request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String tableName, databaseName; + if (CatalogUtil.isFQTableName(request.getTableName())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getTableName()); + databaseName = splitted[0]; + tableName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + tableName = request.getTableName(); + } + 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(); + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public BoolProto existIndexWithColumns(RpcController controller, GetIndexWithColumnsRequest request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String tableName, databaseName; + if (CatalogUtil.isFQTableName(request.getTableName())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getTableName()); + databaseName = splitted[0]; + tableName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + tableName = request.getTableName(); + } + String[] columnNames = new String[request.getColumnNamesCount()]; + columnNames = request.getColumnNamesList().toArray(columnNames); + return catalog.existIndexByColumnNames(databaseName, tableName, columnNames) ? + ProtoUtil.TRUE : ProtoUtil.FALSE; + } catch (Throwable t) { + throw new ServiceException(t); + } + } + + @Override + public BoolProto dropIndex(RpcController controller, SessionedStringProto request) + throws ServiceException { + try { + context.getSessionManager().touch(request.getSessionId().getId()); + Session session = context.getSessionManager().getSession(request.getSessionId().getId()); + + String indexName, databaseName; + if (CatalogUtil.isFQTableName(request.getValue())) { + String [] splitted = CatalogUtil.splitFQTableName(request.getValue()); + databaseName = splitted[0]; + indexName = splitted[1]; + } else { + databaseName = session.getCurrentDatabase(); + indexName = request.getValue(); + } + return catalog.dropIndex(databaseName, indexName) ? + ProtoUtil.TRUE : ProtoUtil.FALSE; + } catch (Throwable t) { + throw new ServiceException(t); + } + } } } http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/DDLExecutor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/NonForwardQueryResultSystemScanner.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java index 2e5584c,d3530a0..1e35d6e --- a/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java +++ b/tajo-core/src/main/java/org/apache/tajo/master/exec/QueryExecutor.java @@@ -104,17 -107,10 +107,23 @@@ public class QueryExecutor } else if (PlannerUtil.checkIfDDLPlan(rootNode)) { context.getSystemMetrics().counter("Query", "numDDLQuery").inc(); ++<<<<<<< HEAD ++======= + ddlExecutor.execute(queryContext, plan); + response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); + response.setState(OK); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 + if (PlannerUtil.isDistExecDDL(rootNode)) { + if (rootNode.getChild().getType() == NodeType.CREATE_INDEX) { + checkIndexExistence(queryContext, (CreateIndexNode) rootNode.getChild()); + } + executeDistributedQuery(queryContext, session, plan, sql, jsonExpr, response); + } else { + response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); + response.setResult(IPCUtil.buildOkRequestResult()); + ddlExecutor.execute(queryContext, plan); + } } else if (plan.isExplain()) { // explain query execExplain(plan, queryContext, plan.isExplainGlobal(), response); @@@ -153,8 -149,7 +162,12 @@@ session.selectDatabase(setSessionNode.getValue()); } else { response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); ++<<<<<<< HEAD + response.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + "database \"" + databaseName + "\" does not exists.", null)); ++======= + response.setState(errUndefinedDatabase(databaseName)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } // others @@@ -168,7 -163,7 +181,11 @@@ context.getSystemMetrics().counter("Query", "numDDLQuery").inc(); response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); ++<<<<<<< HEAD + response.setResult(IPCUtil.buildOkRequestResult()); ++======= + response.setState(OK); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } public void execExplain(LogicalPlan plan, QueryContext queryContext, boolean isGlobal, @@@ -211,9 -206,9 +228,13 @@@ serializedResBuilder.setSchema(schema.getProto()); serializedResBuilder.setBytesNum(bytesNum); + response.setState(OK); response.setResultSet(serializedResBuilder.build()); response.setMaxRowNum(lines.length); ++<<<<<<< HEAD + response.setResult(IPCUtil.buildOkRequestResult()); ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 response.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); } @@@ -235,7 -231,6 +257,10 @@@ response.setQueryId(queryId.getProto()); response.setMaxRowNum(maxRow); response.setTableDesc(queryResultScanner.getTableDesc().getProto()); ++<<<<<<< HEAD + response.setResult(IPCUtil.buildOkRequestResult()); ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } public void execSimpleQuery(QueryContext queryContext, Session session, String query, LogicalPlan plan, @@@ -271,7 -267,6 +297,10 @@@ response.setQueryId(queryInfo.getQueryId().getProto()); response.setMaxRowNum(maxRow); response.setTableDesc(desc.getProto()); ++<<<<<<< HEAD + response.setResult(IPCUtil.buildOkRequestResult()); ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } public void execNonFromQuery(QueryContext queryContext, LogicalPlan plan, SubmitQueryResponse.Builder responseBuilder) @@@ -308,7 -304,6 +338,10 @@@ responseBuilder.setResultSet(serializedResBuilder); responseBuilder.setMaxRowNum(1); responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); ++<<<<<<< HEAD + responseBuilder.setResult(IPCUtil.buildOkRequestResult()); ++======= ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } } finally { // stop script executor @@@ -470,7 -465,7 +503,11 @@@ // If queryId == NULL_QUERY_ID and MaxRowNum == -1, TajoCli prints only number of inserted rows. responseBuilder.setMaxRowNum(-1); responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); ++<<<<<<< HEAD + responseBuilder.setResult(IPCUtil.buildOkRequestResult()); ++======= + responseBuilder.setState(OK); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } catch (Throwable t) { throw new RuntimeException(t); } @@@ -504,43 -499,17 +541,54 @@@ queryInfo = queryManager.scheduleQuery(session, queryContext, sql, jsonExpr, rootNode); ++<<<<<<< HEAD + if(queryInfo == null) { + responseBuilder.setQueryId(QueryIdFactory.NULL_QUERY_ID.getProto()); + responseBuilder.setResult(IPCUtil.buildRequestResult(ResultCode.ERROR, + "Fail starting QueryMaster.", null)); + LOG.error("Fail starting QueryMaster: " + sql); + } else { + responseBuilder.setIsForwarded(true); + responseBuilder.setQueryId(queryInfo.getQueryId().getProto()); + responseBuilder.setResult(IPCUtil.buildOkRequestResult()); + if(queryInfo.getQueryMasterHost() != null) { + responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost()); + } + responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort()); + LOG.info("Query " + queryInfo.getQueryId().toString() + "," + queryInfo.getSql() + "," + + " is forwarded to " + queryInfo.getQueryMasterHost() + ":" + queryInfo.getQueryMasterPort()); ++======= + responseBuilder.setIsForwarded(true); + responseBuilder.setQueryId(queryInfo.getQueryId().getProto()); + responseBuilder.setState(OK); + if (queryInfo.getQueryMasterHost() != null) { + responseBuilder.setQueryMasterHost(queryInfo.getQueryMasterHost()); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } + responseBuilder.setQueryMasterPort(queryInfo.getQueryMasterClientPort()); + LOG.info("Query " + queryInfo.getQueryId().toString() + "," + queryInfo.getSql() + "," + + " is forwarded to " + queryInfo.getQueryMasterHost() + ":" + queryInfo.getQueryMasterPort()); } + private void checkIndexExistence(final QueryContext queryContext, final CreateIndexNode createIndexNode) + throws IOException { + String databaseName, simpleIndexName, qualifiedIndexName; + if (CatalogUtil.isFQTableName(createIndexNode.getIndexName())) { + String[] splits = CatalogUtil.splitFQTableName(createIndexNode.getIndexName()); + databaseName = splits[0]; + simpleIndexName = splits[1]; + qualifiedIndexName = createIndexNode.getIndexName(); + } else { + databaseName = queryContext.getCurrentDatabase(); + simpleIndexName = createIndexNode.getIndexName(); + qualifiedIndexName = CatalogUtil.buildFQName(databaseName, simpleIndexName); + } + + if (catalog.existIndexByName(databaseName, simpleIndexName)) { + throw new AlreadyExistsIndexException(qualifiedIndexName); + } + } + public MasterPlan compileMasterPlan(LogicalPlan plan, QueryContext context, GlobalPlanner planner) throws Exception { http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/querymaster/Query.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java index 550b1ee,61e2dea..a1662e6 --- a/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java +++ b/tajo-core/src/main/java/org/apache/tajo/querymaster/QueryMasterTask.java @@@ -52,15 -55,18 +55,21 @@@ import org.apache.tajo.session.Session import org.apache.tajo.storage.FormatProperty; import org.apache.tajo.storage.Tablespace; import org.apache.tajo.storage.TablespaceManager; ++<<<<<<< HEAD ++======= + import org.apache.tajo.util.TUtil; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.util.metrics.TajoMetrics; import org.apache.tajo.util.metrics.reporter.MetricsConsoleReporter; - import org.apache.tajo.worker.AbstractResourceAllocator; - import org.apache.tajo.worker.TajoResourceAllocator; + import org.apache.tajo.worker.event.NodeResourceDeallocateEvent; + import org.apache.tajo.worker.event.NodeResourceEvent; + import org.apache.tajo.worker.event.NodeStatusEvent; import java.io.IOException; + import java.net.InetSocketAddress; import java.net.URI; import java.util.*; - import java.util.concurrent.atomic.AtomicBoolean; + import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicLong; import static org.apache.tajo.TajoProtos.QueryState; http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java index 2486272,1df8e7a..5b13342 --- a/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java +++ b/tajo-core/src/main/java/org/apache/tajo/webapp/QueryExecutorServlet.java @@@ -320,7 -319,7 +319,11 @@@ public class QueryExecutorServlet exten LOG.error("Internal Error: SubmissionResponse is NULL"); error = new Exception("Internal Error: SubmissionResponse is NULL"); ++<<<<<<< HEAD + } else if (response.getResult().getResultCode() == ClientProtos.ResultCode.OK) { ++======= + } else if (isSuccess(response.getState())) { ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 if (response.getIsForwarded()) { queryId = new QueryId(response.getQueryId()); getQueryResult(queryId); @@@ -332,22 -331,20 +335,27 @@@ progress.set(100); } ++<<<<<<< HEAD + } else if (response.getResult().getResultCode() == ClientProtos.ResultCode.ERROR) { + if (response.getResult().hasErrorMessage()) { + StringBuffer errorMessage = new StringBuffer(response.getResult().getErrorMessage()); + String modifiedMessage; ++======= + } else if (isError(response.getState())) { + StringBuffer errorMessage = new StringBuffer(response.getState().getMessage()); + String modifiedMessage; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 + + if (errorMessage.length() > 200) { + modifiedMessage = errorMessage.substring(0, 200); + } else { + modifiedMessage = errorMessage.toString(); + } - if (errorMessage.length() > 200) { - modifiedMessage = errorMessage.substring(0, 200); - } else { - modifiedMessage = errorMessage.toString(); - } - - String lineSeparator = System.getProperty("line.separator"); - modifiedMessage = modifiedMessage.replaceAll(lineSeparator, "<br/>"); + String lineSeparator = System.getProperty("line.separator"); + modifiedMessage = modifiedMessage.replaceAll(lineSeparator, "<br/>"); - error = new Exception(modifiedMessage); - } + error = new Exception(modifiedMessage); } } catch (Exception e) { LOG.error(e.getMessage(), e); http://git-wip-us.apache.org/repos/asf/tajo/blob/0028d7aa/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java ---------------------------------------------------------------------- diff --cc tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java index 48f4f40,edb5703..77481ae --- a/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java +++ b/tajo-core/src/main/java/org/apache/tajo/worker/TajoWorkerClientService.java @@@ -25,14 -25,11 +25,21 @@@ import org.apache.commons.logging.Log import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.service.AbstractService; +import org.apache.hadoop.util.StringUtils; import org.apache.tajo.QueryId; ++<<<<<<< HEAD +import org.apache.tajo.annotation.Nullable; +import org.apache.tajo.conf.TajoConf; +import org.apache.tajo.ipc.ClientProtos.GetQueryHistoryResponse; +import org.apache.tajo.ipc.ClientProtos.QueryIdRequest; +import org.apache.tajo.ipc.ClientProtos.RequestResult; +import org.apache.tajo.ipc.ClientProtos.ResultCode; ++======= + import org.apache.tajo.exception.ReturnStateUtil; + import org.apache.tajo.conf.TajoConf; + import org.apache.tajo.ipc.ClientProtos.GetQueryHistoryResponse; + import org.apache.tajo.ipc.ClientProtos.QueryIdRequest; ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 import org.apache.tajo.ipc.QueryMasterClientProtocol; import org.apache.tajo.querymaster.QueryMasterTask; import org.apache.tajo.rpc.BlockingRpcServer; @@@ -132,11 -129,10 +139,18 @@@ public class TajoWorkerClientService ex if (queryHistory != null) { builder.setQueryHistory(queryHistory.getProto()); } ++<<<<<<< HEAD + builder.setResult(buildOkRequestResult()); + } catch (Throwable t) { + LOG.warn(t.getMessage(), t); + builder.setResult(buildRequestResult(ResultCode.ERROR, + StringUtils.stringifyException(t), null)); ++======= + builder.setState(ReturnStateUtil.OK); + } catch (Throwable t) { + LOG.error(t.getMessage(), t); + builder.setState(ReturnStateUtil.returnError(t)); ++>>>>>>> c50a5dadff90fa90709abbce59856e834baa4867 } return builder.build();
