Search in sources :

Example 1 with QueryFlowManager

use of com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager in project GraphScope by alibaba.

the class TimelyExecutor method prepare.

@Override
public void prepare(String prepareId, TimelyQuery timelyQuery, ExecuteConfig executeConfig) {
    QueryFlowManager queryFlowManager = timelyQuery.getQueryFlowManager();
    checkArgument(queryFlowManager.checkValidPrepareFlow(), "There's no argument for prepare statement");
    try {
        if (statementStore.checkExist(prepareId)) {
            throw new RuntimeException("PREPARE " + prepareId + " fail for the same name statement has been exist.");
        }
        QueryFlowOuterClass.QueryFlow queryFlow = queryFlowManager.getQueryFlow().setQueryId(prepareId).build();
        rpcConnector.prepare(queryFlow, this.isAsyncGrpc);
        OperatorListManager operatorListManager = queryFlowManager.getOperatorListManager();
        statementStore.save(prepareId, new PrepareStoreEntity(operatorListManager.getPrepareEntityList(), operatorListManager.getLabelManager(), queryFlowManager.getResultValueType(), queryFlow));
        logger.info("PREPARE " + prepareId + " success");
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
Also used : OperatorListManager(com.alibaba.maxgraph.compiler.optimizer.OperatorListManager) QueryFlowManager(com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager) PrepareStoreEntity(com.alibaba.maxgraph.compiler.prepare.store.PrepareStoreEntity) QueryFlowOuterClass(com.alibaba.maxgraph.QueryFlowOuterClass) IOException(java.io.IOException)

Example 2 with QueryFlowManager

use of com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager in project GraphScope by alibaba.

the class MixedTraversalOpProcessor method doProcessTraversal.

private Long doProcessTraversal(Context context, Object object, Graph graph, long timeout, String queryId, Stopwatch timer) {
    Pair<GraphSchema, Long> snapshotSchema;
    GraphSchema schema;
    Long resultNum = 0L;
    if (object instanceof GraphTraversal.Admin || object instanceof DfsTraversal) {
        QueryStatus queryStatus;
        GraphTraversal.Admin traversal = (object instanceof GraphTraversal.Admin) ? GraphTraversal.Admin.class.cast(object) : (DfsTraversal.class.cast(object)).getTraversal();
        String queryString = traversal.toString();
        logger.info("Receive traversal query=>" + queryString);
        if (!traversal.isLocked()) {
            traversal.getStrategies().removeStrategies(ProfileStrategy.class, MxGraphStepStrategy.class, FilterRankingStrategy.class);
        }
        traversal.applyStrategies();
        NettyVertexRpcProcessor nettyVertexRpcProcessor;
        QueryFlowManager queryFlowManager;
        // 保证一查看到snapshotId就开始维护query_status
        synchronized (queryCallbackManager) {
            snapshotSchema = schemaFetcher.getSchemaSnapshotPair();
            queryStatus = queryCallbackManager.beforeExecution(snapshotSchema.getRight());
        }
        schema = snapshotSchema.getLeft();
        LogicalPlanOptimizer planOptimizer = new LogicalPlanOptimizer(new OptimizeConfig(), this.globalPullGraphFlag, schema, snapshotSchema.getRight(), this.lambdaEnableFlag);
        final int resultIterationBatchSize = (Integer) context.getRequestMessage().optionalArgs(Tokens.ARGS_BATCH_SIZE).orElse(this.resultIterationBatchSize);
        nettyVertexRpcProcessor = new NettyTraverserVertexProcessor(context, resultIterationBatchSize, false);
        try {
            queryFlowManager = (object instanceof GraphTraversal.Admin) ? planOptimizer.build(GraphTraversal.class.cast(traversal)) : planOptimizer.build(DfsTraversal.class.cast(object));
        } catch (IllegalArgumentException iae) {
            if (iae.getMessage().contains("MaxGraphIoStep")) {
                logger.info("do maxgraph io step");
                while (traversal.hasNext()) {
                    logger.info("maxgraph io hasNext");
                }
                nettyVertexRpcProcessor.finish(ResponseStatusCode.SUCCESS);
                return 0L;
            }
            throw iae;
        }
        try {
            boolean isLambdaExisted = TraversalHelper.anyStepRecursively(s -> s instanceof LambdaHolder, (Traversal.Admin<?, ?>) traversal);
            queryFlowManager.getQueryFlow().setFrontId(serverId);
            if (this.lambdaEnableFlag && isLambdaExisted) {
                final ObjectMapper mapper = GraphSONMapper.build().version(GraphSONVersion.V3_0).addCustomModule(GraphSONXModuleV3d0.build().create(false)).create().createMapper();
                Bytecode bytecode = (Bytecode) context.getRequestMessage().getArgs().get(Tokens.ARGS_GREMLIN);
                byte[] bytecodeByte = mapper.writeValueAsBytes(bytecode);
                queryFlowManager.getQueryFlow().setLambdaExisted(isLambdaExisted).setBytecode(ByteString.copyFrom(bytecodeByte));
            }
            GremlinResultTransform gremlinResultTransform = new GremlinResultTransform(remoteRpcConnector, nettyVertexRpcProcessor, this.graph, queryFlowManager.getResultValueType(), vertexCacheFlag);
            NettyResultProcessor nettyResultProcessor = new NettyResultProcessor(queryId, traversal.toString(), context, new ExecuteConfig().getBatchQuerySize(), resultIterationBatchSize, false);
            nettyResultProcessor.setSchema(schema);
            nettyResultProcessor.setResultTransform(gremlinResultTransform);
            nettyResultProcessor.setLabelIndexNameList(queryFlowManager.getTreeNodeLabelManager().getUserIndexLabelList());
            TimelyQuery timelyQuery = new TimelyQuery(queryFlowManager, nettyResultProcessor, this.graph);
            Logging.query(this.graphName, FRONTEND, this.serverId, queryId, QueryType.EXECUTE, QueryEvent.PLAN_GENERATED, timer.elapsed(TimeUnit.NANOSECONDS), null, null, "");
            timelyExecutor.execute(timelyQuery, schema, timeout, queryId);
            resultNum = nettyResultProcessor.total();
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } finally {
            queryCallbackManager.afterExecution(queryStatus);
        }
    } else {
        throw new IllegalArgumentException("Not support to process=>" + object);
    }
    return resultNum;
}
Also used : TimelyQuery(com.alibaba.maxgraph.compiler.query.TimelyQuery) DfsTraversal(com.alibaba.maxgraph.compiler.dfs.DfsTraversal) LambdaHolder(org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder) GraphTraversal(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) DfsTraversal(com.alibaba.maxgraph.compiler.dfs.DfsTraversal) QueryFlowManager(com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager) ByteString(com.google.protobuf.ByteString) QueryStatus(com.alibaba.maxgraph.api.query.QueryStatus) GraphSchema(com.alibaba.maxgraph.compiler.api.schema.GraphSchema) GraphTraversal(org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal) Bytecode(org.apache.tinkerpop.gremlin.process.traversal.Bytecode) JsonProcessingException(org.apache.tinkerpop.shaded.jackson.core.JsonProcessingException) ObjectMapper(org.apache.tinkerpop.shaded.jackson.databind.ObjectMapper) OptimizeConfig(com.alibaba.maxgraph.compiler.optimizer.OptimizeConfig) LogicalPlanOptimizer(com.alibaba.maxgraph.compiler.optimizer.LogicalPlanOptimizer) ExecuteConfig(com.alibaba.maxgraph.compiler.executor.ExecuteConfig)

Example 3 with QueryFlowManager

use of com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager in project GraphScope by alibaba.

the class CompilerBaseTest method executeQuery.

protected void executeQuery(DfsTraversal traversal) {
    QueryFlowManager queryFlowManager = logicalPlanOptimizer.build(traversal);
    System.out.println(TextFormat.printToString(queryFlowManager.getQueryFlow().build()));
    assertResultPlan(TextFormat.printToString(queryFlowManager.getQueryFlow().build()));
}
Also used : QueryFlowManager(com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager)

Example 4 with QueryFlowManager

use of com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager in project GraphScope by alibaba.

the class AbstractOperatorTest method executeTreeQuery.

protected void executeTreeQuery(GraphTraversal traversal) {
    QueryFlowManager queryFlowManager = logicalPlanOptimizer.build(traversal);
    String resultContent = TextFormat.printToString(queryFlowManager.getQueryFlow().build());
    System.out.println(resultContent);
    if (writeFlag) {
        try {
            IOUtils.write(resultContent, new FileOutputStream(new File(getWriteDirectory() + "/" + name.getMethodName())), "utf-8");
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    } else {
        assertResultPlan(name.getMethodName(), resultContent);
    }
}
Also used : FileOutputStream(java.io.FileOutputStream) QueryFlowManager(com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager) IOException(java.io.IOException) File(java.io.File)

Example 5 with QueryFlowManager

use of com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager in project GraphScope by alibaba.

the class CompilerBaseTest method executeQuery.

protected void executeQuery(GraphTraversal traversal) {
    QueryFlowManager queryFlowManager = logicalPlanOptimizer.build(traversal);
    System.out.println(TextFormat.printToString(queryFlowManager.getQueryFlow().build()));
    assertResultPlan(TextFormat.printToString(queryFlowManager.getQueryFlow().build()));
}
Also used : QueryFlowManager(com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager)

Aggregations

QueryFlowManager (com.alibaba.maxgraph.compiler.optimizer.QueryFlowManager)7 IOException (java.io.IOException)3 QueryStatus (com.alibaba.maxgraph.api.query.QueryStatus)2 GraphSchema (com.alibaba.maxgraph.compiler.api.schema.GraphSchema)2 DfsTraversal (com.alibaba.maxgraph.compiler.dfs.DfsTraversal)2 LogicalPlanOptimizer (com.alibaba.maxgraph.compiler.optimizer.LogicalPlanOptimizer)2 OptimizeConfig (com.alibaba.maxgraph.compiler.optimizer.OptimizeConfig)2 TimelyQuery (com.alibaba.maxgraph.compiler.query.TimelyQuery)2 File (java.io.File)2 FileOutputStream (java.io.FileOutputStream)2 Traversal (org.apache.tinkerpop.gremlin.process.traversal.Traversal)2 GraphTraversal (org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal)2 LambdaHolder (org.apache.tinkerpop.gremlin.process.traversal.step.LambdaHolder)2 QueryFlowOuterClass (com.alibaba.maxgraph.QueryFlowOuterClass)1 RetryGremlinException (com.alibaba.maxgraph.compiler.exception.RetryGremlinException)1 ExecuteConfig (com.alibaba.maxgraph.compiler.executor.ExecuteConfig)1 OperatorListManager (com.alibaba.maxgraph.compiler.optimizer.OperatorListManager)1 PreparedTraversal (com.alibaba.maxgraph.compiler.prepare.PreparedTraversal)1 PrepareStoreEntity (com.alibaba.maxgraph.compiler.prepare.store.PrepareStoreEntity)1 ByteString (com.google.protobuf.ByteString)1