private Builder(final RequestMessage requestMessage) { this.requestId = requestMessage.getRequestId(); }
private void evalOp(final Context context) throws OpProcessorException { if (logger.isDebugEnabled()) { final RequestMessage msg = context.getRequestMessage(); logger.debug("Sessionless request {} for eval in thread {}", msg.getRequestId(), Thread.currentThread().getName()); } evalOpInternal(context, context::getGremlinExecutor, bindingMaker.apply(context)); }
/** * Examines the {@link RequestMessage} and extracts the session token. The session is then either found or a new * one is created. */ protected static Session getSession(final Context context, final RequestMessage msg) { final String sessionId = (String) msg.getArgs().get(Tokens.ARGS_SESSION); logger.debug("In-session request {} for eval for session {} in thread {}", msg.getRequestId(), sessionId, Thread.currentThread().getName()); final Session session = sessions.computeIfAbsent(sessionId, k -> new Session(k, context, sessions)); session.touch(); return session; }
/** * Writes a response message to the underlying channel while ensuring that at most one * {@link ResponseStatusCode#isFinalResponse() final} response is written. * <p>The caller must make sure that the provided response status code matches the content of the message.</p> * <p>Note: this method should be used instead of writing to the channel directly when multiple threads * are expected to produce response messages concurrently.</p> * <p>Attempts to write more than one final response message will be ignored.</p> * @see #writeAndFlush(ResponseMessage) */ public void writeAndFlush(final ResponseStatusCode code, final Object responseMessage) { final boolean messageIsFinal = code.isFinalResponse(); if(finalResponseWritten.compareAndSet(false, messageIsFinal)) { context.getChannelHandlerContext().writeAndFlush(responseMessage); } else { final String logMessage = String.format("Another final response message was already written for request %s, ignoring response code: %s", context.getRequestMessage().getRequestId(), code); logger.warn(logMessage); } } }
public DriverRemoteTraversalSideEffects(final Client client, final ResultSet rs) { this.client = client; this.serverSideEffect = rs.getOriginalRequestMessage().getRequestId(); this.host = rs.getHost(); this.ready = rs.allItemsAvailableAsync(); this.statusAttributes = rs.statusAttributes(); }
@Override public ByteBuf serializeRequestAsBinary(final RequestMessage requestMessage, final ByteBufAllocator allocator) throws SerializationException { ByteBuf encodedMessage = null; try { final Kryo kryo = kryoThreadLocal.get(); try (final ByteArrayOutputStream baos = new ByteArrayOutputStream()) { final Output output = new Output(baos, bufferSize); final String mimeType = mimeTypesSupported()[0]; output.writeByte(mimeType.length()); output.write(mimeType.getBytes(UTF8)); kryo.writeObject(output, requestMessage.getRequestId()); output.writeString(requestMessage.getProcessor()); output.writeString(requestMessage.getOp()); kryo.writeObject(output, requestMessage.getArgs()); final long size = output.total(); if (size > Integer.MAX_VALUE) throw new SerializationException(String.format("Message size of %s exceeds allocatable space", size)); output.flush(); encodedMessage = allocator.buffer((int) size); encodedMessage.writeBytes(baos.toByteArray()); } return encodedMessage; } catch (Exception ex) { if (encodedMessage != null) ReferenceCountUtil.release(encodedMessage); logger.warn(String.format("Request [%s] could not be serialized by %s.", requestMessage, AbstractGryoMessageSerializerV1d0.class.getName()), ex); throw new SerializationException(ex); } }
@Override protected void iterateComplete(final ChannelHandlerContext ctx, final RequestMessage msg, final Iterator itty) { if (itty instanceof TraverserIterator) { final Traversal.Admin traversal = ((TraverserIterator) itty).getTraversal(); if (!traversal.getSideEffects().isEmpty()) { cache.put(msg.getRequestId(), traversal.getSideEffects()); } } }
pending.put(requestMessage.getRequestId(), handler); cluster.executor().submit(() -> future.complete( new ResultSet(handler, cluster.executor(), readCompleted, requestMessage, pool.host)));
public ByteBuf writeValue(final RequestMessage value, final ByteBufAllocator allocator, final GraphBinaryWriter context) throws SerializationException { return allocator.compositeBuffer(5).addComponents(true, // Version allocator.buffer(1).writeByte(0x81), // RequestId context.writeValue(value.getRequestId(), allocator, false), // Op context.writeValue(value.getOp(), allocator, false), // Processor context.writeValue(value.getProcessor(), allocator, false), // Args context.writeValue(value.getArgs(), allocator, false)); } }
public void ser(final RequestMessage requestMessage, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException { GraphSONUtil.writeStartObject(requestMessage, jsonGenerator, typeSerializer); jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, requestMessage.getRequestId().toString()); jsonGenerator.writeStringField(SerTokens.TOKEN_OP, requestMessage.getOp()); jsonGenerator.writeStringField(SerTokens.TOKEN_PROCESSOR, requestMessage.getProcessor()); jsonGenerator.writeObjectField(SerTokens.TOKEN_ARGS, requestMessage.getArgs()); GraphSONUtil.writeEndObject(requestMessage, jsonGenerator, typeSerializer); } }
private void gatherSideEffect(final Context context) throws OpProcessorException { final RequestMessage msg = context.getRequestMessage(); logger.debug("Side-effect request {} for in thread {}", msg.getRequestId(), Thread.currentThread().getName()); logger.warn(String.format("Exception processing a side-effect on iteration for request [%s].", msg.getRequestId()), ex); ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR) .statusMessage(ex.getMessage()) logger.warn(String.format("Exception processing a side-effect on request [%s].", msg.getRequestId()), ex); ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR) .statusMessage(ex.getMessage())
cache.put(msg.getRequestId(), ((TraverserIterator)itty).getTraversal().getSideEffects());
@Override public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final RequestMessage requestMessage) { kryo.writeObject(output, requestMessage.getRequestId()); output.writeString(requestMessage.getProcessor()); output.writeString(requestMessage.getOp()); kryo.writeObject(output, requestMessage.getArgs()); }
private void iterateBytecodeTraversal(final Context context) throws Exception { final RequestMessage msg = context.getRequestMessage(); logger.debug("Traversal request {} for in thread {}", msg.getRequestId(), Thread.currentThread().getName()); onError(graph, context); } else { logger.warn(String.format("Exception processing a Traversal on iteration for request [%s].", msg.getRequestId()), ex); ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR) .statusMessage(ex.getMessage()) logger.warn(String.format("Exception processing a Traversal on request [%s].", msg.getRequestId()), ex); ctx.writeAndFlush(ResponseMessage.build(msg).code(ResponseStatusCode.SERVER_ERROR) .statusMessage(ex.getMessage())
logger.debug("Close request {} for in thread {}", msg.getRequestId(), Thread.currentThread().getName());
logger.warn("The result [{}] in the request {} could not be serialized and returned.", aggregate, msg.getRequestId(), ex); final String errorMessage = String.format("Error during serialization: %s", ExceptionHelper.getMessageFromExceptionOrCause(ex)); final ResponseMessage error = ResponseMessage.build(msg.getRequestId()) .statusMessage(errorMessage) .statusAttributeException(ex)
public DriverRemoteTraversalSideEffects(final Client client, final ResultSet rs) { this.client = client; this.serverSideEffect = rs.getOriginalRequestMessage().getRequestId(); this.host = rs.getHost(); this.ready = rs.allItemsAvailableAsync(); this.statusAttributes = rs.statusAttributes(); }
@Override protected void iterateComplete(final ChannelHandlerContext ctx, final RequestMessage msg, final Iterator itty) { if (itty instanceof TraverserIterator) { final Traversal.Admin traversal = ((TraverserIterator) itty).getTraversal(); if (!traversal.getSideEffects().isEmpty()) { cache.put(msg.getRequestId(), traversal.getSideEffects()); } } }
public void ser(final RequestMessage requestMessage, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider, final TypeSerializer typeSerializer) throws IOException { GraphSONUtil.writeStartObject(requestMessage, jsonGenerator, typeSerializer); jsonGenerator.writeStringField(SerTokens.TOKEN_REQUEST, requestMessage.getRequestId().toString()); jsonGenerator.writeStringField(SerTokens.TOKEN_OP, requestMessage.getOp()); jsonGenerator.writeStringField(SerTokens.TOKEN_PROCESSOR, requestMessage.getProcessor()); jsonGenerator.writeObjectField(SerTokens.TOKEN_ARGS, requestMessage.getArgs()); GraphSONUtil.writeEndObject(requestMessage, jsonGenerator, typeSerializer); } }
@Override public <O extends OutputShim> void write(final KryoShim<?, O> kryo, final O output, final RequestMessage requestMessage) { kryo.writeObject(output, requestMessage.getRequestId()); output.writeString(requestMessage.getProcessor()); output.writeString(requestMessage.getOp()); kryo.writeObject(output, requestMessage.getArgs()); }