Hi Oleg,

Yes I have looked at test cases and test data which it is trying to write.
In tests cases it is trying to write only few bytes of data which is way
less than 1024 bytes of data in a single write call which works without any
problem.

Now for my testing I have changed that test to create SharedOutputBuffer of
initial size greater that 4 MB and tried to write chunck of data with size
1024 bytes. When we try to write 1024 bytes of data it hangs.
*Note*: I have used testcode present in *testBasis* function


Regards,
Sreenivas


On Thu, Mar 30, 2023, 10:48 PM Oleg Kalnichevski <ol...@apache.org> wrote:

> On Thu, 2023-03-30 at 19:46 +0530, sreenivas somavarapu wrote:
> > Hi Oleg,
> >
> > I have copied code from *testBasis* function of
> > *TestSharedOutputBuffer.java* and ran the test with my data and
> > chunck size
> > of 1024 and it also hangs at first insert of data itself. So this
> > behavior
> > is irrespective of whether you use flush or not. If I use chunck size
> > of
> > 1023 then test case passes without any hang.
> >
> > FYI. All the tests in that file tries to write few bytes of data only
> > and
> > that to in a single write call.
> >
>
>
> _What on earth_ are talking about? Have you even bothered to look at
> the test code? Have you?
>
> This test case uses a tiny (20 bytes) shared buffer and performs
> multiple writes exceeding its total size several times over.
>
>
> https://github.com/apache/httpcomponents-core/blob/master/httpcore5/src/test/java/org/apache/hc/core5/http/nio/support/classic/TestSharedOutputBuffer.java#L141
>
> Oleg
>
>
>
> > Regards,
> > Sreenivas
> >
> > On Thu, Mar 30, 2023, 6:55 PM sreenivas somavarapu
> > <soma.sreeni...@gmail.com>
> > wrote:
> >
> > > Hi Oleg,
> > >
> > > That condition (i.e., using of flush call) will hold good if I have
> > > already have data in buffer, but in this case I am trying to
> > > produce data
> > > i.e., first time using buffer to add data and it gets hanged.
> > >
> > > Now the tests will pass with out any changes except for
> > > decrementing the
> > > data chunck to be written to less that 1024 (I.e., 1023 or smaller
> > > and no
> > > flush call used).
> > >
> > > This implies that even tough enough capacity is there buffer is
> > > unable to
> > > take data of chuncks 1024 or above bytes.
> > >
> > > Regards
> > > Sreenivas
> > >
> > > On Thu, Mar 30, 2023, 4:22 PM Oleg Kalnichevski <ol...@apache.org>
> > > wrote:
> > >
> > > > On Thu, 2023-03-30 at 15:53 +0530, sreenivas somavarapu wrote:
> > > > > Hi Oleg,
> > > > >
> > > > > You conveyed that flush is missing and  I have stated it is
> > > > > first
> > > > > write to
> > > > > buffer then how come we can do flush without any data and there
> > > > > was a
> > > > > reply
> > > > > stating write our own custom implementation.
> > > >
> > > > One needs to flush shared data from _another_ thread of
> > > > execution.
> > > > There must be at least two concurrent threads of execution: one
> > > > producing and one consuming or visa versa. This is the reason the
> > > > write
> > > > operation blocks. I also told you to look at the test cases for
> > > > the
> > > > shared buffers in the project test suite in order to see how they
> > > > are
> > > > intended to be used but you would not listen.
> > > >
> > > > Oleg
> > > >
> > > >
> > > > >
> > > > > What I am trying to convey is there is a genuine issue with
> > > > > buffer
> > > > > implementation which could be reproducible which are mentioned
> > > > > in my
> > > > > mail.
> > > > > Even when buffer has capacity we will not be able to write data
> > > > > into
> > > > > buffer
> > > > > if data we are trying to write is of 1024 bytes and less that
> > > > > buffer
> > > > > capacity available.
> > > > >
> > > > > Regards,
> > > > > Sreenivas
> > > > >
> > > > >
> > > > > On Thu, Mar 30, 2023, 3:01 PM Oleg Kalnichevski
> > > > > <ol...@apache.org>
> > > > > wrote:
> > > > >
> > > > > > I already answered your question some while ago and explained
> > > > > > what
> > > > > > you
> > > > > > were doing incorrectly. You basically dismissed my answer and
> > > > > > keep
> > > > > > on
> > > > > > posting the same query over and over again. This is not going
> > > > > > to
> > > > > > help.
> > > > > >
> > > > > > Oleg
> > > > > >
> > > > > >
> > > > > > On Thu, 2023-03-30 at 14:39 +0530, sreenivas somavarapu
> > > > > > wrote:
> > > > > > > Hi Team,
> > > > > > >
> > > > > > > There is a hang issue happening with SharedOutputBuffer
> > > > > > > when
> > > > > > > trying
> > > > > > > to
> > > > > > > insert data chunck of 1024 bytes or above. However this
> > > > > > > works
> > > > > > > fine if
> > > > > > > data
> > > > > > > chunck being inserted is less that 1024 bytes.
> > > > > > >
> > > > > > > Simple way to reproduce the problem is
> > > > > > > - Create SharedOutputBuffer with 4096 bytes of capacity
> > > > > > > - Now try to write 1024 bytes of data chunck to above
> > > > > > > created
> > > > > > > buffer
> > > > > > >
> > > > > > > Second step will cause hang and by looking at code it looks
> > > > > > > like
> > > > > > > below
> > > > > > > condition is causing problem
> > > > > > >
> > > > > > > if (src.remaining() < 1024 && buffer().remaining() >
> > > > > > > src.remaining())
> > > > > > > {
> > > > > > >
> > > > > > > Problem with this above condition is that even though
> > > > > > > buffer has
> > > > > > > capacity
> > > > > > > to store complete contents of src, this condition will not
> > > > > > > satisfy if
> > > > > > > src
> > > > > > > has 1024 bytes or more data (may well be in limit of actual
> > > > > > > size
> > > > > > > provided
> > > > > > > during creation of buffer) to be written to buffer
> > > > > > >
> > > > > > > second step still will cause in a hang as first if
> > > > > > > condition is
> > > > > > > not
> > > > > > > satisfied due to src.remaining() < 1024 even though there
> > > > > > > is
> > > > > > > enough
> > > > > > > capacity to store data and it proceeds to second condition
> > > > > > > which
> > > > > > > will
> > > > > > > cause
> > > > > > > the program to wait on a condition for flush (even though
> > > > > > > this is
> > > > > > > the
> > > > > > > first
> > > > > > > write we are performing)
> > > > > > >
> > > > > > > if (buffer().position() > 0 || dataStreamChannel == null) {
> > > > > > >                          waitFlush();
> > > > > > > }
> > > > > > >
> > > > > > > Regards,
> > > > > > > Sreenivas
> > > > > >
> > > > > >
> > > > > > -------------------------------------------------------------
> > > > > > ------
> > > > > > --
> > > > > > To unsubscribe, e-mail:
> > > > > > httpclient-users-unsubscr...@hc.apache.org
> > > > > > For additional commands, e-mail:
> > > > > > httpclient-users-h...@hc.apache.org
> > > > > >
> > > > > >
> > > >
> > > >
> > > > -----------------------------------------------------------------
> > > > ----
> > > > To unsubscribe, e-mail:
> > > > httpclient-users-unsubscr...@hc.apache.org
> > > > For additional commands, e-mail:
> > > > httpclient-users-h...@hc.apache.org
> > > >
> > > >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org
> For additional commands, e-mail: httpclient-users-h...@hc.apache.org
>
>

Reply via email to