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;
}
}
Aggregations