Package com.facebook.presto.jdbc.internal.airlift.http.client.netty

Source Code of com.facebook.presto.jdbc.internal.airlift.http.client.netty.HttpClientPipelineFactory

package com.facebook.presto.jdbc.internal.airlift.http.client.netty;

import com.facebook.presto.jdbc.internal.guava.base.Preconditions;
import com.facebook.presto.jdbc.internal.guava.primitives.Ints;
import com.facebook.presto.jdbc.internal.airlift.units.DataSize;
import com.facebook.presto.jdbc.internal.airlift.units.Duration;
import com.facebook.presto.jdbc.internal.netty.channel.ChannelPipeline;
import com.facebook.presto.jdbc.internal.netty.channel.ChannelPipelineFactory;
import com.facebook.presto.jdbc.internal.netty.handler.codec.http.HttpChunkAggregator;
import com.facebook.presto.jdbc.internal.netty.handler.codec.http.HttpClientCodec;
import com.facebook.presto.jdbc.internal.netty.handler.codec.http.HttpContentDecompressor;
import com.facebook.presto.jdbc.internal.netty.handler.execution.ExecutionHandler;
import com.facebook.presto.jdbc.internal.netty.handler.execution.OrderedMemoryAwareThreadPoolExecutor;
import com.facebook.presto.jdbc.internal.netty.handler.timeout.ReadTimeoutHandler;
import com.facebook.presto.jdbc.internal.netty.util.Timer;

import java.util.concurrent.TimeUnit;

import static com.facebook.presto.jdbc.internal.netty.channel.Channels.pipeline;

public class HttpClientPipelineFactory
        implements ChannelPipelineFactory
{
    private final Timer timer;
    private final OrderedMemoryAwareThreadPoolExecutor executor;
    private final ReadTimeoutHandler timeoutHandler;
    private final NettyConnectionPool nettyConnectionPool;
    private final int maxContentLength;

    public HttpClientPipelineFactory(NettyConnectionPool nettyConnectionPool,
            Timer timer,
            OrderedMemoryAwareThreadPoolExecutor executor,
            Duration readTimeout,
            DataSize maxContentLength)
    {
        this.timer = timer;
        Preconditions.checkNotNull(nettyConnectionPool, "nettyConnectionPool is null");
        Preconditions.checkNotNull(executor, "executor is null");
        Preconditions.checkNotNull(readTimeout, "readTimeout is null");
        Preconditions.checkNotNull(maxContentLength, "maxContentLength is null");

        this.nettyConnectionPool = nettyConnectionPool;
        this.executor = executor;
        this.timeoutHandler = new ReadTimeoutHandler(this.timer, readTimeout.toMillis(), TimeUnit.MILLISECONDS);
        this.maxContentLength = Ints.checkedCast(maxContentLength.toBytes());
    }

    public ChannelPipeline getPipeline()
            throws Exception
    {
        // Create a default pipeline implementation.
        ChannelPipeline pipeline = pipeline();

        // timeout read requests
        pipeline.addLast("timeout", timeoutHandler);

        // read and write http messages
        pipeline.addLast("codec", new HttpClientCodec());

        // decompress gzip responses
        pipeline.addLast("inflater", new HttpContentDecompressor());

        // gather all chunks into a single http message
        pipeline.addLast("aggregator", new HttpChunkAggregator(maxContentLength));

        // move response handler to user worker pool
        pipeline.addLast("pipelineExecutor", new ExecutionHandler(executor));

        // response handler
        pipeline.addLast("handler", new NettyHttpResponseChannelHandler(nettyConnectionPool));

        return pipeline;
    }
}
TOP

Related Classes of com.facebook.presto.jdbc.internal.airlift.http.client.netty.HttpClientPipelineFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.