You are viewing a plain text version of this content. The canonical link for it is here.
Posted to httpclient-users@hc.apache.org by ARul <ar...@acm.org> on 2013/12/02 00:14:19 UTC

Re: CoreConnectionPNames.MIN_CHUNK_LIMIT equivalent in 4.3.1

Hi Oleg,

I was looking into BHttpConnectionBase#createOutputStream method. To change
the default chunk size (2048), I believe the only way is to implement a
custom http client connection and override createOuptputStream(). Here is
what I have so far.

    public static class CustomManagedHttpClientConnection extends
DefaultManagedHttpClientConnection {
        private final int chunkSize;

        public CustomManagedHttpClientConnection(final String id, final int
buffersize, final int chunkSize) {
            super(id, buffersize);
            this.chunkSize = chunkSize;
        }

        @Override
        protected OutputStream createOutputStream(long len,
SessionOutputBuffer outbuffer) {
            if (len == ContentLengthStrategy.CHUNKED) {
                return new ChunkedOutputStream(chunkSize, outbuffer);
            } else if (len == ContentLengthStrategy.IDENTITY) {
                return new IdentityOutputStream(outbuffer);
            } else {
                return new ContentLengthOutputStream(outbuffer, len);
            }
        }
    }

    public static class CustomManagedHttpClientConnectionFactory extends
ManagedHttpClientConnectionFactory {

        private final int chunkSize;

        public CustomManagedHttpClientConnectionFactory(int chunkSize) {
            this.chunkSize = chunkSize;
        }

        @Override
        public ManagedHttpClientConnection create(HttpRoute route,
ConnectionConfig config) {
            final String id = "http-outgoing-" +
Long.toString(COUNTER.getAndIncrement());
            return new CustomManagedHttpClientConnection(id,
config.getBufferSize(), chunkSize);
        }
    }

Usage:

        int chunkSize = 1024;
        HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection>
connFactory = new CustomManagedHttpClientConnectionFactory(chunkSize);
        PoolingHttpClientConnectionManager connManager = new
PoolingHttpClientConnectionManager(connFactory);
        CloseableHttpClient client = HttpClients.createMinimal(connManager);

Do you recommend a better approach? Is there a way to configure this
per-request instead of client?

- ARul






On Wed, Nov 13, 2013 at 8:29 AM, Arul Dhesiaseelan <ar...@acm.org> wrote:

> Thanks Oleg for clearing this up.
>
>
> On Wed, Nov 13, 2013 at 7:06 AM, Oleg Kalnichevski <ol...@apache.org>wrote:
>
>> On Wed, 2013-11-13 at 06:54 -1000, Arul Dhesiaseelan wrote:
>> > Using chunked encoding to write the entity. So, this property is not
>> > intended to control the chunk size of the entity?
>> >
>>
>> No, it is not. I admit that javadocs may be unclear about it but I did
>> try to describe its purpose to my best abilities.
>>
>> If you want to change the default chunk size from 2048 to something else
>> you should be looking at the BHttpConnectionBase#createOutputStream
>> method.
>>
>> Oleg
>>
>> > - Arul
>> >
>> >
>> > On Wed, Nov 13, 2013 at 6:43 AM, Oleg Kalnichevski <ol...@apache.org>
>> wrote:
>> >
>> > > On Wed, 2013-11-13 at 06:32 -1000, Arul Dhesiaseelan wrote:
>> > > > Hi Oleg,
>> > > >
>> > > > Using it to control the chunk size on the Client, which can be
>> > > configurable.
>> > > >
>> > >
>> > > Chunks of what? MIN_CHUNK_LIMIT has nothing to do with chunk coding.
>> > > Misleading name was one of the reasons why this parameter was
>> > > discontinued.
>> > >
>> > > Oleg
>> > >
>> > > > - Arul
>> > > >
>> > > >
>> > > > On Wed, Nov 13, 2013 at 5:40 AM, Oleg Kalnichevski <
>> olegk@apache.org>
>> > > wrote:
>> > > >
>> > > > > On Tue, 2013-11-12 at 18:49 -1000, Arul Dhesiaseelan wrote:
>> > > > > > Hi,
>> > > > > >
>> > > > > > CoreConnectionPNames is deprecated. I could not find
>> MIN_CHUNK_LIMIT
>> > > > > > configuration in 4.3.1. The closest I can see is
>> > > > > > ConnectionConfig.bufferSize. Not sure if they are the same.
>> > > > > >
>> > > > > > Any idea?
>> > > > > >
>> > > > >
>> > > > > Arul
>> > > > >
>> > > > > There is no direct equivalent of MIN_CHUNK_LIMIT in 4.3. What are
>> you
>> > > > > using this parameter for?
>> > > > >
>> > > > > Oleg
>> > > > >
>> > > > >
>> > > > >
>> > > > >
>> ---------------------------------------------------------------------
>> > > > > To unsubscribe, e-mail:
>> httpclient-users-unsubscribe@hc.apache.org
>> > > > > For additional commands, e-mail:
>> httpclient-users-help@hc.apache.org
>> > > > >
>> > > > >
>> > >
>> > >
>> > >
>> > > ---------------------------------------------------------------------
>> > > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> > > For additional commands, e-mail: httpclient-users-help@hc.apache.org
>> > >
>> > >
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
>> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>>
>>
>

