}
public static void evalOp(final Context context) throws OpProcessorException {
final Timer.Context timerContext = evalOpTimer.time();
final ChannelHandlerContext ctx = context.getChannelHandlerContext();
final RequestMessage msg = context.getRequestMessage();
final Session session = getSession(context, msg);
// place the session on the channel context so that it can be used during serialization. in this way
// the serialization can occur on the same thread used to execute the gremlin within the session. this
// is important given the threadlocal nature of Graph implementation transactions.
context.getChannelHandlerContext().channel().attr(StateKey.SESSION).set(session);
final String script = (String) msg.getArgs().get(Tokens.ARGS_GREMLIN);
final Optional<String> language = Optional.ofNullable((String) msg.getArgs().get(Tokens.ARGS_LANGUAGE));
final Bindings bindings = session.getBindings();
final Map<String, Object> requestBindings = Optional.ofNullable((Map<String, Object>) msg.getArgs().get(Tokens.ARGS_BINDINGS)).orElse(new HashMap<>());
// parameter bindings override session bindings
bindings.putAll(requestBindings);
final CompletableFuture<Object> future = session.getGremlinExecutor().eval(script, language, bindings);