示例#1
0
  public Fetcher(TajoConf conf, URI uri, FileChunk chunk) {
    this.uri = uri;
    this.fileChunk = chunk;
    this.useLocalFile = !chunk.fromRemote();
    this.state = TajoProtos.FetcherState.FETCH_INIT;
    this.conf = conf;

    String scheme = uri.getScheme() == null ? "http" : uri.getScheme();
    this.host = uri.getHost() == null ? "localhost" : uri.getHost();
    this.port = uri.getPort();
    if (port == -1) {
      if (scheme.equalsIgnoreCase("http")) {
        this.port = 80;
      } else if (scheme.equalsIgnoreCase("https")) {
        this.port = 443;
      }
    }

    if (!useLocalFile) {
      bootstrap =
          new Bootstrap()
              .group(
                  NettyUtils.getSharedEventLoopGroup(
                      NettyUtils.GROUP.FETCHER,
                      conf.getIntVar(TajoConf.ConfVars.SHUFFLE_RPC_CLIENT_WORKER_THREAD_NUM)))
              .channel(NioSocketChannel.class)
              .option(ChannelOption.ALLOCATOR, PooledByteBufAllocator.DEFAULT)
              .option(
                  ChannelOption.CONNECT_TIMEOUT_MILLIS,
                  conf.getIntVar(TajoConf.ConfVars.SHUFFLE_FETCHER_CONNECT_TIMEOUT) * 1000)
              .option(ChannelOption.SO_RCVBUF, 1048576) // set 1M
              .option(ChannelOption.TCP_NODELAY, true);

      ChannelInitializer<Channel> initializer =
          new HttpClientChannelInitializer(fileChunk.getFile());
      bootstrap.handler(initializer);
    }
  }