@Override public Response run(JerseyResourceDelegateContext context) { JerseyResourceDelegateContextKey<String> queryIdKey = JerseyResourceDelegateContextKey.valueOf(queryIdKeyName, String.class); String queryId = context.get(queryIdKey); JerseyResourceDelegateContextKey<String> printTypeKey = JerseyResourceDelegateContextKey.valueOf(printTypeKeyName, String.class); String printType = context.get(printTypeKey); JerseyResourceDelegateContextKey<MasterContext> masterContextKey = JerseyResourceDelegateContextKey.valueOf( JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class); MasterContext masterContext = context.get(masterContextKey); QueryId queryIdObj = TajoIdUtils.parseQueryId(queryId); QueryManager queryManager = masterContext.getQueryJobManager(); QueryInProgress queryInProgress = queryManager.getQueryInProgress(queryIdObj); QueryInfo queryInfo = null; if (queryInProgress == null) { queryInfo = queryManager.getFinishedQuery(queryIdObj); } else { queryInfo = queryInProgress.getQueryInfo(); } if (queryInfo != null) { if (briefPrint.equalsIgnoreCase(printType)) { queryInfo = getBriefQueryInfo(queryInfo); } return Response.ok(queryInfo).build(); } else { return Response.status(Status.NOT_FOUND).build(); } }
@Override public Response run(JerseyResourceDelegateContext context) { JerseyResourceDelegateContextKey<String> sessionIdKey = JerseyResourceDelegateContextKey.valueOf(sessionIdKeyName, String.class); String sessionId = context.get(sessionIdKey); JerseyResourceDelegateContextKey<SubmitQueryRequest> submitQueryRequestKey = JerseyResourceDelegateContextKey.valueOf( submitQueryRequestKeyName, SubmitQueryRequest.class); SubmitQueryRequest request = context.get(submitQueryRequestKey); JerseyResourceDelegateContextKey<MasterContext> masterContextKey = JerseyResourceDelegateContextKey.valueOf( JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class); MasterContext masterContext = context.get(masterContextKey); if (sessionId == null || sessionId.isEmpty()) { return ResourcesUtil.createBadRequestResponse(LOG, "Session Id is null or empty string."); } if (request == null || request.getQuery() == null || request.getQuery().isEmpty()) { return ResourcesUtil.createBadRequestResponse(LOG, "query is null or emptry string."); } Session session; try { session = masterContext.getSessionManager().getSession(sessionId); } catch (InvalidSessionException e) { return ResourcesUtil.createBadRequestResponse( LOG, "Provided session id (" + sessionId + ") is invalid."); } SubmitQueryResponse response = masterContext.getGlobalEngine().executeQuery(session, request.getQuery(), false); if (ReturnStateUtil.isError(response.getState())) { return ResourcesUtil.createExceptionResponse(LOG, response.getState().getMessage()); } else { JerseyResourceDelegateContextKey<UriInfo> uriInfoKey = JerseyResourceDelegateContextKey.valueOf( JerseyResourceDelegateUtil.UriInfoKey, UriInfo.class); UriInfo uriInfo = context.get(uriInfoKey); QueryId queryId = new QueryId(response.getQueryId()); URI queryURI = uriInfo .getBaseUriBuilder() .path(QueryResource.class) .path(QueryResource.class, "getQuery") .build(queryId.toString()); GetSubmitQueryResponse queryResponse = new GetSubmitQueryResponse(); if (queryId.isNull() == false) { queryResponse.setUri(queryURI); } queryResponse.setResultCode(response.getState().getReturnCode()); queryResponse.setQuery(request.getQuery()); return Response.status(Status.OK).entity(queryResponse).build(); } }
@Override public Response run(JerseyResourceDelegateContext context) { JerseyResourceDelegateContextKey<String> stateKey = JerseyResourceDelegateContextKey.valueOf(stateKeyName, String.class); String state = context.get(stateKey); JerseyResourceDelegateContextKey<Long> startTimeKey = JerseyResourceDelegateContextKey.valueOf(startTimeKeyName, Long.class); long startTime = context.get(startTimeKey); JerseyResourceDelegateContextKey<Long> endTimeKey = JerseyResourceDelegateContextKey.valueOf(endTimeKeyName, Long.class); long endTime = context.get(endTimeKey); JerseyResourceDelegateContextKey<MasterContext> masterContextKey = JerseyResourceDelegateContextKey.valueOf( JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class); MasterContext masterContext = context.get(masterContextKey); TajoProtos.QueryState queryState = null; try { if (state != null && !state.isEmpty()) { queryState = TajoProtos.QueryState.valueOf(state); } } catch (Exception e) { return ResourcesUtil.createBadRequestResponse(LOG, state + " is not a valid query state."); } Map<String, List<QueryInfo>> queriesMap = new HashMap<>(); List<QueryInfo> queriesInfo = new ArrayList<>(); QueryManager queryManager = masterContext.getQueryJobManager(); for (QueryInProgress queryInProgress : queryManager.getSubmittedQueries()) { queriesInfo.add(queryInProgress.getQueryInfo()); } for (QueryInProgress queryInProgress : queryManager.getRunningQueries()) { queriesInfo.add(queryInProgress.getQueryInfo()); } queriesInfo.addAll(queryManager.getFinishedQueries()); if (state != null) { queriesInfo = selectQueriesInfoByState(queriesInfo, queryState); } if (startTime > 0 || endTime > 0) { queriesInfo = selectQueriesInfoByTime(queriesInfo, startTime, endTime); } queriesMap.put("queries", queriesInfo); return Response.ok(queriesMap).build(); }
private List<Tuple> getAllPartitions(Schema outSchema) { List<TablePartitionProto> partitionList = masterContext.getCatalog().getAllPartitions(); List<Tuple> tuples = new ArrayList<Tuple>(partitionList.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (TablePartitionProto partition : partitionList) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("partition_id".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(partition.getPartitionId())); } else if ("tid".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(partition.getTid())); } else if ("partition_name".equalsIgnoreCase(column.getSimpleName())) { if (partition.hasPartitionName()) { aTuple.put(fieldId, DatumFactory.createText(partition.getPartitionName())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } else if ("path".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(partition.getPath())); } } tuples.add(aTuple); } return tuples; }
private List<Tuple> getAllTableOptions(Schema outSchema) { List<TableOptionProto> optionList = masterContext.getCatalog().getAllTableOptions(); List<Tuple> tuples = new ArrayList<Tuple>(optionList.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (TableOptionProto option : optionList) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("tid".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(option.getTid())); } else if ("key_".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(option.getKeyval().getKey())); } else if ("value_".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(option.getKeyval().getValue())); } } tuples.add(aTuple); } return tuples; }
private List<Tuple> getAllTableStats(Schema outSchema) { List<TableStatsProto> statList = masterContext.getCatalog().getAllTableStats(); List<Tuple> tuples = new ArrayList<Tuple>(statList.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (TableStatsProto stat : statList) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("tid".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(stat.getTid())); } else if ("num_rows".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt8(stat.getNumRows())); } else if ("num_bytes".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt8(stat.getNumBytes())); } } tuples.add(aTuple); } return tuples; }
private List<Tuple> getTables(Schema outSchema) { List<TableDescriptorProto> tables = masterContext.getCatalog().getAllTables(); List<Tuple> tuples = new ArrayList<Tuple>(tables.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (TableDescriptorProto table : tables) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("tid".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(table.getTid())); } else if ("db_id".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(table.getDbId())); } else if ("table_name".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(table.getName())); } else if ("table_type".equalsIgnoreCase(column.getSimpleName())) { if (table.hasTableType()) { aTuple.put(fieldId, DatumFactory.createText(table.getTableType())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } else if ("path".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(table.getPath())); } else if ("store_type".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(table.getStoreType())); } } tuples.add(aTuple); } return tuples; }
private List<Tuple> getDatabases(Schema outSchema) { List<DatabaseProto> databases = masterContext.getCatalog().getAllDatabases(); List<Tuple> tuples = new ArrayList<Tuple>(databases.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (DatabaseProto database : databases) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("db_id".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(database.getId())); } else if ("db_name".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(database.getName())); } else if ("space_id".equalsIgnoreCase(column.getSimpleName())) { if (database.hasSpaceId()) { aTuple.put(fieldId, DatumFactory.createInt4(database.getSpaceId())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } } tuples.add(aTuple); } return tuples; }
private List<Tuple> getTablespaces(Schema outSchema) { List<TablespaceProto> tablespaces = masterContext.getCatalog().getAllTablespaces(); List<Tuple> tuples = new ArrayList<Tuple>(tablespaces.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (TablespaceProto tablespace : tablespaces) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("space_id".equalsIgnoreCase(column.getSimpleName())) { if (tablespace.hasId()) { aTuple.put(fieldId, DatumFactory.createInt4(tablespace.getId())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } else if ("space_name".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(tablespace.getSpaceName())); } else if ("space_handler".equalsIgnoreCase(column.getSimpleName())) { if (tablespace.hasHandler()) { aTuple.put(fieldId, DatumFactory.createText(tablespace.getHandler())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } else if ("space_uri".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(tablespace.getUri())); } } tuples.add(aTuple); } return tuples; }
@Override public void init() throws IOException { QueryContext queryContext = new QueryContext(masterContext.getConf()); currentRow = 0; MasterPlan masterPlan = new MasterPlan(queryId, queryContext, logicalPlan); GlobalPlanner globalPlanner = new GlobalPlanner(masterContext.getConf(), masterContext.getCatalog()); try { globalPlanner.build(queryContext, masterPlan); } catch (PlanningException e) { throw new RuntimeException(e); } ExecutionBlockCursor cursor = new ExecutionBlockCursor(masterPlan); ExecutionBlock leafBlock = null; for (ExecutionBlock block : cursor) { if (masterPlan.isLeaf(block)) { leafBlock = block; break; } } if (leafBlock == null) { throw new InvalidQueryException("Global planner could not find any leaf block."); } taskContext = new TaskAttemptContext( queryContext, null, new TaskAttemptId(new TaskId(leafBlock.getId(), 0), 0), null, null); physicalExec = new SimplePhysicalPlannerImpl(masterContext.getConf()) .createPlan(taskContext, leafBlock.getPlan()); tableDesc = new TableDesc( "table_" + System.currentTimeMillis(), physicalExec.getSchema(), new TableMeta("SYSTEM", new KeyValueSet()), null); outSchema = physicalExec.getSchema(); encoder = RowStoreUtil.createEncoder(getLogicalSchema()); physicalExec.init(); }
@Override public Response run(JerseyResourceDelegateContext context) { JerseyResourceDelegateContextKey<String> queryIdKey = JerseyResourceDelegateContextKey.valueOf(queryIdKeyName, String.class); String queryId = context.get(queryIdKey); JerseyResourceDelegateContextKey<MasterContext> masterContextKey = JerseyResourceDelegateContextKey.valueOf( JerseyResourceDelegateUtil.MasterContextKey, MasterContext.class); MasterContext masterContext = context.get(masterContextKey); QueryId queryIdObj = TajoIdUtils.parseQueryId(queryId); QueryManager queryManager = masterContext.getQueryJobManager(); queryManager .getEventHandler() .handle(new QueryJobEvent(QueryJobEvent.Type.QUERY_JOB_KILL, new QueryInfo(queryIdObj))); return Response.ok().build(); }
private List<Tuple> getColumns(Schema outSchema) { List<ColumnProto> columnsList = masterContext.getCatalog().getAllColumns(); List<Tuple> tuples = new ArrayList<Tuple>(columnsList.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; int columnId = 1, prevtid = -1, tid = 0; for (ColumnProto column : columnsList) { aTuple = new VTuple(outSchema.size()); tid = column.getTid(); if (prevtid != tid) { columnId = 1; prevtid = tid; } for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column colObj = columns.get(fieldId); if ("tid".equalsIgnoreCase(colObj.getSimpleName())) { if (column.hasTid()) { aTuple.put(fieldId, DatumFactory.createInt4(tid)); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } else if ("column_name".equalsIgnoreCase(colObj.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(column.getName())); } else if ("ordinal_position".equalsIgnoreCase(colObj.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(columnId)); } else if ("data_type".equalsIgnoreCase(colObj.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(column.getDataType().getType().toString())); } else if ("type_length".equalsIgnoreCase(colObj.getSimpleName())) { DataType dataType = column.getDataType(); if (dataType.hasLength()) { aTuple.put(fieldId, DatumFactory.createInt4(dataType.getLength())); } else { aTuple.put(fieldId, DatumFactory.createNullDatum()); } } } columnId++; tuples.add(aTuple); } return tuples; }
private List<Tuple> getSessionInfo(Schema outSchema) { List<Tuple> outputs = Lists.newArrayList(); Tuple eachVariable; try { for (Map.Entry<String, String> var : masterContext.getSessionManager().getAllVariables(sessionId).entrySet()) { eachVariable = new VTuple(outSchema.size()); eachVariable.put(0, DatumFactory.createText(var.getKey())); eachVariable.put(1, DatumFactory.createText(var.getValue())); outputs.add(eachVariable); } } catch (InvalidSessionException e) { LOG.error(e); } return outputs; }
private List<Tuple> getClusterInfo(Schema outSchema) { Map<Integer, Worker> workerMap = masterContext.getResourceManager().getWorkers(); List<Tuple> tuples; List<Worker> queryMasterList = new ArrayList<Worker>(); List<Worker> workerList = new ArrayList<Worker>(); for (Worker aWorker : workerMap.values()) { queryMasterList.add(aWorker); workerList.add(aWorker); } tuples = new ArrayList<Tuple>(queryMasterList.size() + workerList.size()); for (Worker queryMaster : queryMasterList) { tuples.add(getQueryMasterTuple(outSchema, queryMaster)); } for (Worker worker : workerList) { tuples.add(getWorkerTuple(outSchema, worker)); } return tuples; }
private List<Tuple> getIndexes(Schema outSchema) { List<IndexProto> indexList = masterContext.getCatalog().getAllIndexes(); List<Tuple> tuples = new ArrayList<Tuple>(indexList.size()); List<Column> columns = outSchema.getRootColumns(); Tuple aTuple; for (IndexProto index : indexList) { aTuple = new VTuple(outSchema.size()); for (int fieldId = 0; fieldId < columns.size(); fieldId++) { Column column = columns.get(fieldId); if ("db_id".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(index.getDbId())); } else if ("tid".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createInt4(index.getTId())); } else if ("index_name".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(index.getIndexName())); } else if ("column_name".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(index.getColumnName())); } else if ("data_type".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(index.getDataType())); } else if ("index_type".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createText(index.getIndexType())); } else if ("is_unique".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createBool(index.getIsUnique())); } else if ("is_clustered".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createBool(index.getIsClustered())); } else if ("is_ascending".equalsIgnoreCase(column.getSimpleName())) { aTuple.put(fieldId, DatumFactory.createBool(index.getIsAscending())); } } tuples.add(aTuple); } return tuples; }