Search in sources :

Example 1 with RemoteTraverserResultParser

use of com.alibaba.graphscope.gaia.result.RemoteTraverserResultParser in project GraphScope by alibaba.

the class TraversalOpProcessor method select.

@Override
public ThrowingConsumer<Context> select(Context ctx) throws OpProcessorException {
    final RequestMessage message = ctx.getRequestMessage();
    final ThrowingConsumer<Context> op;
    final GremlinExecutor executor = ctx.getGremlinExecutor();
    final SimpleBindings b = new SimpleBindings();
    final Map<String, String> aliases = (Map<String, String>) message.optionalArgs(Tokens.ARGS_ALIASES).get();
    final String traversalSourceName = aliases.entrySet().iterator().next().getValue();
    logger.info("tokens ops is {}", message.getOp());
    if (config.getGraphType() == GraphType.MAXGRAPH) {
        graphStore.updateSnapShotId();
    }
    switch(message.getOp()) {
        case Tokens.OPS_BYTECODE:
            op = (context -> {
                try {
                    Object byteCode = message.getArgs().get(Tokens.ARGS_GREMLIN);
                    Traversal traversal = executor.eval((Bytecode) byteCode, new SimpleBindings(), null, traversalSourceName);
                    GaiaGraphOpProcessor.applyStrategy(traversal, config, graphStore);
                    long queryId = (long) queryIdMaker.getId(traversal);
                    TraversalBuilder traversalBuilder = new TraversalBuilder((Traversal.Admin) traversal).addConfig(PlanConfig.QUERY_ID, queryId).addConfig(PlanConfig.TAG_ID_MAKER, new TagIdMaker((Traversal.Admin) traversal)).addConfig(PlanConfig.QUERY_CONFIG, PlanUtils.getDefaultConfig(queryId, config));
                    if (config.getGraphType() == GraphType.MAXGRAPH) {
                        traversalBuilder.addConfig(PlanConfig.SNAPSHOT_ID, Long.valueOf(graphStore.getSnapShotId()));
                    }
                    AbstractBuilder jobReqBuilder = new TraversalTranslator(traversalBuilder).translate();
                    PlanUtils.print(jobReqBuilder);
                    broadcastProcessor.broadcast(jobReqBuilder.build(), new GremlinResultProcessor(ctx, new RemoteTraverserResultParser(traversalBuilder, graphStore, config)));
                    logger.info("query-{} finish", queryId);
                } catch (SchemaNotFoundException e) {
                    throw new OpProcessorException("schema not found error", ResponseMessage.build(message).code(ResponseStatusCode.SUCCESS).result(Collections.EMPTY_LIST).create());
                }
            });
            return op;
        case Tokens.OPS_KEYS:
            GaiaGraphOpProcessor.writeResultList(ctx, Collections.EMPTY_LIST, ResponseStatusCode.SUCCESS);
            return null;
        default:
            String errorMsg = "not support " + message.getOp();
            GaiaGraphOpProcessor.writeResultList(ctx, Collections.singletonList(errorMsg), ResponseStatusCode.REQUEST_ERROR_INVALID_REQUEST_ARGUMENTS);
            return null;
    }
}
Also used : Context(org.apache.tinkerpop.gremlin.server.Context) TraversalBuilder(com.alibaba.graphscope.gaia.plan.translator.builder.TraversalBuilder) Bytecode(org.apache.tinkerpop.gremlin.process.traversal.Bytecode) AbstractBroadcastProcessor(com.alibaba.graphscope.gaia.broadcast.AbstractBroadcastProcessor) TraversalTranslator(com.alibaba.graphscope.gaia.plan.translator.TraversalTranslator) ThrowingConsumer(org.apache.tinkerpop.gremlin.util.function.ThrowingConsumer) Tokens(org.apache.tinkerpop.gremlin.driver.Tokens) LoggerFactory(org.slf4j.LoggerFactory) IdMaker(com.alibaba.graphscope.gaia.idmaker.IdMaker) RequestMessage(org.apache.tinkerpop.gremlin.driver.message.RequestMessage) ResponseMessage(org.apache.tinkerpop.gremlin.driver.message.ResponseMessage) GremlinResultProcessor(com.alibaba.graphscope.gaia.result.GremlinResultProcessor) Map(java.util.Map) OpProcessorException(org.apache.tinkerpop.gremlin.server.op.OpProcessorException) IncrementalQueryIdMaker(com.alibaba.graphscope.gaia.idmaker.IncrementalQueryIdMaker) GraphStoreService(com.alibaba.graphscope.gaia.store.GraphStoreService) Logger(org.slf4j.Logger) SchemaNotFoundException(com.alibaba.graphscope.gaia.store.SchemaNotFoundException) GaiaConfig(com.alibaba.graphscope.gaia.config.GaiaConfig) PlanUtils(com.alibaba.graphscope.gaia.plan.PlanUtils) RemoteTraverserResultParser(com.alibaba.graphscope.gaia.result.RemoteTraverserResultParser) AbstractBuilder(com.alibaba.pegasus.builder.AbstractBuilder) SimpleBindings(javax.script.SimpleBindings) TagIdMaker(com.alibaba.graphscope.gaia.idmaker.TagIdMaker) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) PlanConfig(com.alibaba.graphscope.gaia.plan.translator.builder.PlanConfig) ResponseStatusCode(org.apache.tinkerpop.gremlin.driver.message.ResponseStatusCode) GraphType(com.alibaba.graphscope.gaia.store.GraphType) Context(org.apache.tinkerpop.gremlin.server.Context) GremlinExecutor(org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor) AbstractOpProcessor(org.apache.tinkerpop.gremlin.server.op.AbstractOpProcessor) Collections(java.util.Collections) OpProcessorException(org.apache.tinkerpop.gremlin.server.op.OpProcessorException) AbstractBuilder(com.alibaba.pegasus.builder.AbstractBuilder) GremlinExecutor(org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor) TraversalBuilder(com.alibaba.graphscope.gaia.plan.translator.builder.TraversalBuilder) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) GremlinResultProcessor(com.alibaba.graphscope.gaia.result.GremlinResultProcessor) SimpleBindings(javax.script.SimpleBindings) RequestMessage(org.apache.tinkerpop.gremlin.driver.message.RequestMessage) TagIdMaker(com.alibaba.graphscope.gaia.idmaker.TagIdMaker) Bytecode(org.apache.tinkerpop.gremlin.process.traversal.Bytecode) TraversalTranslator(com.alibaba.graphscope.gaia.plan.translator.TraversalTranslator) SchemaNotFoundException(com.alibaba.graphscope.gaia.store.SchemaNotFoundException) Map(java.util.Map) RemoteTraverserResultParser(com.alibaba.graphscope.gaia.result.RemoteTraverserResultParser)