Re: CoreConnectionPNames.MIN_CHUNK_LIMIT equivalent in 4.3.1

Posted by ARul <ar...@acm.org>.
Ok cool. I was thinking of configuring it at runtime, but I think it may
not be needed.

Thanks!
ARul


On Sun, Dec 1, 2013 at 11:39 PM, Oleg Kalnichevski <ol...@apache.org> wrote:

> On Sun, 2013-12-01 at 13:14 -1000, ARul wrote:
> > Hi Oleg,
> >
> > I was looking into BHttpConnectionBase#createOutputStream method. To
> change
> > the default chunk size (2048), I believe the only way is to implement a
> > custom http client connection and override createOuptputStream(). Here is
> > what I have so far.
> >
> >     public static class CustomManagedHttpClientConnection extends
> > DefaultManagedHttpClientConnection {
> >         private final int chunkSize;
> >
> >         public CustomManagedHttpClientConnection(final String id, final
> int
> > buffersize, final int chunkSize) {
> >             super(id, buffersize);
> >             this.chunkSize = chunkSize;
> >         }
> >
> >         @Override
> >         protected OutputStream createOutputStream(long len,
> > SessionOutputBuffer outbuffer) {
> >             if (len == ContentLengthStrategy.CHUNKED) {
> >                 return new ChunkedOutputStream(chunkSize, outbuffer);
> >             } else if (len == ContentLengthStrategy.IDENTITY) {
> >                 return new IdentityOutputStream(outbuffer);
> >             } else {
> >                 return new ContentLengthOutputStream(outbuffer, len);
> >             }
> >         }
> >     }
> >
> >     public static class CustomManagedHttpClientConnectionFactory extends
> > ManagedHttpClientConnectionFactory {
> >
> >         private final int chunkSize;
> >
> >         public CustomManagedHttpClientConnectionFactory(int chunkSize) {
> >             this.chunkSize = chunkSize;
> >         }
> >
> >         @Override
> >         public ManagedHttpClientConnection create(HttpRoute route,
> > ConnectionConfig config) {
> >             final String id = "http-outgoing-" +
> > Long.toString(COUNTER.getAndIncrement());
> >             return new CustomManagedHttpClientConnection(id,
> > config.getBufferSize(), chunkSize);
> >         }
> >     }
> >
> > Usage:
> >
> >         int chunkSize = 1024;
> >         HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection>
> > connFactory = new CustomManagedHttpClientConnectionFactory(chunkSize);
> >         PoolingHttpClientConnectionManager connManager = new
> > PoolingHttpClientConnectionManager(connFactory);
> >         CloseableHttpClient client =
> HttpClients.createMinimal(connManager);
> >
> > Do you recommend a better approach?
>
> I cannot suggest anything better.
>
> > Is there a way to configure this
> > per-request instead of client?
> >
>
> Why would you want to do that in the first place?
>
> Oleg
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
>
>

Re: CoreConnectionPNames.MIN_CHUNK_LIMIT equivalent in 4.3.1

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Sun, 2013-12-01 at 13:14 -1000, ARul wrote:
> Hi Oleg,
> 
> I was looking into BHttpConnectionBase#createOutputStream method. To change
> the default chunk size (2048), I believe the only way is to implement a
> custom http client connection and override createOuptputStream(). Here is
> what I have so far.
> 
>     public static class CustomManagedHttpClientConnection extends
> DefaultManagedHttpClientConnection {
>         private final int chunkSize;
> 
>         public CustomManagedHttpClientConnection(final String id, final int
> buffersize, final int chunkSize) {
>             super(id, buffersize);
>             this.chunkSize = chunkSize;
>         }
> 
>         @Override
>         protected OutputStream createOutputStream(long len,
> SessionOutputBuffer outbuffer) {
>             if (len == ContentLengthStrategy.CHUNKED) {
>                 return new ChunkedOutputStream(chunkSize, outbuffer);
>             } else if (len == ContentLengthStrategy.IDENTITY) {
>                 return new IdentityOutputStream(outbuffer);
>             } else {
>                 return new ContentLengthOutputStream(outbuffer, len);
>             }
>         }
>     }
> 
>     public static class CustomManagedHttpClientConnectionFactory extends
> ManagedHttpClientConnectionFactory {
> 
>         private final int chunkSize;
> 
>         public CustomManagedHttpClientConnectionFactory(int chunkSize) {
>             this.chunkSize = chunkSize;
>         }
> 
>         @Override
>         public ManagedHttpClientConnection create(HttpRoute route,
> ConnectionConfig config) {
>             final String id = "http-outgoing-" +
> Long.toString(COUNTER.getAndIncrement());
>             return new CustomManagedHttpClientConnection(id,
> config.getBufferSize(), chunkSize);
>         }
>     }
> 
> Usage:
> 
>         int chunkSize = 1024;
>         HttpConnectionFactory<HttpRoute, ManagedHttpClientConnection>
> connFactory = new CustomManagedHttpClientConnectionFactory(chunkSize);
>         PoolingHttpClientConnectionManager connManager = new
> PoolingHttpClientConnectionManager(connFactory);
>         CloseableHttpClient client = HttpClients.createMinimal(connManager);
> 
> Do you recommend a better approach? 

I cannot suggest anything better. 

> Is there a way to configure this
> per-request instead of client?
> 

Why would you want to do that in the first place?

Oleg



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org