Hi Oleg, It looks like some issue with SharedOutputBuffer implementation and it is also not expandable as we have to allocate complete size during initialization itself. If I change below two lines from my program it proceeds further and completes the request (Basically SharedOutputBuffer is not able to write 1024 or above bytes of data at single go (If we declare temp block size as 1023 also it works)). It looks like there is an explicit 1024 length check in SharedOutputBuffer which is causing this behavior.
SharedOutputBuffer buffer = new SharedOutputBuffer(req.contentLength() + 1024); byte[] tmp = new byte[512]; Earlier those 2 lines were as below SharedOutputBuffer buffer = new SharedOutputBuffer(1024); byte[] tmp = new byte[4 * 1024]; Below is my sample program on SharedOutputBuffer which demonstrated this behavior final StringBuilder sbuffer = new StringBuilder("123"); System.out.println("O/P: " + sbuffer.toString()); for (long i = 0; i < (64 * 1000); ++i) { sbuffer.append('A'); } String postData = sbuffer.toString(); System.out.println("O/P1: " + postData); byte[] inputData = postData.getBytes(StandardCharsets.UTF_8); ByteArrayInputStream inputStream = new ByteArrayInputStream(inputData); SharedOutputBuffer outputStream = new SharedOutputBuffer(100 * 1024); *<-- If we keep this as 4 * 1024 also it hangs.* *byte[] tmp = new byte[1024]; <-- If we change this to 1023 then it works* int l = -1; while ((l = inputStream.read(tmp)) != -1) { System.out.println("Writing Data"); System.out.println(l); outputStream.write(tmp, 0, l); System.out.println("Wrote Data"); } System.out.println("Done Writing Data"); outputStream.writeCompleted(); System.out.println(outputStream.toString()); Regards, Sreenivas On Mon, Mar 6, 2023 at 7:17 PM Oleg Kalnichevski <ol...@apache.org> wrote: > On Mon, 2023-03-06 at 16:26 +0530, sreenivas somavarapu wrote: > > Hi Team, > > > > We are using AbstractClassicEntityProducer with a customization of > > storing > > / computing contentLength as well which works fine if we have small > > POST > > data, but when POST data is big (for example 64 KB), it seems > > OutPutstream > > (internally using ContentOutputStream a wrapper over > > SharedOutputBuffer of > > initial size 1024) is not able to write data (We are using temporary > > buffer > > block of 4kb but still it is not able to write 4KB of data). Is there > > any > > limitation or some configuration problem? > > > > *Code being used* > > SharedOutputBuffer buffer = new SharedOutputBuffer(1024); > > > > produceData(contentType, new ContentOutputStream(buffer)); > > > > protected void produceData(ContentType contentType, OutputStream > > outputStream) throws IOException { > > byte[] tmp = new byte[4 * 1024]; > > int l = -1; > > while ((l = inputStream.read(tmp)) != -1) { > > * outputStream.write(tmp, 0, l); <---- This is where > > request > > hangs / waits* > > This is likely due to a bug in your code that prevents the shared > buffer from being flushed. > > Oleg > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > -- Cheers, S. Sreenivas