Aggregations

AbstractBroadcastProcessor (com.alibaba.graphscope.gaia.broadcast.AbstractBroadcastProcessor)1 GaiaConfig (com.alibaba.graphscope.gaia.config.GaiaConfig)1 IdMaker (com.alibaba.graphscope.gaia.idmaker.IdMaker)1 IncrementalQueryIdMaker (com.alibaba.graphscope.gaia.idmaker.IncrementalQueryIdMaker)1 TagIdMaker (com.alibaba.graphscope.gaia.idmaker.TagIdMaker)1 PlanUtils (com.alibaba.graphscope.gaia.plan.PlanUtils)1 TraversalTranslator (com.alibaba.graphscope.gaia.plan.translator.TraversalTranslator)1 PlanConfig (com.alibaba.graphscope.gaia.plan.translator.builder.PlanConfig)1 TraversalBuilder (com.alibaba.graphscope.gaia.plan.translator.builder.TraversalBuilder)1 GremlinResultProcessor (com.alibaba.graphscope.gaia.result.GremlinResultProcessor)1 RemoteTraverserResultParser (com.alibaba.graphscope.gaia.result.RemoteTraverserResultParser)1 GraphStoreService (com.alibaba.graphscope.gaia.store.GraphStoreService)1 GraphType (com.alibaba.graphscope.gaia.store.GraphType)1 SchemaNotFoundException (com.alibaba.graphscope.gaia.store.SchemaNotFoundException)1 AbstractBuilder (com.alibaba.pegasus.builder.AbstractBuilder)1 Collections (java.util.Collections)1 Map (java.util.Map)1 SimpleBindings (javax.script.SimpleBindings)1 Tokens (org.apache.tinkerpop.gremlin.driver.Tokens)1 RequestMessage (org.apache.tinkerpop.gremlin.driver.message.RequestMessage)1