
com.tinkerpop.gremlin.server.handler.IteratorHandler Maven / Gradle / Ivy
The newest version!
package com.tinkerpop.gremlin.server.handler;
import com.tinkerpop.gremlin.driver.Tokens;
import com.tinkerpop.gremlin.driver.message.RequestMessage;
import com.tinkerpop.gremlin.driver.message.ResponseMessage;
import com.tinkerpop.gremlin.driver.message.ResponseStatusCode;
import com.tinkerpop.gremlin.server.Settings;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelOutboundHandlerAdapter;
import io.netty.channel.ChannelPromise;
import io.netty.util.ReferenceCountUtil;
import io.netty.util.concurrent.EventExecutorGroup;
import io.netty.util.concurrent.Future;
import org.apache.commons.lang.time.StopWatch;
import org.javatuples.Pair;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeoutException;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class IteratorHandler extends ChannelOutboundHandlerAdapter {
private static final Logger logger = LoggerFactory.getLogger(IteratorHandler.class);
private final Settings settings;
public IteratorHandler(final Settings settings) {
this.settings = settings;
}
@Override
public void write(final ChannelHandlerContext ctx, final Object msg, final ChannelPromise promise) throws Exception {
if (msg instanceof Pair) {
try {
final Pair pair = (Pair) msg;
final Iterator itty = (Iterator) pair.getValue1();
final RequestMessage requestMessage = (RequestMessage) pair.getValue0();
// the batch size can be overriden by the request
final int resultIterationBatchSize = (Integer) requestMessage.optionalArgs(Tokens.ARGS_BATCH_SIZE).orElse(settings.resultIterationBatchSize);
// timer for the total serialization time
final StopWatch stopWatch = new StopWatch();
final EventExecutorGroup executorService = ctx.executor();
final Future> iteration = executorService.submit((Callable) () -> {
logger.debug("Preparing to iterate results from - {} - in thread [{}]", requestMessage, Thread.currentThread().getName());
stopWatch.start();
List
© 2015 - 2025 Weber Informatics LLC | Privacy Policy